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