电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

电子发烧友网>嵌入式技术>Linux内核学习笔记:printk调试

Linux内核学习笔记:printk调试

收藏

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论

查看更多

相关推荐

嵌入式Linux启动时间优化的秘密之三-内核

本文主要讲述嵌入式Linux启动时间优化的秘密之三-内核,我们继续上篇没有讲完的嵌入式Linux启动时间优化方法,本文主要会讲内核系统。想看上一篇的请查看本文结尾的链接。 内核 1.有用的调试
2020-04-20 18:09:532243

Linux内核镜像bzImage和rootfs的制作、安装及调试过程

一个最小可运行Linux操作系统需要内核镜像bzImage和rootfs,本文整理了其制作、安装过程,调试命令,以及如何添加共享磁盘。
2022-10-14 17:28:194723

Linux内核学习笔记:initcall

写过Linux驱动的人都知道`module_init`宏,因为它声明了一个驱动的入口函数。
2023-06-01 15:12:21362

Linux内核学习笔记:动态输出调试

上篇说到printk调试,但printk是全局的,只能设置输出等级。而动态输出可以动态选择打开某个内核子系统的输出,可以有选择性地打开某些模块的输出。
2023-06-01 15:16:46302

Linux内核的作用

Linux操作系统是当今世界上最为广泛使用的开源操作系统之一,内核则是一个操作系统的核心和灵魂所在。对于一名Linux驱动开发者来说,了解Linux内核的运行机制和Linux内核提供的一些关键功能(如虚拟内存管理、进程管理、文件系统、网络协议栈等)都是我们日常工作和学习的重点。
2023-07-06 11:46:411046

Linux内核中C语言宏的使用技巧

Linux内核可谓是集C语言大成者,从中我们可以学到非常多的技巧,本文来学习一下宏技巧,文章有点长,但耐心看完后C语言level直接飙升。
2023-07-21 14:56:28199

LINUX内核学习视频

本帖最后由 wzs250969747 于 2015-5-4 14:02 编辑 最近发现一个很好的LINUX内核学习视频教程,是陈莉君老师讲的,非常详细,很好入门,这是下载地址http
2015-04-29 11:42:43

Linux内核3.5开发,一起了解一下

:@make -C$(KDIR)M=$(PWD)modulesclean@rm -f *.ko.unsigned *~1.1.1 Linux内核printk 函数内核中不能使用printf函数输出信息
2019-10-05 20:36:18

Linux内核调试方法的总结

的挑战。三 内核调试配置选项学习编写驱动程序要构建安装自己的内核(标准主线内核)。最重要的原因之一是:内核开发者已经建立了多项用于调试的功能。但是由于这些功能会造成额外的输出,并导致能下降,因此发行版厂商
2016-05-20 10:30:53

Linux内核中ctags的安装及使用方法

。下面以在linux驱动开发中常用的跟踪linux内核源码的例子来说明ctags的用法。首先要保证ubuntu可以上网1. 安装ctags:sudo apt-get install ctags2. 进入内核
2019-07-05 08:13:15

Linux内核分析笔记总结

孟宁老师这门课并没有完整的分析Linux内核中代码,而是针对关键部分进行了讲解分析,个人认为内核代码也是存在二八定律的情况,少部分关键代码经常被使用,而理解这部分代码对我们认识操作系统的真实工作细节和建立操作系统工作的流程框架有很好的帮助。
2019-07-18 06:00:02

Linux内核模块与应用程序的对比

ldinsmod 运行直接运行 insmod 调试gdbkdbug, kdb, kgdb等 Linux内核模块的优点与缺点 优点 使得内核更加紧凑和灵活 修改内核时,不必全部重新编译整个内核。系统如果需要
2018-07-03 03:15:41

Linux内核模块的相关资料分享

这里给出一个Linux内核模块的最简单的示例程序,当然,真实的驱动程序要比这个复杂。#include #include static int xxx_init(void){ printk(KERN_INFO "Hello Linux kernel!"); return ...
2021-12-20 07:29:29

