第3階段——內核啟動分析之make menuconfig內核配置(2)


目標:

分析make menuconfig內核配置過程

 

在上1小結中(內核編譯試驗)講到了3種不同的配置:

(1)通過make menuconfig 直接從頭到尾配置.config文件

(2) 通過make s3c2410_deconfig 命令在默認的配置上進行自動修改.config文件

(3)使用廠家提供的配置config_ok文件覆蓋.config文件

所以,所有的配置結果都是配置.config文件

 

 

1 linux下通過vi指令查看.config內核配置文件

 

如上圖所示:就是一堆配置項: CONFIG_XXX=y/CONFIG_XXX=m/ CONFIG_XXX=n

=y:表示編進內核

=m:表示編譯成模塊,提供動態加載

=n:表示不參與編譯

輸入grep “CONFIG_DM9000”  -nwR   (grep指令詳細介紹入口鏈接http://www.cnblogs.com/lifexy/p/7009706.html)

可以看到4個地方在使用它

(1) include/linux/autoconf.h中定義宏DM9000

include/linux/autoconf.h:129:#define CONFIG_DM9000 1

然后通過vi include/linux/autoconf.h得到,不管menuconfig中是y/m/n, autoconf.h所有宏都等於1,C源碼使用

 

(2)C源碼里通過判斷autoconf.h的宏DM9000

arch/arm/plat-s3c24xx/common-smdk.c:46:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c:162:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
arch/arm/plat-s3c24xx/common-smdk.c:250:#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)

(3)在include/config/auto.conf設置COMFIG_DM9000=y,供./drivers/net/ Makefile使用

include/config/auto.conf:128:CONFIG_DM9000=y

通過vi include/config/auto.conf如下圖可以看出,.config配置文件非常相似, 它被頂層Makefile包含,被子目錄Makefile使用

 

(4)在./drivers/net/ 子目錄Makefile中添加DM9000文件到obj-$(CONFIG_DM9000)中,其中CONFIG_DM9000=y,所以編譯進內核中.

drivers/net/Makefile:197:obj-$(CONFIG_DM9000) += dm9dev9000c.o

drivers/net/Makefile:198:#obj-$(CONFIG_DM9000) += dm9000.o

drivers/net/Makefile:199:#obj-$(CONFIG_DM9000) += dm9ks.o

因為make uImage編譯內核剛開始時,內核會根據.config自動生成auto.confautoconf.h這兩個文件( 其中autoconf.h是供c源碼使用(宏開關),而auto.conf被頂層Makefile包含,供子目錄Makefile使用)

 

2.通過子目錄Makefile得出:
如果auto.conf中CONFIG_xxx=y,對應的源碼文件會被Makefile編譯進內核;
如果auto.conf中CONFIG_xxx=m,對應的源碼文件會被Makefile編譯成xxx.ko模塊文件
如果auto.conf中CONFIG_xxx=n,對應的源碼文件不會被makefile編譯;

 

接下來分析Makefile來找到內核編譯過程,明白make uImage做了什么

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM