1.內容簡介
linux內核簡介
linux內核版本號
linux為什么重新編譯內核
linux內核編譯模式
linux內核功能劃分
linux內核編譯步驟
2linux內核簡介
內核,是一個操作系統的核心。它負責管理系統的進程、內存、設備驅動、文件和網絡系統,決定著系統的性能和穩定性。
3.內核版本號
確定內核版本uname -r
一個樹是穩定樹(stable tree)
一個樹是非穩定樹(unstable tree)或者開發樹(development tree)
源程序版本號的形式為x.y.z
對于穩定樹來說,y是偶數;對于開發樹來說,y比相應的穩定樹大一(因此,是奇數),比如說2.5.18是正在開發的版本,2.6.18是已經可以用的版本了。
4.為什么重新編譯內核
編譯的原因
支持新安裝的硬件設備:比如您剛買了一塊新的聲卡,但是當前的內核沒有提供其驅動,而新版本內核可以驅動該聲卡。
運行一個程序,但是操作系統不支持該程序需要的功能。
某個用戶需要的內核功能。
用戶希望對內核進行優化,自己定制編譯的內核運行更快(具有更少的代碼)。
內核升級(驅動、BUG、意愿、功能、安全、有時間進行升級)。
不需要的功能編譯進入內核可能會增加被系統***者利用的漏洞。
為什么不編譯
如果只是想給內核加上很少數量的功能的話,就沒有必要進行編譯
編譯內核可能會遇到的困難:面對眾多的選項
6.內核編譯模式
如果編譯到內核中,在內核啟動時就可以自動支持相應部分的功能,這樣的優點是方便、速度快,機器一啟動,你就可以使用這部分功能了;缺點是會使內核變得龐大起來,不管你是否需要這部分功能,它都會存在,這就是Windows慣用的招數,建議經常使用的部分直接編譯到內核中,比如網卡。
如果編譯成模塊,就會生成對應的.o文件,在使用的時候可以動態加載,優點是不會使內核過分龐大,缺點是你得自己來調用這些模塊。
7.linux內核功能劃分
進程管理
內存管理
設備控制
網絡功能
設備和模塊分類
字符設備、塊設備、網絡接口
字符模塊、塊模塊、網絡模塊
8.新版本內核的獲取和更新
linux內核版本發布的官方網站是http://www.kernel.org
新版本的內核分兩種,
一種是full Source版本,
一種是patch文件,即補丁
9.為內核源代碼打補丁
內核經常需要小規模地升級。每次升級修復一個特定的bug,增加一個新的驅動程序或者功能,或者實現其他任務。
1) 下載主版本的源代碼和升級到新版本需要的補丁的源代碼。
2) 使用c d命令把路徑切換到/usr/src目錄。
3) 把下載的源代碼和補丁都拷貝到這個目錄中。
4) 進入內核源碼包內,執行
bzcat ../patch-2.6.27 -p1
zcat ../patch-2.6.27 -p1
5) 準備編譯
10.以實現掛載NTFS分區為例
需要重新編譯內核 (需要在make menuconfig時添加內核對ntfs的支持,如果不重新編譯內核,可以下個軟件,ntfs-3g來達到支持ntfs的功能)
編譯內核
1)?獲取需要安裝的內核源代碼
2)?使用tar命令把源代碼解包到/usr/src/目錄
3)?使用cd命令把路徑切換到這個目錄
4)"make?mrproper"刪除目前的配置和所有生成的文件(vim?Makefile?1149)5)?選擇你想使用的內核配置工具程序
圖形化功能最少,又很乏味的工具是config程序
一個圖形化的工具是menuconfig程序
用于對內核進行配置的X工具總是最流行的,它叫做xconfig
Make?[config|menuconfig|xconfig|oldconfig]
保存并退出內核配置程序之后,就已經有了用來配置內核設置值了
6)"make?dep"這個命令在2.4以前版本使用。建立依賴關系表,它定義了包括在內核源代碼中的某個特定文件如果發生了變化,就需要修改哪一個文件。
7)"make?bzImage"完成建立新內核的過程
8)"make?modules"編譯內核模塊并把它們存放到相應的位置。這是那些需要加載或者卸載的內核模塊,另外還有一些固定加載的
9)"make?modules_install"命令安裝模塊到需要的位置
10)"make?install"將vmlinuz安裝到/boot,并配置grub.conf(也可手動完成)
11) "reboot"重新啟動,加載新的內核
內核 mkinitrd BUG(個人認為)
https://bugzilla.redhat.com/show_bug.cgi?id=488991
No module dm-mem-cache found for
No module dm-region found for
No module dm-message found for
No module dm-raid45 found for (此問題我已經解決)
http://people.redhat.com/~heinzm/sw/dm/dm-raid45/
手動設置編譯好的內核
vmlinuz-2.6.27
System.map-2.6.27
initrd-2.6.27.img
關于這三個文件的作用,大家可以到http://www.freeopens.com/2010_01_474.html看一下!
#?mkinitrd?/boot/initrd-2.6.27.img?2.6.27--without-dmraid
Nomodule?dm-mem-cache?foundforkernel?2.6.27,?aborting.
#?cp?/usr/src/linux-2.6.27/arch/i386/boot/bzImage?/boot/vmlinuz-2.6.7
#?cp?/usr/src/linux-2.6.7/System.map?/boot/System.map-2.6.7