Debian中編譯內核

轉載:html

http://blog.163.com/libo_5/blog/static/156968520101016102051580/linux

http://hi.baidu.com/wg_wang/item/f9375c2f00ca75c0ee10f1dbtomcat

debian內核編譯安全

一、到www.kernel.org/pub/liunux/kernel所須要編譯的內核源代碼app

二、安裝必要的包,其中kernel-package是debian用以編譯內核的工具;fakeroot是一個在系統中建立假root的工具;爲dpkg在編譯內核中所需
udev 是管理/dev和hotplug的守護進程;build-essential是建立deb包所需的信息列表;yaird是用來建立內核初始引導鏡像的工 具,注意筆者編譯的時刻,lenny(testing)版本的debian下是沒有這個包的,須要在etch(stable)或 sid(unstable)下才有。less

apt-get install kernel-package libncurses5-dev fakeroot
apt-get install build-essential udev
apt-get install libhtml-template-perl libparse-recdescent-perl
apt-get install yaird工具

三、把源代碼放到kernel目錄下並解壓並進入該文件夾,如cd linux-2.6.24.3。ui

四、配置內核選項,選項內容巨多,筆者把reiserfs文件系統編譯成內建的了,還增長了smp和超線程支持,並去掉無線,藍牙,1394等不會用到的模塊等等。
make clean && make mrproper
make menuconfigthis

五、建立內核的deb包,這個過程花費必定的時間,結果會在kernel目錄下獲得一個deb包,如linux-2.6.24.3_2.6.24.3_i386.deb。
make-kpkg clean
fakeroot make deb-pkggoogle

六、安裝內核的deb包
dpkg -i *.deb

七、建立Ramdisk
mkinitrd.yaird -o /boot/initrd.img-版本號

八、配置grub引導選項,若是不是grub引導的,請使用其餘命令。
update-grub

九、若是不想要卸載就得內核的話,跳過(建議不要卸載,不然出了問題的話就慘了)。版本號能夠在/boot下面看到。
dpkg --purge --force-remove-essential 內核軟件包名稱,包括完整版本號

十、重啓,啓動時選擇新的版本號的那個選項就能夠了。

 

 


 

