redhat9.0-2.4.X內核升級-2.6


 一、准備必要的軟件包
安裝開發工具包,主要包括
gcc、make、ncurse,依次執行如下命令
#rpm -ivh binutils-2.13.90.0.18-9.i386.rpm
#rpm -ivh cpp-3.2.2-5.i386.rpm
#rpm -ivh glibc-kernheaders-2.4-8.10.i386.rpm
#rpm -ivh glibc-devel-2.3.2-11.9.i386.rpm
#rpm -ivh gcc-3.2.2-5.i386.rpm
#rpm -ivh ncurses-devel-5.3-4.i386.rpm
最后一個ncurse開發庫如果不裝,在編譯module-init-tool時會報錯。

二、下載2.6內核源碼和升級工具,包括
(1)2.6內核源碼
下載地址:
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2
(2)下載module-init-tools-3.2.tar.bz2
http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2
(3)下載mkinitrd-4.1.18-2.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm
(4)下載lvm2-2.00.25-1.01.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm
(5)下載device-mapper-1.00.19-2.i386.rpm
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm

三、配置內核
3.1 將下載好的內核源碼包和4個升級工具都拷貝到/usr/src文件夾下。步驟略。
3.2 開始解壓新內核,具體操作步驟:
(1)#cd /usr/src
(進入到/usr/src目錄下)
(2)#rm –rf linux
(刪除linux文件夾。值得一提的是,如果內核先前從未編譯過,則沒有這個文件夾,此命令行可略過)
(3)#tar jvxf linux-2.6.18.tar.bz2 (解壓新內核)
(4)#ln -s linux-2.6.18 linux (重新生成linux文件夾)
3.3 安裝module-init-tools工具
在/usr/src目錄下,依次執行下列命令:
# tar jvxf module-init-tools-3.2.tar.bz2 (解壓module-init-tools)
# cd module-init-tools-3.2 (由/usr/src目錄進入module-init-tools目錄下)
#./configure --prefix=/     (這里是指定安裝目錄為根目錄/)
# make moveold
# make all install
#./generate-modprobe.conf /etc/modprobe.conf
備注:這一步的輸出文件名modprobe.conf一定要寫對,不要使用TAB鍵,否則成/etc/modules.conf

3.4、安裝另外三個升級工具
回到/usr/src目錄下安裝另外三個升級工具,依次執行如下命令:
# cd /usr/src   (回到/usr/src目錄下)
# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm (注意,這里一定要加入--nodeps參數,下同)
# rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm
# rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpm
如果不更新以上幾個升級包,在后面編譯內核時會提示以下錯誤:
      mkinitrd failed
      make[1]: *** [install] Error 1
      make: *** [install] Error 2
3.5、配置內核選項。
# cd linux-2.6.18 (進入到/usr/src/linux-2.6.18目錄下)
# make mrproper (該命令可確保源代碼目錄下沒有不正確的.o文件)
# make menuconfig (配置內核各選項,具體說明見下)
3.6 內核選項說明
執行make menuconfig會出現一個圖形界面,列出了所有的內核配置選項,
有的選項下還有子選項,你可以用方向鍵來選擇,用Y鍵來確定。
經過多次試驗,大多數選項默認就行,以下幾個選項必須選擇
(請認真核對下面每一個選項,否則編譯很有可能前功盡棄):
(1)Loadable Module support選項中,選上“Module unloading”
   和“Automatic kernel module loading”這兩項;
(2)Device Drivers--->Block Devices中選上“Loopback device support”;
   Device Drivers--->Multi-device support(RAID and LVM)處要選上“device mapper support”;
   Device Drivers--->Graphics support,一定要選上“ Support for frame buffer devices”;
   Device Drivers --->USB support --->選上“USB Mass Storage support”
   (如果是在實環境中,想要更多USB支持,就全選吧。我的是在虛擬機中,用不着了)
   Device Drivers --->Network device support
     --->Ethernet (10 or 100Mbit)
     ---><*> AMD PCnet32 PCI support;
(3)File system選項中,以下9個選項是關於ext2和ext3文件系統配置,全部選上
           Second extended fs support
           Ext2 extended attributes
           Ext2 POSIX Access Control Lists
           Ext2 Security Labels
           Ext3 journalling file system support
           Ext3 extended attributes
           Ext3 POSIX Access Control Lists
           Ext3 Security Labels
           JBB (ext3) debugging support
(4)File system--->DOS/FAT/NT Filesystems
             --->“NTFS file system support”;也要選上
注意:
       ext2和ext3文件系統配置很重要,也是必需的,
       如果不把對Ext3、Ext2文件的支持直接編譯進內核,
       在你reboot時機器就會當掉,出現如下錯誤信息:
       kernel panic : no init found ,try passing init = option to kernel.....(第一次升級內核我在這掛了~~)
或者是:
       VFS:Cannot open root device "hdxy" or unknow-block(0,0)
       Please append a correct "root=" boot option
       kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
或者是:
       mount: error 19 mounting ext3
       pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2
       umount /initrd/proc fail: 2
       Freeing unused kernel memory: 244k freed
       Kernel panic – not syncing: No init found. Try passing init = option to kernel

(5)如果你在vmware下編譯內核,硬盤用的是scsi的,以下三個選項必選:
   Device Drivers ---><*>SCSI device support (此項不選的話,下面兩項就選擇不上)
   Device Drivers ---><*>SCSI device support ---><*>SCSI disk support
   Device Drivers---><*>SCSI device support--->SCSI low-level drivers ---><*>; BusLogic SCSI support
                
