1、準(zhǔn)備源碼
最新的源碼可以從kernel.org上獲取,如2.6.31:$ wget linux-kernel/v2.6/linux-2.6.31.tar.bz2
2、解壓源碼:
$ tar xvf linux-2.6.31.tar.bz2 -C /usr/src/ TIP:當(dāng)然,解壓縮到/usr/src/中并不是必須的,你可以解壓縮到任何位置。
3、檢查源碼(該步不是必須):
$ cd /usr/src/linux-2.6.31
$ make mrproper
TIP:該步的作用是檢查源碼是否有.o文件和依賴(lài)問(wèn)題,從全新的源碼編譯時(shí)不需要這一步。配合make clean(主要清除.o文件)使用更好,make mrproper主要清除環(huán)境變量及配置文件
4、編譯內(nèi)核
默認(rèn)情況下,編譯輸出的文件是放在源碼目錄里的,可以通過(guò)O=output/dir參數(shù)來(lái)指定輸出文件的位置(字母O,不是數(shù)字0)。很多第一次編譯內(nèi)核的人都會(huì)碰到一個(gè)問(wèn)題,/usr所在分區(qū)的空間不夠,此時(shí),這個(gè)參數(shù)就很有用。
源碼提供了很多配置方式,推薦使用menuconfig:進(jìn)入/usr/src/linux-2.6.31,已經(jīng)進(jìn)入則略過(guò):$ cd /usr/src/linux-2.6.31
創(chuàng)建/build/kernel menuconfig文件夾:$ mkdir -p /home/你的用戶(hù)名/build/kernel menuconfig
使用menuconfig配置:$ make O=/home/你的用戶(hù)名/build/kernel menuconfig
對(duì)于第一次編譯內(nèi)核的人,不推薦直接從內(nèi)核默認(rèn)配置開(kāi)始,推薦使用發(fā)行版自帶的配置文件,通常/boot下會(huì)有config-2.6.xx的文件。選擇Load an Alternate Configuration File,然后輸入/boot下那個(gè)config文件的名字,載入即可。第一次編譯最好還是不要隨便修改配置了,如果失敗的話(huà),會(huì)留下心理陰影的:-)在配置里隨便看看,如果有什么懂的也可以根據(jù)自己的需求改改,不明白的地方就不要?jiǎng)恿税?。完了之后別忘了save,保存的時(shí)候文件名就填.config。
接下來(lái)就開(kāi)始正式編譯了。編譯時(shí)間可能會(huì)有些長(zhǎng),為了避免終端意外關(guān)閉,可以使用screen,具體用法這里就不談了。
$ make O=/home/name/build/kernel
為了加快編譯的速度,可以使用-j參數(shù),開(kāi)啟多線(xiàn)程。比如雙核的cpu可以這樣編譯
$ make -j4 O=/home/name/build/kernel
一般-jn的n為核數(shù)的兩倍即可
5、安裝內(nèi)核
$ sudo make O=/home/name/build/kernel modules_install install
6、生成initrd
$ sudo mkinitramfs -o /boot/initrd-img.2.6.31 2.6.31關(guān)于mkinitramfs的其他參數(shù),請(qǐng)參考man mkinitramfs,關(guān)于initrd的作用,請(qǐng)自己google搜索。我近期也會(huì)寫(xiě)一篇文章剖析一下initrd。
7、修改引導(dǎo)
使用grub的話(huà),可以直接使用:
$ sudo update-grub
來(lái)更新引導(dǎo)文件,當(dāng)然也可以自己編輯/boot/grub/menu.lst或者/boot/grub/grub.cfg文件。
8、重啟
重啟之后可以通過(guò)以下命令確認(rèn)你當(dāng)前使用的是不是剛編譯的內(nèi)核:
$ uname -a