Linux内核配置和编译原理 & menuconfig、Makefile、.config三者之间的关系

文章详细介绍了Linux内核配置和编译过程,包括通过makemenuconfig创建图形化配置界面,.config文件的生成和作用,以及Kconfig文件在配置系统中的功能。内核配置体系由Makefile、menuconfig和.config三部分构成,用于管理内核的可裁剪性和条件编译。.config文件存储配置选项,menuconfig提供交互式配置,而Kconfig定义了这些选项。
摘要由CSDN通过智能技术生成

原文地址::Linux内核配置和编译原理 & menuconfig、Makefile、.config三者之间的关系_linux 内核 .config_正在起飞的蜗牛的博客-CSDN博客

相关文章

1、Linux内核配置机制(make menuconfig 、Kconfig、Makefile)讲解【转】----Linux内核配置机制(make menuconfig 、Kconfig、Makefile)讲解【转】 

2、linux .config的生成方式----linux .config的生成方式_.config文件怎么产生_u012441962的博客-CSDN博客 

1、内核的配置体系
内核是高度可裁剪的,开发产品时根据产品的需求将无用的模块裁剪掉,也就是不要编译进内核,这样编译出来的内核体积小,节省内存,还可以节省性能。由此就需要条件编译,但是内核的可选编译模块太多了,必须要用一套编译体系来管理。我们可以这样类比来理解为什么内核需要一套编译体系来进行配置:当工程只有一个a.c,我们可以直接"gcc a.c"进行编译,但是有1000个源文件,用这种方法就不可行了,于是我们用Makefile进行编译;Makefile可以通过条件编译来让同一份代码在不同的平台上运行,假设代码编译的条件只用选两个平台(arm和下x86),我们可以"make plat=arm"或者"make plat=x86",那如果要条件编译的选项有上千个,同样的这样手工选择的方法也不可行,于是发明了一套编译体系来实现条件编译。总结:工程要管理的源文件太多,发明了Makefile;内核的Makefile要实现的条件编译太多,发明了一套编译体系;内核的配置体系由:Makefile、menuconfig、.config三部分构成。

2、内核配置和编译步骤
(1)确认Makefile:确认ARCH变量,比如ARCH=arm,表示编译ARM平台的内核,这个根据你用的soc选择;检查交叉编译工具链有没有设置对。如:CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
(2)make xxxx_defconfig:执行该语句后出现:configuration written to .config这句话就成功了。xxxx_defconfig是配置文件,指导编译内核,根据自己的硬件平台去选择,这句指令的作用就是生成.config文件,相当于"cp arch/xxx/configs/xxx_defconfig ./config",xxxx_defconfig是放在arch/平台名/configs下的。
(3)make menuconfig:会出现图形化的界面,可以在此界面配置内核,加载或者去除掉某些模块。
执行menuconfig可能出错的原因:屏幕太小,显示不了。解决方法就是全屏或者把字体调小;ncurses库没装,会有相关报错信息;

3、".config"文件
.config文件是一个隐藏文件,要用"ls -a"才能看见,默认是没有这个文件的,需要执行配置命令(make xxxx_defconfig)后才会生成。.config文件最初就是由xxxx_defconfig文件复制得来,里面全是配置项,以行为单位。每个配置项的格式都是CONFIG_xxx=x,每个配置项都可以在menuconfig中找到。CONFIG_xxx是配置项的名字,该配置项在menuconfig中的名字就是xxx,等号后面是配置的结果,可以是Y、N、M,Y代表编译连接此模块,N代表不编译此模块,M代表将该模块单独编译成.ko文件。
总结:.config文件最初由xxxx_defconfig文件复制得来,然后可以在menuconfig中做修改,最终Makefile会读取.config文件,里面的每个配置项都会指导内核的编译。

4、menuconfig详解
参考博客《Linux内核配置——menuconfig》。

5、Kconfig文件
参考博客《Linux内核配置——Kconfig文件》。

6、menuconfig、Makefile、.config三者之间的关系
6.1、Kconfig文件内容
config DM9000
    tristate "DM9000 support"
    depends on ARM || BLACKFIN || MIPS
    default y
    select CRC32
    select MII
    ---help---
      Support for DM9000 chipset.

      To compile this driver as a module, choose M here.  The module
      will be called dm9000.

1
2
3
4
5
6
7
8
9
10
11
12
6.2、.config文件


6.3、对应在menuconfig中


6.4、文件之间关系的解读
通过以网卡芯片DM9000的配置为例,讲解几个文件之间的联系。
(1).config文件默认在内核源码中是没有的,要先执行"make xxxx_defconfig"生成.config文件,这是对内核的初步配置。其中DM9000对应的名字是CONFIG_DM9000,等号后面的对DM9000的配置选项;
(2)执行"make menuconfig",在menuconfig会读取.config和Kconfig,在menuconfig中可以找到DM9000配置项,可以再次选择;
(3)Kconfig中DM900的内容是.config和menuconfig内容的来源,仔细对比DM9000在三个文件中的名字,可以发现关联;
(4)关闭menuconfig后,会把改变过的选项写会到.config中;
(5)Makefile中,会去.config中读取每项配置,其中就包括CONFIG_DM9000,如果CONFIG_DM9000=y则将编译进内核,如果CONFIG_DM9000=n则不会编译,如果CONFIG_DM9000=m则单独编译成.ko文件;

文章知识点与官方知识档案匹配,可进一步学习相关知识
————————————————
版权声明:本文为CSDN博主「正在起飞的蜗牛」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42031299/article/details/120169613

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值