3.7選項配置圖標的說明:
(1)選項的配置方法:
按Y,表示以build-in的方式包含,也就是把選項集成到內核里.
對應的圖標為[*]或<*>,
按N,表示不包含。對應的圖標為[ ]或< >
按M,表示以模塊的形式包含,對應的圖標為<M>. 注意不是所有的選項都可以用模塊形式加載的

(2)選項的狀態圖標
每個選項設完之后會顯示一個狀態圖標,只能是下面5種之一
[*] - built-in表示這個選項被集成在內核里了
[ ] - excluded 表示這個選項被內核排除了
<M> - module 表示這個選項以模塊的形式放在內核里,
用戶用到這個選項的時候要執行insmod命令.
要注意不是所有的選項都可以以模塊的形式加載的。
所以當你按了m鍵,圖標仍然是[*]而不是<M>時,就要
明白這個選項只能要么集成在內核里,要么被內核排除。
< > - module capable,表示這個選項雖然被排除了,但
可以以模塊的形式被重新加載,比如,一個圖標為<M>的
選項,按N鍵以后狀態就會變成< >.
<*> - 這個圖標幫助沒寫,當實際上會出現,比如,按某個選項狀態為<M>
    或者< >時,按Y鍵,圖標就會變成這個,意思和[*] 一樣,把可以用模塊
    加載的選項變成build-in方式加載。
   
(3)歸納一下就是: 括號里如果為空白,則該選項未被加載,想使用該選項時必須重新編譯內核;
   如果括號里是*,是以build-in的方式加載;
   如果中間是m(此時只能是尖括號),就是以模塊的形式動態加載.想使用時用insmod載入。不必重新編譯內核

四、編譯工作
OK,繁雜的配置工作完成了,至此,編譯前的准備工作都做好了!
4.1、開始編譯啦……
在/usr/src/linux-2.6.18目錄下,執行以下命令即可編譯。
# make dep (建立編譯時所需的從屬文件。注意:如果內核從未編譯過,此步可跳過)
# make clean (清除內核編譯的目標文件。注意:如果內核從未編譯過,此步可跳過)
# make bzImage (注意大小寫。這一步才是真正編譯內核,也就是編譯built-in的東西)
     這一步時間較長,我的機器是45分鍾左右(虛擬機的話建議內存分配大一點執行可能不較快)。
     內核編譯成功后,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內核的映像文件bzImage。
     如果用 make zImage編譯,內核很大的話,系統會提示你使用make   bzImage命令來編譯,
     所以直接用make bzImage來編譯。
# make modules (編譯可加載模塊)
這一步時間也不短,我的機器用了半個小時
# make modules_install (安裝可加載模塊)
安裝成功后,系統會在/lib/modules目錄下生成一個2.6.18子目錄,里面存放着新內核的所有可加載模塊。
#make (這一步也要進行,不然執行下面的make install時會報錯)
#make install (安裝新內核)
注意:
     make install的時候可能會出現如下錯誤信息:
     No module BusLogic found for kernel 2.4.12
     mkinitrd failed
此問題一般只出現在SCSI硬盤+VMWARE+REDHAT架構中,
因為BusLogic被編譯進了內核而不是一個module的形式
(2.4內核的Buslogic模塊即使靜態編譯進內核也不行)。
解決方式是直接將BusLogic.o文件復制過去:
#cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi
不過別忘記,復制過后再執行一下make install。
這一步若卡住了,下面的都無法進行
五、啟動新內核
5.1、將新內核和System.map文件拷貝到/boot目錄下,依次執行以下命令:    
# cp /usr/src/linux-2.6.18/arch/i386/boot/bzImage   /boot/vmlinuz-2.6.18    
# cp /usr/src/linux-2.6.18/System.map   /boot/System.map-2.6.18    
# cd /boot (進入boot目錄)
# rm –rf System.map (刪除原來的連接)    
# ln -s System.map-2.6.18 System.map   (重新建立連接)    
5.2、修改Grub啟動管理器
如果沒有錯誤的話, 下面開始修改grub配置文件
在/boot目錄下,執行以下命令:
# new-kernel-pkg --mkinitrd --depmod --install 2.6.18
(這時候你的/boot下會生成一個initrd-2.6.18.img,並且你的grub.conf文件也作了相應更改)
# df
(查看根目錄在那個分區,下一步要用到。注意,這里根分區不時boot的那個50M的分區,
而一般是你最大的那個分區,也就是“/”對應的物理設備名,千萬不要搞錯哦。我的為 /dev/hda3)
# vi /grub/grub.conf
進入grub.conf文件,找到如下信息:
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.18)
        root (hd0,0)
        kernel /vmlinuz-2.6.18 ro root= LABEL=/
        initrd /initrd-2.6.18.img
做兩處修改:
(1) 將default=1改為default=0(不改的話也可以,只不過重啟之后會默認進入2.4內核)
(2) 將kernel行的“LABEL=/”換成根目錄所對應的設備名(上一步用df查看的就是)
此步很重要,修改錯誤將可能導致進不去系統,我把我修改后的grub.conf文件列出來,不明之處,可以對照修改:
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.18)
        root (hd0,0)
        kernel /vmlinuz-2.6.18 ro root=/dev/hda3
        initrd /initrd-2.6.18.img
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

參數說明

default=0說明默認啟動項目是第一項,按照上面,默認啟動的是2.6.18。

timeout=10等待選擇的時間10s。
5.3,趕快重啟,看看升級后的2.6內核吧,OK,大功告成!

 

我在這兒也是轉載了別人的文章,如果在后面啟動linux-2.6有什么問題,一般也是前面選擇內核選項的問題。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com