一直以來,都是從事Linux使用者空間的程式開發,對于Linux的了解僅限于基本Linux核心的經典書籍的閱讀。由于目前從事的工作主要是TCP/IP 4層以上的處理,是以對核心的接觸也不多。但近日空閑時間較多了,于是決定要好好研究研究Linux核心,主要集中在Linux核心的TCP/IP協定棧。
那麼從今天開始,一方面是為了鞭策自己,另一方面也是給自己的學習過程做些記錄,我要堅持把學習過程遇到的問題以及自己的收獲記錄下來。
那麼,開始吧。
第一步,自然是編譯核心。我選擇的是目前最新的穩定版本Linux 2.6.36。我隻有在很久之前,大概剛剛畢業的時候編譯過核心,當時還是2.4.18呢————這個版本我記得很清楚。是以,具體步驟還得上google搜一下,結果發現大體上都差不多,但是每個人的介紹都有些細微的差別。
恩。。。那麼,還是直接看linux的文檔為上——這個最官方——其實就是源目錄下的README,裡面說得很清楚。
1. make mrproper:Make sure you have no stale .o files and dependencies lying around。用于清除以前的編譯結果和依賴檔案;
2. make O=/home/my_dir/works/linux_kernel/kernel menuconfig: 配置核心的編譯選項。
這裡的O=/home/my_dir/works/linux_kernel/kernel是指定生成的目錄。如果沒有該選項,就在預設目錄生成。需要注意的是,如果使用了該選項,那麼後面的指令中都要帶有這個選項。
3. make O=/home/my_dir/works/linux_kernel/kernel:老版本的Linux還要使用make bzImage來生成image。但是新版本的Linux使用make就可以了。這與使用者空間的make風格統一了。
這個make就可以生成壓縮版本的kernel鏡像。
4. make O=/home/my_dir/works/linux_kernel/kernel install: 如果有合适lilo,那麼可以直接使用make install來進行鏡像的安裝。如果沒有的話,隻能自己動手指派了。
如果在配置kernel的時候,有任何一個部分是配置成module的形式,那麼還需要在make install之前執行make modules_install
到此ok,linux的編譯過程其實很簡單,重點是在配置核心上。大家根據自己的硬體嘗試吧。最好使用虛拟機,這樣即使出了問題,也很容易解決。