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!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章