內核源代碼下載:www.kernel.org
Linux內核源代碼采用樹形結構進行組織,非常合理地把功能相關的文件都放在同一個子目錄下,使得程序更具可讀性。
linux內核代碼最好不要在windows下解壓,因為同名(大小寫)會丟失一些code。
source insight:添加匯編文件:option->Document option 添加.c、.h、.s、.S
內核目錄:
arch目錄 :內核所支持的每種CPU體系,在該目錄下都有對應的子目錄。每個CPU的子目錄,又進一步分解為boot,mm,kernel等子目錄,分別包含控制系統引導,內存管理,系統調用等 。
documentation :內核的文檔
drivers目錄:設備驅動程序。
做移植時:主要該arch和driver下。
include目錄 :內核所需要的頭文件。與平台無關的頭文件在include/linux 子目錄下,與平台相關的頭文件則放在相應的子目錄中
script:配置內核的腳本。
內核配置與編譯: 執行這些命令的位置是在內核代碼的頂層目錄下
linux內核具有可定制的優點,具體步驟:
1.清除臨時文件、中間文件和配置文件(三種命令,刪掉不同的類型)
make clean:remove most generated files but keep the config
make mrproper:remove all generated files+config files
make distclean:mrproper+remove editor backup and patch files(最全的)
但不是最全的就是最好的,加入只編譯后,只需要刪除.o文件,不需要刪除配置文件,則make clean(根據需要來刪除)
2.確定目標系統的軟硬件配置情況,比如CPU的類型、網卡的型號、所需支持的網絡協議等。
3.配置內核:結果保存在.config文件中。
make config:基於文本模式的交互式配置。
make menuconfig:基於文本模式的菜單型配置 。(推薦使用)
特點:直觀高效,簡單。利用空格鍵,選取值。
make oldconfig:使用已有的配置文件(.config),但會詢問新增的配置選項。
make xconfig:圖形化配置(需要安裝圖形化系統,其它前面三個既可以在文本模式下使用,也可以在圖形化系統使用)
內核配置通常在一個已有的配置文件基礎上,通過修改得到新的配置文件,linux內核提供了一系列可供參考的內核配置文件,位於ARCH/$CPU/configs
如:ARCH/ARM/configs下。。。把這個配置文件拷貝到內核的頂層文件下。
*:y ;空格:N
配置內核文件的原則:
找到一個可以參考的結果文件,基於這個文件再調整。
4.內核編譯
make zImage
make bzImage
區別:在X86平台,zImage只能用於小於512K的內核,在其他平台兩種方式是沒有區別的。
如需要獲取詳細編譯情況,可使用:
make zImage V=1
make bzImage V=1
編譯好的內核位於arch/$cpu/boot,
5.編譯內核模塊:
make modules
6.安裝內核模塊
make modules_install
將編譯好的內核模塊從內核源代碼目錄copy到/lib/modules下
7.制作init ramdisk
mkinitrd initrd-$version $version
initrd-$version :取名字
$version:內核的版本
注意:$version通過查詢/lib/modules下的目錄得到。
安裝內核:1、cp arch/x86/boot/bzImage /boot/vmlinuz-$version //把內核.img拷貝出來
2、cp initrd-$version /boot/ //把ramdisk拷貝出來
3、修改/etc/grub.conf