Debian中编译内核
轉載:
http://blog.163.com/libo_5/blog/static/156968520101016102051580/
http://hi.baidu.com/wg_wang/item/f9375c2f00ca75c0ee10f1db
debian內核編譯
1、到www.kernel.org/pub/liunux/kernel所需要編譯的內核源代碼
2、安裝必要的包,其中kernel-package是debian用以編譯內核的工具;fakeroot是一個在系統中創建假root的工具;為dpkg在編譯內核中所需
udev 是管理/dev和hotplug的守護進程;build-essential是創建deb包所需的信息列表;yaird是用來創建內核初始引導鏡像的工 具,注意筆者編譯的時刻,lenny(testing)版本的debian下是沒有這個包的,需要在etch(stable)或 sid(unstable)下才有。
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
3、把源代碼放到kernel目錄下并解壓并進入該文件夾,如cd linux-2.6.24.3。
4、配置內核選項,選項內容巨多,筆者把reiserfs文件系統編譯成內建的了,還增加了smp和超線程支持,并去掉無線,藍牙,1394等不會用到的模塊等等。
make clean && make mrproper
make menuconfig
5、創建內核的deb包,這個過程花費一定的時間,結果會在kernel目錄下得到一個deb包,如linux-2.6.24.3_2.6.24.3_i386.deb。
make-kpkg clean
fakeroot make deb-pkg
6、安裝內核的deb包
dpkg -i *.deb
7、創建Ramdisk
mkinitrd.yaird -o /boot/initrd.img-版本號
8、配置grub引導選項,如果不是grub引導的,請使用其他命令。
update-grub
9、如果不想要卸載就得內核的話,跳過(建議不要卸載,否則出了問題的話就慘了)。版本號可以在/boot下面看到。
dpkg --purge --force-remove-essential 內核軟件包名稱,包括完整版本號
10、重啟,啟動時選擇新的版本號的那個選項就可以了。
?
?
?
最 近反復編譯內核十余次,其間得到了d00m3d兄、simon22543兄、waq兄、聚焦深空兄等人的很多幫助,大量參考了金步國兄 (csfrank122@hotmail.com)的作品( http://lamp.linux.gov.cn/Linux/kernel_options.html )十分感激,一并致謝!現在把自己的些許心得與大家分享。
一、為什么要編譯內核
第一,可以支持一些現有內核不支持的硬件。如我的無線網卡。第二,可以加快運行速度。使用新內核啟動,感覺splashy的進度條很快,明顯超
過Debian自帶的內核。究其原因,是因為一個發行版,為了普遍適應各種用戶的需求,不得不支持很多的硬件,其中,可能你一輩子也用不上。 通過重新編譯內核,可以大幅縮小內核尺寸,提高運行速度。第三,可以學會如何定制、裁減、編譯自己的內核。
第二、編譯內核前的準備
主要是安裝幾個必須的文件,通常可以這樣:
sudo aptitude install gcc g++ make kernel-package libncurses5-dev
第三、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 這當然是安裝新內核了,呵呵~
第四、編譯內核的技巧
1、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文件。然后配
置各選項會方便一些。
2、 新人編譯內核,往往要編譯多次才能成功。為了下次編譯方便,在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。
3、掌握幾個必要的單詞:
experimental 實驗的,實驗性的
deprecated 不贊成的,反對的
unsafe 不安全的
obsolete 廢棄的
4、認識幾個符號
[ ]:可以編入內核,也可以不編入內核,視自己的硬件而定
< >:可以編入內核、編為模塊、也可以不編入內核
{ }:本功能被其它功能所依賴,因而被自動選定,此時可以編入內核、也可以編為模塊
5、五種基本操作
輸入y:把本功能編入內核
輸入n:內核中沒有此功能
輸入m:把本功能編為一個模塊,運行時可以動態插入或卸載
輸入?:查看幫助
輸入/:進行搜索
6、建議選中General setup===>Prompt for develpment and/or incoming code/drivers,因為部分功能需要該選項,例如pppoe。
7、內核的很多功能存在相互依賴的關系,如果你需要的一個功能總找不到,可以用/搜索,然后檢查依賴關系是否滿足。下面通過一個例子說明 。
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-80211、CFG80211都被編進內核時,本項驅動才可以被選中。
7、 為了縮小內核的尺寸,建議大家把kernel compression mode設置為LZMA,同時盡量把一些功能編譯為模塊,如對FAT、FAT32、NTFS文件系統>的支持,聲卡、顯卡、網卡、USB設備等。但 有些功能必須編入內核,否則新內核不能啟動。如system v ipc、對IDE硬盤的支持(當然,如果使>用SATA硬盤就無所謂了)、對ext2文件系統的支持、 Virtual terminal等。
現在,我的新內核僅為1.4M,所有模塊僅為11M。截圖如下,并附上我的config文件(大家可以把該文件解壓到/usr/src/linux-2.6.xx下,命名為.config直接使用)。
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了有兩個包可以刪除本機上用不到的軟件,論壇里有介紹的,可以搜索試試。 |
我這邊單是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。 |
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/zoneinfo 之內不合用的也可刪之 昵稱: d00m3d 時間: 2009-04-08 00:21:00
總結
以上是生活随笔為你收集整理的Debian中编译内核的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何防止无线网络被破解
- 下一篇: 如何调整mintty行距及字间距