最 近反覆編譯內核十餘次,其間獲得了d00m3d兄、simon22543兄、waq兄、聚焦深空兄等人的不少幫助,大量參考了金步國兄 (csfrank122@hotmail.com)的做品( http://lamp.linux.gov.cn/Linux/kernel_options.html )十分感激,一併致謝!如今把本身的些許心得與你們分享。
1、爲何要編譯內核
第一,能夠支持一些現有內核不支持的硬件。如個人無線網卡。第二,能夠加快運行速度。使用新內核啓動,感受splashy的進度條很快,明顯超
過Debian自帶的內核。究其緣由,是由於一個發行版,爲了廣泛適應各類用戶的需求,不得不支持不少的硬件,其中,可能你一生也用不上。 經過從新編譯內核,能夠大幅縮小內核尺寸,提升運行速度。第三,能夠學會如何定製、裁減、編譯本身的內核。

第2、編譯內核前的準備
主要是安裝幾個必須的文件,一般能夠這樣:
sudo aptitude install gcc g++ make kernel-package libncurses5-dev

第3、Debian中編譯內核的步驟
首先,sudo vi /etc/apt/source.list,把全部源的類型替換爲sid。一般使用sid,能夠體驗更好的運行速度和內核的新特性。
其 次,sudo aptitude update && sudo aptitude install linux-source-2..6.32。這時會在/usr/src裏多出一個名爲linux-source-2.6.32.tar.bz2的文件。我 們把它解壓縮 sudo tar xvfj linux-source-2.6.32.tar.bz2,而後進入新產生的目錄,cd linux-source-2.6.32。如今,在linux-source-2.6.32目錄裏依次執行下面幾條命令:
sudo make menuconfig 這裏能夠針對本身的硬件進行調整。
sudo make-kpkg clean 這個命令的做用是清理環境,爲下面的編譯打基礎。
sudo make-kpkg --append-to-version -dacheng --revision 1.0.custum kernel_image 這個命令用來編譯內核,若是你在內核選項裏使用了initram,能夠增長一個選項 --initrd。建議你們使用man make-kpkg看看相關的選項,由於有些必須以數字開始,有些不可使用大寫字母。個人
CPU是P4m 2.2,編譯一次大約要使用65分鐘。編譯完畢後,會在/usr/src裏多出一個名爲linux-image-2.6.32-dacheng_1.0.custum_i386.deb的> 文件。
sudo dpkg -i /usr/src/linux-image-2.6.32-dacheng_1.0.custum_i386.deb 這固然是安裝新內核了,呵呵~

第4、編譯內核的技巧
一、make menuconfig的做用是產生一個.config文件。一般咱們能夠先cp /boot/config-2.6.xx /usr/src/linux-source-2.6.32/.config,而後
sudo make menuconfig,在出現的菜單中,首先執行倒數第二項load an alternate configuration file,系統會自動讀取.config文件。而後配
置各選項會方便一些。
二、 新人編譯內核,每每要編譯屢次才能成功。爲了下次編譯方便,在make menuconfig結束後,sudo cp .config /root/.config,下次在make menuconfig前,先把/root下的.config文件複製過去。sudo cp /root/.config /usr/src/linux-source-2.6.32。若是新內核能夠啓動系統,sudo cp /root/.config /root/config。總之,/root/.config是一個實驗性的配置文件,/root/config是一個相對正確的配置文件,每次編譯可在 上
次配置文件基礎上編譯,用來減小BUG。一旦新內核BUG減小,立刻備份爲/root/config。
三、掌握幾個必要的單詞:
experimental 實驗的,實驗性的
deprecated 不同意的,反對的
unsafe 不安全的
obsolete 廢棄的
四、認識幾個符號
[ ]:能夠編入內核,也能夠不編入內核,視本身的硬件而定
< >:能夠編入內核、編爲模塊、也能夠不編入內核
{ }:本功能被其它功能所依賴,於是被自動選定,此時能夠編入內核、也能夠編爲模塊
五、五種基本操做
輸入y:把本功能編入內核
輸入n:內核中沒有此功能
輸入m:把本功能編爲一個模塊,運行時能夠動態插入或卸載
輸入?:查看幫助
輸入/:進行搜索
六、建議選中General setup===>Prompt for develpment and/or incoming code/drivers,由於部分功能須要該選項,例如pppoe。
七、內核的不少功能存在相互依賴的關係,若是你須要的一個功能總找不到,能夠用/搜索,而後檢查依賴關係是否知足。下面經過一個例子說明 。
Symbol: ATH_COMMON [=y]
Prompt: Atheros Wireless Cards
Defined at drivers/net/wireless/ath/Kconfig:1
Depends on: NETDEVICES [=y] && WLAN [=y] && WLAN_80211 [=y] && CFG80211 [=y]
Location:
-> Device Drivers
-> Network device support (NETDEVICES [=y])
-> Wireless LAN (WLAN [=y])
-> Wireless LAN (IEEE 802.11) (WLAN_80211 [=y])
上述例子中,ATH_COMMON是無線網卡的驅動。第四行說明只有NETDEVICES、WLAN、WAN-802十一、CFG80211都被編進內核時,本項驅動才能夠被選中。
七、 爲了縮小內核的尺寸,建議你們把kernel compression mode設置爲LZMA,同時儘可能把一些功能編譯爲模塊,如對FAT、FAT3二、NTFS文件系統>的支持,聲卡、顯卡、網卡、USB設備等。但 有些功能必須編入內核,不然新內核不能啓動。如system v ipc、對IDE硬盤的支持(固然,若是使>用SATA硬盤就無所謂了)、對ext2文件系統的支持、 Virtual terminal等。

如今,個人新內核僅爲1.4M,全部模塊僅爲11M。截圖以下,並附上個人config文件(你們能夠把該文件解壓到/usr/src/linux-2.6.xx下,命名爲.config直接使用)。

Some notes:

1. As a rule of thumb, it is always a good practice to run "make mrproper" in the kernel source tree upon unpacked.

2. If you always test or switch between kernels, this trick may be useful:
http://www.linuxsir.org/bbs/thread335331.html

3. Bare in mind, display driver is also kernel modules. Therefore, if a new kernel is installed, it is necessary to re-compile the display driver. It is true for both A-cards or N-cards.

4. To compile kernel modules, such as display drivers, it is necessary to have the same compiler version as the running kernel.
暱稱: d00m3d 時間: 2009-04-06 17:51:00
LZ 你怎麼作到比原版小那麼多的內核和模塊,裁減掉了不少東西?仍是壓縮了?

另外其餘/usr /var 目錄能夠瘦身嗎
暱稱: archenemy 時間: 2009-04-07 06:14:00
要控制內核大小,主要有三點。一是按d00m3d兄的指點,對內核採用LZMA壓縮,二是對本身須要的功能,如驅動等儘可能編譯爲模塊,第三,不須要的東西,儘可能不支持,如業餘無線電什麼的。若是須要也儘可能編譯爲模塊。
/var,好像只能夠aptitude clean了。若是很在乎,Debian了有兩個包能夠刪除本機上用不到的軟件,論壇裏有介紹的,能夠搜索試試。
暱稱: dacheng 時間: 2009-04-07 14:08:00
引用:
做者: dacheng
.....
/var,好像只能夠aptitude clean了。若是很在乎,Debian了有兩個包能夠刪除本機上用不到的軟件,論壇裏有介紹的,能夠搜索試試。
這兩個包大約叫什麼名字呢?沒有google到,謝謝
暱稱: tomcat.xin 時間: 2009-04-07 14:34:00
是deborphan麼?
暱稱: kfihihc 時間: 2009-04-07 15:30:00
lz安裝顯卡驅動了嗎?

我這邊單是nvidia的驅動就佔12M,而lz全部的模塊加起來才11M。
暱稱: fender010 時間: 2009-04-07 17:06:00
引用:
做者: dacheng
要控制內核大小,主要有三點。一是按d00m3d兄的指點,對內核採用LZMA壓縮,二是對本身須要的功能,如驅動等儘可能編譯爲模塊,第三,不須要的東西,儘可能不支持,如業餘無線電什麼的。若是須要也儘可能編譯爲模塊。
/var,好像只能夠aptitude clean了。若是很在乎,Debian了有兩個包能夠刪除本機上用不到的軟件,論壇裏有介紹的,能夠搜索試試。
驅動還有放到用戶空間裏的嗎?

我安裝 Debian 的時候最後有個提示安裝本機仍是所有的驅動(target or genric),這個安裝不是在內核中進行嗎?
暱稱: archenemy 時間: 2009-04-07 17:11:00
引用:
做者: fender010
lz安裝顯卡驅動了嗎?

我這邊單是nvidia的驅動就佔12M,而lz全部的模塊加起來才11M。
這確實是個問題,N卡官方驅動支持硬件高清解壓,可不開源,個頭又大

ATI 開源,但是兼容性屢屢出問題,還不支持硬件解壓
暱稱: archenemy 時間: 2009-04-07 17:13:00
deborphan用來刪除孤兒軟件,算是瘦身工具吧。也能夠在google中搜索「debian 瘦身"
暱稱: dacheng 時間: 2009-04-07 21:04:00
聲明:我確實沒有安裝ATI的驅動,是xorg自動識別出來的,實際使用中,感受還能夠就懶得再弄了。
暱稱: dacheng 時間: 2009-04-07 21:09:00
引用:
做者: archenemy
LZ 你怎麼作到比原版小那麼多的內核和模塊,裁減掉了不少東西?仍是壓縮了?

另外其餘/usr /var 目錄能夠瘦身嗎
/usr/share/doc 或 /usr/share/locale 裡面,用不着的均可以幹掉

/usr/share/zoneinfo 之內不合用的也可刪之
暱稱: d00m3d 時間: 2009-04-08 00:21:00
相關文章
相關標籤/搜索