內(nèi)核啟動(dòng)流程分析
給內(nèi)核打補(bǔ)丁 ;
打補(bǔ)丁命令:patch -p n <補(bǔ)丁文件
-p 是指忽略前n個(gè)目錄,如n==1,就是忽略這個(gè) linux-2.6.22.6目錄。
配置內(nèi)核。
補(bǔ)充:配置有3種方法:
直接使用make menuconfig,從頭到尾每一項(xiàng)都去配置。(繁瑣) 使用默認(rèn)的配置文件,再在上面修改
我們不知道它有哪些默認(rèn)的配置文件,所以搜索一下:# find -name “*defconfig*
” 會(huì)搜到很多文件,找到/arch/arm/configs 目錄,找到我們的板子相似的配置文件–xx_defconfig。
執(zhí)行它:make xx_defconfig -> 會(huì)生成一個(gè).config文件->再執(zhí)行內(nèi)核配置命令:make menuconfig
就會(huì)在默認(rèn)配置基礎(chǔ)之上,出現(xiàn)一個(gè)配置菜單,就可以此基礎(chǔ)之上進(jìn)行配置了。 使用廠家提供的設(shè)置文件
把廠家的配置文件復(fù)制成.config文件,再make menuconfig.
cp config_廠家 .config
->make menuconfig
menuconfig 中的基本操作:
1. 高亮字母是索引,直接敲相應(yīng)字母會(huì)跳轉(zhuǎn)到相應(yīng)索引
2. [ ] 中輸入’?’ 會(huì)跳到幫助信息
3. 輸入‘/’ 會(huì)跳到搜索功能
make
會(huì)編譯生成 zImage
或者執(zhí)行:make uImage
就會(huì)生成uImage uImage就是 :頭部+ 真正的內(nèi)核(vmlinux) 內(nèi)核啟動(dòng)流程分析之配置 配置的結(jié)果是生成.config文件,打開這個(gè).config文件,可以看到有很多的配置項(xiàng),配置成y或M。
我們以一個(gè)配置項(xiàng):CONFIG_DM9000 為例,看一下誰(shuí)在使用這個(gè)配置。
搜索一下:grep 'CONFIG_DM9000' * -nR
可以看到使用的包括幾類:
子目錄Makefile :drivers/net/Makefile 在這里體現(xiàn)y和M的區(qū)別
內(nèi)核子目錄Makefile
格式:
obj-y +=xxx.o //表示xxx.c文件會(huì)被編譯到內(nèi)核里面去
obj-m +=xxx.o //表示xxx.c文件會(huì)被編譯成內(nèi)核模塊.ko文件
include/config/auto.conf 也是來(lái)源于.config,也是自動(dòng)生成的 這個(gè)文件被頂層的Makefile包含
include/linux/autoconf.h 這個(gè)文件是自動(dòng)生成的,來(lái)源于 .config 執(zhí)行:make uImage
時(shí)執(zhí)行的操作
1. .config自動(dòng)生成include/linux/autoconf.h文件
2. .config自動(dòng)生成include/config/auto.conf文件
3. autoconf.h給C源碼使用
4. auto.conf文件被包含到頂層的Makefile中,然后在子目錄Makefile中被用到:
obj-$(CONFIG_DM9000 ) +=dm9000.o
`auto.conf中 CONFIG_DM9000 = y`
內(nèi)核啟動(dòng)流程分析之Makefile 子項(xiàng)目下的Makefile當(dāng)變量$(CONFIG_DM9000 )等于y時(shí),就會(huì)編譯進(jìn)內(nèi)核;等于M,會(huì)編譯成模塊;如果沒(méi)有設(shè)置的話,也不處理,表示沒(méi)有使用。
已知有文件:a.c b.c
要在Makefile中設(shè)置成編譯進(jìn)內(nèi)核,可用:obj-y +=a.o b.o
實(shí)現(xiàn)
如果用a.c b.c 組合成一個(gè)模塊呢?
可用:
obj -m +=ab.o
ab-objs :=a.o b.o
這樣,編譯時(shí) a.c 會(huì)編譯成 a.o ; b.c 編譯成 b.o ; 然后 a.o 和 b.o 鏈接成ab.ko
架構(gòu)相關(guān)的Makefile這個(gè)在Documentationkbuildmakefiles.txt中都有說(shuō)明
執(zhí)行:make uImage 時(shí),Makefile會(huì)定位到 arch/arm/Makefile
這個(gè)Makefile肯定會(huì)被包含到頂層Makefile中去。
果然在頂層目錄的Makefile中包含這句:include $(srctree) /arch/$(ARCH)/Makefile
執(zhí)行:make uImage 時(shí),會(huì)依賴哪些文件呢,順序是什么?
我們上面知道在arch/arm/Makefile中uImage的依賴為vmlinux->根據(jù)跟蹤,得到如下索引:
執(zhí)行:#make uImage 進(jìn)行編譯,可以看到這行命令:
給出了鏈接文件等等,依賴文件和上面分析的是一一對(duì)應(yīng)的。