剛開始接觸linux內核,首先將linux內核進行編譯,遇到一些問題,最後雖然解決了,但是還不是完全清楚問題的本質,寫這篇日誌,記錄一下,以便日後慢慢研究。
1.下載linux內核
在http://kernel.org/ 下載了2.6.39.4版本的內核,下載的是.bz文件,通過unbizp2解壓和tar解包。
2.配置內核
使用配置內核的命令,通常情況下是make menuconfig,通過menu的方式配置內核,當然有些也可以使用圖形界面make xconfig來完成配置。
在配置內核的時候大部分選項的配置網上有詳細介紹,這裏不羅列了。
3.編譯內核
(1)makedep和makeclean預處理
makedep是檢查內核的完整性,make clean是清除已經編譯生成的部分。
(1)make命令編譯內核
這個階段會產生一個bzImage在/arch/x86/boot/目錄下,這個文件即內核的鏡像文件。
(2)makemodules命令編譯內核模塊
這個階段會將配置中選定的模塊編譯。
(或者make all命令同時運行make和make modules)
(3)makemodules_install命令安裝內核模塊
這個階段將編譯好的模塊安裝到/lib/modules下,並且運行depmod生成模塊依賴關係文件,在系統啓動的時候就會自動加載這些模塊了。
(4)makeinstall命令安裝內核
把壓縮內核映象拷貝到/boot目錄下, 並創建相應的System.map符號鏈接; 調用mkinitrd程序創建內核的initrd映象; 將在/boot/grub/grub.conf配置文件增加配置行。
4.遇到的問題
一開始說是找不到模塊snd-had-codec-intelhdmi,重啓以新內核引導的時候發現進不去,卡在登錄界面之前。於是我從原內核中找到模塊snd-had-codec-intelhdmi.ko的文件,複製到新內核的相應位置,於是make install的時候出現下圖的警告,重啓以後可以進入新內核,在新內核系統中編譯內核就不會出現這樣的問題了。現在還不清楚原因,如果哪位大蝦知道可以指點一下啊。