由於所有的系統不管bsd還是Linux其核心就是kernel,它負責進程調度,內存分配,驅動程序,安全子系統,網絡,文件系統等所有核心關鍵任務,所以本人對內核有著狂熱的折騰精神,編譯過netbsd,openbsd,freebsd,debian,Oracle Linux.CentOS就差沒去定制編譯windows內核了呵呵,經過多次的失敗與成功總結了不少的經驗,特此分享給大家:
1,所有的bsd的系統內核編譯很簡單,無非就是找到GENREIC內核配置文件,看NOTES文件修改定制,再用config 生成內核編譯目錄,再去make && makeinstall非常的簡單沒有什麼技術含量(指不用太操心),難度都在如何優化,看電腦配置,去除無用驅動,加載有用功能,這裡就不多講了。
2,說到Linux就非常的變態了,有www.kernel.org的標准內核 還有無數個發行版內核,他們的卻別是什麼呢,這麼說吧,標准內核就是通用內核,沒有那麼多專用設備驅動,功能也是穩中求勝,沒有rhel那麼前衛,但是也沒有debian那麼保守呵呵,如果你是狂熱的內核開發者,或者喜歡搞定定制的話,就選擇他,比如打上加固內核安全的gresecurity tomoyo 補丁等。它的編譯相對來說簡單點不需要那麼操心,只要在各個平台上面,安裝好gcc ncursec kernel-build等開發環境,就可以使用傳統的make menuconfig 或者 根據當前的配置自動精簡make localmodconfig 再進行裁剪,定制,之後就是make all && make modules_install && make install在debian上還要自己mkinitramfs img文件,在centos oracle Linux上就不需要了,他會自動創建。
3,再來說說今天的重點吧,各個發行版內核的特點,有些人老是問,到底debian centos有什麼卻別呢?http://www.linuxidc.com 其實說到底最大的卻別就是這個內核了,當然如果和bsd比的話內核就差別更大了,包括用戶態程序差別也大,這幾就不提了連個牛馬一樣的東西沒什麼好比的,這幾就是比Linux各個發行版。主要是debian 與 centos代表發行版了SUSE就不考慮了同理可推!
debian的內核比標准版的內核更保守,去除了很多非free的固件驅動代碼,其他的核心功能代碼基本還是標准內核的,再根據當前自身支持的用戶態程序配合修改了一些bugs主要是兼容性的,當然也有少數安全性修補。本身對標准內核沒有貢獻自己的特有代碼!
centos的內核來自於rhel強大的商業開源公司,由於rhel對於標准內核貢獻了非常多的代碼,在所有大型公司中貢獻代碼最多的,所以標准內核很多東西都是從rhel公司獲取的,所以他的內核更加前衛,新功能多比如kvm就是rhel首先提出來的,不光如此,由於rhel是大型商業公司,得到了很多硬件開發商的鼎力支持支持最多,最專一的硬件,(這點比debian強)支持的硬件更多,裡面還包含很多非free的驅動在裡面!
不過不管是debian也好centos也好由於都是主流的開源系統,開發者都很多,也都是經過千萬次測試才發布的,所以穩定性,安全性都比標准內核強,標准內核就好像是一個實驗戰場一樣,一有新能共就往裡面放,也不管有什麼漏洞不漏洞了!他們使用的基礎內核都是老掉牙的Linux-2.6.32系列,就是應為他們都加入了很多自己的東西在裡面,所以我們編譯定制的時候要千萬小心,不能像標准內核那樣,隨心所欲的定制,裁剪,一不小心就會出錯,而且找不出原因(gcc的通病,報錯都是天文,期待llvm)對此我的經驗是:
1,首先安裝各自開發編譯環境,吧/boot/config-2.6.32* 復制到他們專有的內核解壓文件中去,不是www.kernel.org上的內核,是從他們官網下載發型版的內核,怎麼下也不說了,不難。
2,也是使用make menuconfig && make && make install來,不過就是在make menuconfig定制的時候,不要隨便裁剪其中的選項,只動動那些非動不可的選項,比如cpu型號, io調度器 , 內存分配模式 ,內核搶占模式開關,cpu中斷頻率,seLinux開關,虛擬化開關,還有就是genera選項中的profilling keba等分心模塊開關
其他的千萬不要動,一句話,非要動的就動,可動可不動的不要動!!非常嚴格,比起標准內核編譯來說!
3,還有就是debian默認的內核配置比起centos來說更為激進些,很多選項都比centos設置的極端些(所以很多測試默認下debian ubutun比centos強大些),新意些,可更具自身的需求,謹慎更改,
總結起來就是,發行版內核一定要知道自己需要什麼,那些需要改,改了那些,最好不要一次更改完成,否則出了問題不知道哪裡出的,要一個大選項,一個大選項的更改編譯出了問題就知道出在哪裡,一個大的選項內的改完了沒問題再改另外一個大塊內的內容!