linux内核编译与新内核启用
1、??準備工作
(1)? ?? ? 整理出系統需要支持的硬件、文件系統類型以及網絡協議等內容。
(2)? ?? ? 建議用命令uname –r 查看一下系統的版本號,如果你的系統版本與將要編譯的內核版本一致,建議將/lib/modules下的內容備份,否則將來的make modules_install 步驟產生的文件會覆蓋這個路徑下的內容。
(3)? ?? ? A:下載并解壓linux內核,建議從
http://www.kernel.org/pub/linux/kernel/
下載內核,因為安裝系統時所安裝的源代碼默認情況下支持很多設備,這樣給內核裁減增加了難度。以下假設你已經下載了內核的為linux-x-y-z.tar.gz。一般都將linux內核源代碼放在/usr/src下,這里仍然遵守這個習慣,如果你的這個路徑下已經存在這個版本的內核,建議將已有的改個名稱。
? ?? ?? ?? ?? ?B:如果內核已經安裝(/usr/src/目錄有linux子目錄),跳過如果沒有安裝,在光驅中放入linux安裝光盤,找到kernel-source-2.xx.xx.rpm文件(xx代表數字,表示內核的版本號), 比如RedHat linux的RPMS目錄是/RedHat/RPMS/目錄,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安裝內核?
2、清除從前編譯內核時殘留的.o 文件和不必要的關聯??
cd /usr/src/linux?
make mrproper?
? ? 確保源代碼目錄下沒有不正確的.o文件和文件依賴關系,執行該命令后,內核選項會回到默認的狀態下。如果你是下載的內核源碼,而且是第一次編譯,就沒有必要執行這一步操作
3、配置內核,修改相關參數,請參考其他資料?
在圖形界面下,make xconfig;字符界面下,make menuconfig?
在內核配置菜單中正確設置個內核選項,保存退出?
4、正確設置關聯文件?
make dep?
? ? 根據上一步所選擇的選項,建立文件的依賴關系。
5、make clean
清理一些不必要的文件,如果你在上次編譯的基礎上,刪去了一些選項,建議你執行這一步操作,否則,就沒有必要了。
6、編譯內核?
對于大內核(比如需要SCSI支持),make bzImage?
對于小內核,make zImage?
7、編譯模塊?
make modules?
編譯可加載模塊(即內核選項中選擇為M的選項),編譯時間跟M選項的數量有關。
8、安裝模塊?
make modules_install?
? ?即將編譯好的modules拷貝到/lib/modules下,這就是為什么在“準備工作”的第三步提醒你備份的原因了。
9、使用新內核
方法一:?
(1)更換內核:A、mv /usr/src/linuxX.X.X/system.map? ??/boot/system.map
? ?? ?? ?? ?? ???B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage? ?/boot/vmlinuz
(2)然后修改/etc/lilo.conf文件,加一個啟動選項,使用新內核bzImage/zImage啟動。格式如下:?
boot=/dev/hda?
map=/boot/map?
install=/boot/boot.b?
prompt?
timeout=50?
linear?
default=linux-new? ? ### 告訴lilo缺省使用新內核啟動linux ###?
append="mem=256M"?
image=/boot/vmlinuz-2.2.14-5.0?
? ?? ???label=linux?
? ?? ???read-only?
? ?? ???root=/dev/hda5?
image=/boot/bzImage(zImage)?
? ?? ???label=linux-new?
? ?? ???read-only?
? ?? ???root=/dev/hda5?
保留舊有的啟動選項可以保證新內核不能引導的情況,還可以進入linux進行其他操作。?
保存退出后,不要忘記了最重要的一步,運行/sbin/lilo,使修改生效?
方法二:使用GRUB(修改grub.conf文件)
(1)更換內核:A、mv /usr/src/linuxX.X.X/system.map? ? /boot/system.map
? ?? ?? ?? ?? ???B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage? ?/boot/vmlinuz
(2)修改引導管理程序Grub,/etc/grub.conf
內容如下:
#boot =/dev/had
default =0
timeout =10
splashimage =(hd0, 0)/grub/splash.xpm.gz
title Red Hat Linux(2.4.20-8)
? ?root(hd0, 0)
? ?kernel /vmlinuz -2.4.20-8??ro root =LABEL =/
? ?initrd /initrd-2.4.20-8.img
方法三: 修改啟動配置文件
現在大多數使用的都是grub啟動,需要修改/boot/grub/grub.conf,添加相應的啟動信息,添加內容的最簡單格式如下:
title 顯示在啟動菜單上的名稱
root 根文件系統掛載分區
kernel 壓縮過的內核文件名
initrd 根文件系統文件名
? ?? ?? ?? ???如:
? ?? ?? ?? ???title My new kernel
? ?? ?? ?? ???root (hd0,2)
? ?? ?? ?? ???kernel /boot/vmlinuz-x.y.z
? ?? ?? ?? ???initrd /boot/initrd-x.y.z.img
10、重新生成ram磁盤?
如果您的系統中的/etc/lilo.conf沒有使用了ram磁盤選項initrd,略過?
如果您的系統中的/etc/lilo.conf使用了ram磁盤選項initrd,?
使用mkinitrd initrd-內核版本號 內核版本號命令重新生成ram磁盤文件,例如我的Redhat 6.2:?
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0?
之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:?
initrd=/boot/initrd-2.2.14-5.0?
ram磁盤能使系統性能盡可能的優化,具體參考/usr/src/linux/Documents/initrd.txt文件?
11、重新啟動,OK!
總結
以上是生活随笔為你收集整理的linux内核编译与新内核启用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解linux的initrd
- 下一篇: initrd.img相关