Linux内核模块简介

模块。Linux内核模块简单示例:#define MODULE#include int init_module(void){ printk(“”hello!\n); return 0;}void
2017-08-22 09:22:17

Linux内核裁剪移植学习笔记

!fichmod777sd_fusing.sh./sd_fusing.sh补充:内核配置方法有以下三种:makeconfigmakexconfigmakemenuconfig上下键:选项之间切换空格键:对选项进行选择嵌入式Linux学习交流群:195723435
2020-03-25 18:11:44

Linux内核驱动笔记

相当详细的Linux内核驱动笔记
2013-03-12 14:41:10

Linux学习笔记

学习linux,花了时间和精力,下面把学习笔记跟大家分享下
2013-12-17 20:18:46

linux 内核 GDB 调试宝典 !!!

linux内核 GDB 调试宝典!!!
2012-09-19 11:43:36

linux内核完全注释

基于linux内核版本0.11的内核代码详细全面的注释,对于初学linux内核的人可以参考学习
2012-06-06 10:26:15

linux内核打印函数printk的方法

1.linux内核打印函数printk一、函数有头文件二、定义的关键宏三、函数原型合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个
2021-12-20 07:02:03

printk()函数的总结

我们在使用printk()函数中使用日志级别为的是使编程人员在编程过程中自定义地进行信息的输出,更加容易地掌握系统当前的状况。对程序的调试起到了很重要的作用。(下文中的日志级别和控制台日志控制级别
2018-07-09 03:47:02

学习Linux内核过程中的心得总结

在上了Linux内核这门课后,我对Linux内核开始有了初步的了解,关于Linux内核,我觉得最重要的部分还是进程的创建以及切换,这是整个内核的核心部分。以下是一些我在学习Linux内核过程中的总结:
2019-07-12 07:27:28

学习嵌入式LINUX笔记和体会

学习嵌入式LINUX笔记和体会一个典型的桌面Linux系统包括3个主要的软件层---linux内核、C库和应用程序代码。 内核是唯一可以完全控制硬件的层,内核驱动程序代表应用程序与硬件之间进行
2015-06-23 18:37:15

学习嵌入式linux笔记

本人是嵌入式软件专业,除了学习STM32单片机之外,我还自学了u-boot的移植,文件系统的制作,以及Linux内核的移植,在学习嵌入式linux过程中也做了一些笔记,最近整理了一下,分享给大家,也
2021-11-04 06:58:14

[公告]嵌入式Linux内核设计学习

2.3 系统内存运作体系 第二天 3 进程与线程 3.1 进程创建 3.2新进程的如何得到执行 3.3如何调试进入不到main的进程 3.4 linux线程库实现原理 3.5 linux内核中对线
2010-04-16 14:33:05

《深入理解LINUX内存管理》学习笔记

《深入理解LINUX内存管理》学习笔记1
2016-11-07 10:20:16

学习打卡】OpenHarmony的linux内核介绍

OpenHarmony除了支持LiteOS内核以外,它还支持基于linux kernel演进的适用于标准系统的linux内核Linux内核Linux 操作系统(OS)的主要组件,是计算机硬件与其
2022-07-22 18:26:49

如何用树莓派学习Linux内核源码?

怎么用树莓派学习Linux内核源码?​
2023-10-20 07:09:45

嵌入式Linux学习笔记

嵌入式 Linux 学习笔记
2021-11-04 08:29:08

嵌入式Linux学习笔记

嵌入式 Linux 学习笔记
2021-12-16 07:43:40

嵌入式学习笔记Linux学习笔记整理

Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和最新硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行,这 些都进一步促进了Linux在嵌入式系统中的应用。2、内核高效稳定Linux
2022-07-04 16:21:28

求嵌入式linux学习笔记

Long long ago,还在上大学的时候,写了一个关于嵌入式linux学习笔记,加上网上整合的资料,组成了一个PDF,和大家一起学习。PS: 论坛附件只能是20MB以内,故现在分成两部分添加
2020-06-09 06:28:55

记录一下Linux设备模型学习历程

Linux设备模型学习笔记1KobjectKobject, Kset和KtypeUeventsysfs文件系统wowo这里写的很好了:内核等看wowo写的很有帮助我写一下我的理解。记录一下自己的学习
2022-02-17 06:05:12

请问linux内核怎么调试

问个问题,怎么调试linux内核,百度了一下,结果还是不会使用gdb调试内核。希望大虾帮忙指点一下。
2019-02-25 07:32:09

迅为RK3399开发板Android 系统--打印级别设置(printk日志等级设置)

内核源码 include/linux/kern_levels.h 文件中预定义了内核 log 等级,一共有八个等级,从 0 到 7,优先级依次降低,如下所示: // include/linux
2023-10-25 11:21:25

郝健Linux内存管理学习笔记分享

郝健 Linux内存管理学习笔记-第3节课
2020-06-10 08:55:58

高效学习Linux内核

高效学习Linux内核
2012-08-19 23:43:54

Linux内核教程

本章学习目标掌握LINUX内核版本的含义理解并掌握进程的概念掌握管道的概念及实现了解内核的数据结构了解LINUX内核的算法掌握LINUX内核升级的方法
2009-04-10 16:59:190

Linux内核学习起步课件

Linux内核学习起步介绍
2009-04-10 17:22:040

linux学习笔记

linux学习笔记 linux目录架构 /       根目录 /bin         常用的命令   binary   file   的目錄 /boot     &n
2008-10-07 11:05:17425

LINUX内核完全注释

本书对LINUX早期操作系统内核(V0.11)全部代码文件进行了详细全面的注释和说明,旨在使读者能够在尽量短的时间内对LINUX的工作机理获得全面而深刻的理解,为进一步学习和研究LINUX
2011-04-05 20:53:4184

Linux_内核完全注释_V11

学习Linux内核的经典书籍,值得看看。
2016-05-03 10:10:564

Linux网络编程超级详细笔记

网络通讯教程学习Linux网络编程超级详细笔记
2016-09-01 14:55:490

STM32编译开发环境及仿真调试篇-----野马学习笔记

STM32编译开发环境及仿真调试篇-----野马学习笔记
2017-10-27 09:13:4426

新手Linux内核学习起步

新手Linux内核学习起步
2017-10-27 16:10:3013

Linux内核编译详谈

Linux内核编译详谈
2017-10-30 09:51:357

petalinux(二)开启petalinux内核调试模式

调试基于Xilinx SDK的Linux内核模块,必须使能 KERNEL_DEBUG_INFO和KERNEL_DEBUGGING。这篇博文全面记录了在Petalinux中是如何处理的。解决方案
2017-11-18 13:46:4610437

Linux内核模块介绍,使用Linux模块的优点

内核通过 printk() 输出的信息具有日志级别,日志级别是通过在 printk() 输出的字符串前加一个带尖括号的整数来控制的,如 printk("Hello, world!/n");。内核中共提供了八种不同的日志级别,在 linux/kernel.h 中有相应的宏对应。
2018-03-30 15:53:207040

如何配置和使用Linux内核printk功能

了解如何配置和使用Linux内核printk功能,包括其动态调试功能。 这样可以选择性地打印调试消息,而无需重新编译内核
2018-11-27 06:40:002842

内核日志及printk结构浅析

做DPDK项目时,调试rte_kni.ko时,发现printk并不会向我们想想的那样把log信息显示在我们的终端上。
2019-04-22 17:45:33978

新手推荐的linux 内核编译学习

对于linux新手来说,linux 内核编译相对有一些难度,甚至不知道如何入手,现在归纳了一下,这一篇还算比较详细的步骤,希望能对各位新手有一些帮助。
2019-05-06 17:09:35827

学会Linux内核调试方法!

内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试内核的关键在于你的对内核的深刻理解。
2019-05-07 11:01:262154

你知道Linux内核调试关键技术之一的printk

内核调试技术之中,最简单的就是printk的使用了,它的用法和C语言应用程序中的printf使用类似,在应用程序中依靠的是stdio.h中的库,而在linux内核中没有这个库,所以在linux内核中,使用这个printk就要对内核的实现有一定的了解。
2019-05-10 11:18:471584

嵌入式linux内核开发培训之linux特性

通常所说的Linux是指Linus Torvald所写的Linux操作系统内核。从诞生开始,Linux就遵循着开源的原则,免费供人们学习和使用。
2019-05-12 10:18:24603

用户与内核空间数据交换的方式之一:debugfs

内核开发者经常需要向用户空间应用输出一些调试信息,在稳定的系统中可能根本不需要这些调试信息,但是在开发过程中,为了搞清楚内核的行为,调试信息非常必要,printk可能是用的最多的,但它并不是最好
2019-05-14 17:22:54589

Linux 内核调试器内幕

调 试内核问题时,能够跟踪内核执行情况并查看其内存和数据结构是非常有用的。Linux 中的内置内核调试器 KDB 提供了这种功能。在本文中您将了解如何使用 KDB 所提供的功能,以及
2019-04-02 14:37:23276

Linux中的Printk与dmesg功能

要将linux内核的带级别控制的printk内容打印出来,在命令行输入 dmesg -n 8 就将所有级别的信息都打印出来。Linux命令:dmesg  功能说明:显示开机信息
2019-04-02 14:39:20423

Linux:QEMU调试内核的步骤

Linux:QEMU调试内核的步骤
2020-06-23 09:03:072841

linux内核是什么_linux内核学习路线

Linux内核是一个操作系统(OS)内核,本质上定义为类Unix。它用于不同的操作系统,主要是以不同的Linux发行版的形式。Linux内核是第一个真正完整且突出的免费和开源软件示例。Linux 内核是第一个真正完整且突出的免费和开源软件示例,促使其广泛采用并得到了数千名开发人员的贡献。
2020-09-16 15:49:502323

linux内核参数设置_linux内核的功能有哪些

本文主要阐述了linux内核参数设置及linux内核的功能。
2020-09-17 14:40:491190

Linux内核到底是什么应该如何学习

Linux可以说是近期非常火的了,有的人想学习linux内核,那他到底是什么呢?
2020-10-06 18:02:001741

最硬核的Linux内核文章

来源 :头条号@Linux学习教程,冰凌块儿 01 前言 本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux
2020-10-19 17:46:081860

快速理解什么是Linux内核以及Linux内核的内容

01 前言 本文主要讲解什么是Linux内核,以及通过多张图片展示Linux内核的作用与功能,以便于读者能快速理解什么是Linux内核,能看懂Linux内核。 拥有超过1300万行的代码,Linux
2020-10-21 12:02:533873

嵌入式LINUX系统内核内核模块调试教程

本文档的主要内容详细介绍的是嵌入式LINUX系统内核内核模块调试教程。
2020-11-06 17:32:5821

Linux内核设计与实现的课程实验指导书

对于大多数人来说,几乎还没接触过 LinuxLinux下的用户层编程,就开始学习Linux内核设计与实现》这门课程,这是一个巨大的挑战!即便是有一定基础的人,学习 Linux内核也是个莫大
2020-12-03 16:48:306

Linux内核学习的环境搭建和内核编译

一、linux内核学习之一:环境搭建--安装Debian7.3 本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux
2021-01-02 18:01:001868

Linux 5.10.5内核正式发布

1月6日,Linux基金会宣布,Linux 5.10.5内核正式发布,所有5.10内核系列的用户都必须升级。
2021-01-07 14:36:572342

Linux内核开发框架学习资料汇总

Linux内核开发框架学习资料汇总
2021-06-17 09:29:5223

如何使用BPF对Linux内核进行实时跟踪

我们可以使用BPF对Linux内核进行跟踪,收集我们想要的内核数据,从而对Linux中的程序进行分析和调试。与其它的跟踪技术相比,使用BPF的主要优点是几乎可以访问Linux内核和应用程序的任何信息,同时,BPF对系统性能影响很小,执行效率很高,而且开发人员不需要因为收集数据而修改程序。
2021-06-30 17:28:301943

嵌入式Linux内核驱动开发学习路线图

嵌入式Linux内核驱动开发学习路线图(嵌入式开发软件工程师)-嵌入式Linux内核驱动开发学习路线图              
2021-07-30 13:51:0612

嵌入式LINUX系统内核内核模块调试

嵌入式LINUX系统内核内核模块调试(嵌入式开发和硬件开发)-嵌入式LINUX系统内核内核模块调试                 
2021-07-30 13:55:219

嵌入式系统方向学习笔记1

嵌入式系统方向学习笔记第一二次上课记录学习的目标学习的内容:学习的时间:学习的产出:学习的指令学习的目标初步认识Linux学习的内容:两天学习1、 初步认识Linux2、 搭建 Linux开发环境
2021-10-20 17:06:251

嵌入式linux总体概览和学习入门

= bootloader + linux内核 + 根文件系统(里面含有APP)。② bootloader:它的目的是启动内核,去哪读内核?读到哪里?去Flash等外设读内核,存到内存里去。所以需要有Flash里外设的驱动能力,为了调试方便还会有网络功能。所以,可以认为 booloader =.
2021-11-02 13:06:135

嵌入式Linux驱动笔记--转自风筝丶

(四)------USB键盘驱动程序嵌入式Linux驱动笔记(五)------学习platform设备驱动嵌入式Linux驱动笔记(六)------浅析input输入子系统框架嵌入式Linux驱动笔...
2021-11-02 14:06:1612

内核调试利器printk的使用心得

    [导读] 刚刚开始做Linux相关开发工作时,深感Linux内核代码庞大,要加些自己的驱动进内核代码树,常常深陷bug的泥沼难以自拔,今天来分享一下内核调试利器printk的使用心得。 前面
2021-11-08 17:31:332525

Linux设备模型学习笔记(1)

Linux设备模型学习笔记1KobjectKobject, Kset和KtypeUeventsysfs文件系统wowo这里写的很好了:http://www.wowotech.net
2021-12-22 18:52:260

肝了三个月Linux内核,面试薪资直接翻番,我才明白TA的重要性!

目录一、学习操作系统(Linux内核)的重要性二、Linux内核的组成部分三、Linux内核源码组织结构四、Linux内核需要重点学习的知识点五、如何开启你的Linux内核学习之路
2022-01-13 14:39:404

RT-Thread 内核学习笔记 - 理解defunct僵尸线程

RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 - 内核对象管理RT-Thread 内核学习笔记 - 内核对象操作APIRT-Threa...
2022-01-25 18:19:188

RT-Thread 内核学习笔记 - 设备模型rt_device的理解

RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 - 内核对象管理RT-Thread 内核学习笔记 - 内核对象操作APIRT-Threa...
2022-01-25 18:19:488

RT-Thread 内核学习笔记 - 内核对象链表结构深入理解

RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 - 内核对象管理RT-Thread 内核学习笔记 - 内核对象操作APIRT-Threa...
2022-01-25 18:23:196

RT-Thread 内核学习笔记 - 内核对象初始化链表组织方式

RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 - 内核对象管理RT-Thread 内核学习笔记 - 内核对象操作APIRT-Threa...
2022-01-25 18:24:503

RT-Thread 内核学习笔记 - 内核对象操作API

RT-Thread 内核学习笔记 - 内核对象rt_objectRT-Thread 内核学习笔记 - 内核对象管理RT-Thread 内核学习笔记 - 内核对象操作APIRT-Threa...
2022-01-25 18:26:517

如何开启你的Linux内核学习之路 论学习操作系统(Linux内核)的重要性

一、学习操作系统(Linux内核)的重要性 为什么要学习Linux内核,这个问题我相信很多人都不一定答得上来。只是从技术层上讲,对内核的研究会加深我们的技术的理解,更多的理解源码,是从思想和思考方式
2022-05-06 22:15:201688

学习linux内核的一些建议

学习linux内核,这个可不像学一门语言,c或者java一个月或者3月你就能精通掌握。学习linux内核是需要一步一步循序渐进,掌握正确的linux内核学习路线对学习至关重要,本篇文章就来分享学习linux内核的一些建议吧。
2022-05-07 15:20:27447

Linux内核调试方法

内核中的bug也是多种多样的。它们的产生有无数的原因,同时表象也变化多端。从隐藏在源代码中的错误到展现在目击者面前的bug,其发作往往是一系列连锁反应的事件才可能触发的。虽然内核调试有一定的困难,但是通过你的努力和理解,说不定你会喜欢上这样的挑战。
2022-07-14 11:33:521212

Linux内核】从小小的宏定义窥探Linux内核的精妙设计

Linux内核】从小小的宏定义窥探Linux内核的精妙设计
2022-08-31 13:30:061602

使用动态输出打印内核的DEBUG信息

printk()是很多嵌入式开发者喜欢用的调试手段之一,但是,使用printk()每次都要重新编译内核,很不方便。使用动态输出在不需要重新编译内核的情况下,方便的打印出内核的debug信息。
2023-01-06 10:46:39547

Linux内核调试的方式以及工具集锦

内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持内核调试
2023-02-20 17:56:16564

介绍一下linux内核比较优秀的调试方式KGDB

printf相信学过C语言的同志再熟悉不过了,然而在linux内核开发中有一种非常简洁的日志输出函数叫-printk
2023-03-08 13:45:001058

一文搞懂Linux系统内核的重要性

推荐一本书籍,用来巩固大家学习内核的操作。其实,Linux内核可以通过编写代码来验证,几行代码就能够表达我们需要表达的内容,但是光靠几行代码我们就真的学会了吗?真的有那么直观吗?所以只学习代码仍然不够。现在虽然流行靠代码进行计算机的学习
2023-03-24 15:16:40558

Linux内核调试的方式以及工具汇总(上)

内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持内核调试. 内核调试, 其本质是内核空间与用户空间的数据交换, 内核开发者们提供了多样的形式来完成这一功能.
2023-05-12 14:58:41636

Linux内核调试的方式以及工具汇总(下)

内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持内核调试. 内核调试, 其本质是内核空间与用户空间的数据交换, 内核开发者们提供了多样的形式来完成这一功能.
2023-05-12 14:59:24878

Linux内核调试方式以及工具总结

内核总是那么捉摸不透, 内核也会犯错, 但是调试却不能像用户空间程序那样, 为此内核开发者为我们提供了一系列的工具和系统来支持内核调试.
2023-05-22 14:37:321111

万字长文解读Linux内核追踪机制

Linux 存在众多 tracing tools,比如 ftrace、perf,他们可用于内核调试、提高内核的可观测性。
2023-06-11 11:05:30435

Linux内核中如何修改printk等级

KERN_SOH "7" /* 调试输出 */ Linux内核printk定义了8个输出等级, KERN_EMERG
2023-09-27 15:56:03842

Linux内核pr_xx()函数封装

pr_xx( )封装 在使用printk的时候需要手动添加输出等级KERN_INFO、KERN_WARNING等,这样还是有些麻烦。因此,Linux内核也对printk进行了进一步的封装
2023-09-27 15:58:41338

内核调试工具printkprintk的输出格式

很多内核开发者喜欢的调试工具是printk,在Linux内核中,使用printk()函数来打印信息,它与C库的printf()函数类似。 printk()与printf()的一个重要
2023-09-27 16:09:21361

已全部加载完成