(2)内核配置的分析

引言:内核配置生成了 .config文件,那么这个文件都做了什么?

一、分析过程

我们从网卡的配置,来分析:

vim ./config
/dm9000

 593 #
 594 # Ethernet (10 or 100Mbit)
 595 #
 596 CONFIG_NET_ETHERNET=y
 597 CONFIG_MII=y
 598 # CONFIG_SMC91X is not set
 599 CONFIG_DM9000=y
 600 # CONFIG_CS89x0 is not set
 601 # CONFIG_NET_POCKET is not set
 602 CONFIG_NETDEV_1000=y
 603 CONFIG_NETDEV_10000=y

CONFIG_DM9000=y
等于y说明对网卡的支持编译进内核;
如果等于m,会编译成模块,动态加载,相当于驱动。

grep "CONFIG_DM9000" * -nwr 就可以看到哪些config文件配置了网卡,有哪些文件有配置网卡呢?
1、c源码
arch/arm/plat-s3c24xx/common-smdk.c:46:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

2、子目录里的makefile文件
drivers/net/Makefile:197:obj-KaTeX parse error: Expected 'EOF', got '#' at position 59: …t/Makefile:198:#̲obj-(CONFIG_DM9000) += dm9000.o

3、include/config/auto.conf

4、include/linux/autoconf.h

c源码文件里的宏是在include/linux/autoconf.h里定义的

autoconf.h这个文件是自动生成,里面的内容来源于.config;

我们查看autoconf.h,里 #define CONFIG_DM9000 1 将DM9000定义为1,那么y和m是在哪里定义的呢?

我们查看下drivers/net/Makefile
补充一个知识点,子目录下的makefile文件
obj -y += xxx.o 则xxx.c文件最后会被编译进内核;
obj -m += yyy.o 则yyy.c文件最后会被编译成可加载的模块 ==> yyy.ko。

198 #obj-$(CONFIG_DM9000) += dm9000.o
199 #obj-$(CONFIG_DM9000) += dm9ks.o

因此如果CONFIG_DM9000=y 就会编译进内核;CONFIG_DM9000=m 就会编译成可加载的模块。

那么CONFIG_DM9000=y还是=m是在哪里定义?
在include/config/auto.conf这个文件里定义的,说明这个文件也是自动生成的,被顶层makefile包含。

二、从分析过程整理出.config文件都做了什么

make uImage是都会发生什么?
生成的.config 会自动生成autoconf.h和auto.conf ;其中autoconf.h被c源代码使用),auto.conf(包含在顶层makefile)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值