談笑有鴻儒,往來(lái)無(wú)白丁

          在恰當(dāng)?shù)臅r(shí)間、地點(diǎn)以恰當(dāng)?shù)姆绞奖磉_(dá)給恰當(dāng)?shù)娜?..  閱讀的時(shí)候請(qǐng)注意分類,佛曰我日里面是談笑文章,其他是各個(gè)分類的文章,積極的熱情投入到寫博的隊(duì)伍中來(lái),支持blogjava做大做強(qiáng)!向dudu站長(zhǎng)致敬>> > 我的微博敬請(qǐng)收聽

          一次即大功告成 Linux內(nèi)核升級(jí)全過(guò)程?

          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1583735



          今天終于成功的編譯了linux-2.6.18的內(nèi)核,是在redhat9 2.4.20-8的內(nèi)核基礎(chǔ)上進(jìn)行的!


          作者:飄揚(yáng) 來(lái)源:飛飛博客 發(fā)布時(shí)間:2007.04.18
          ?
          由于開發(fā)環(huán)境需要在linux-2.6內(nèi)核上進(jìn)行,于是準(zhǔn)備對(duì)我的虛擬機(jī)上的Linux系統(tǒng)升級(jí)。沒(méi)想到這一弄就花了兩天時(shí)間(反復(fù)裝系統(tǒng),辛苦啊~~),總算把Linux系統(tǒng)從2.4.20-8內(nèi)核成功升級(jí)到了2.6.18內(nèi)核。


          網(wǎng)上雖然有很多介紹Linux內(nèi)核升級(jí)的文章,不過(guò)要么過(guò)時(shí),下載鏈接失效;要么表達(dá)不清,不知所云;更可氣的是很多文章在轉(zhuǎn)載過(guò)程中命令行都有錯(cuò)誤。剛開始我就是在這些“攻略”的指點(diǎn)下來(lái)升級(jí)的,以致于浪費(fèi)了很多時(shí)間。


          現(xiàn)在,費(fèi)盡周折,升級(jí)成功,心情很爽,趁性也來(lái)寫個(gè)“升級(jí)攻略”吧!于是特意又在虛擬機(jī)上重新安裝一個(gè)Linux系統(tǒng),再來(lái)一次完美的升級(jí),邊升級(jí)邊記錄這些步驟,寫成一篇Linux內(nèi)核升級(jí)記實(shí)錄(可不是回憶錄啊!),和大家一起分享~~!


          首先說(shuō)明,下面帶#號(hào)的行都是要輸入的命令行,且本文提到的所有命令行都在終端里輸入。接下來(lái),讓我們一起開始精彩的Linux內(nèi)核升級(jí)之旅吧!


          一、準(zhǔn)備工作


          啟動(dòng)Linux系統(tǒng),并用根用戶登錄,進(jìn)入終端模式下。


          1、查看Linux內(nèi)核版本

          # uname -a

          如果屏幕顯示的是2.6.x,說(shuō)明你的已經(jīng)是2.6的內(nèi)核,也用不著看下文了,該干什么干什么去吧!~~~如果顯示的是2.4.x,那恭喜你,闖關(guān)通過(guò),趕快進(jìn)行下一步。


          2、下載2.6內(nèi)核源碼

          下載地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2


          3、下載內(nèi)核升級(jí)工具

          (1)下載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

          (2)下載mkinitrd-4.1.18-2.i386.rpm

          http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm

          (3)下載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

          (4)下載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


          (2.6.18內(nèi)核和這4個(gè)升級(jí)工具我都有備份,如果以上下載地址失效,請(qǐng)留下你的郵箱,我給你發(fā)過(guò)去)
          http://www.fly2.cn/guestbook
          二、配置工作


          好啦,2.6內(nèi)核和4個(gè)升級(jí)工具都下載完了(少一個(gè)也不行,如果沒(méi)有下載齊全,請(qǐng)不要嘗試下面的步驟,升級(jí)是不會(huì)成功的),下面回到Linux系統(tǒng)中開始配置工作吧。


          4、將下載好的內(nèi)核和4個(gè)升級(jí)工具都拷貝到/usr/src文件夾下。怎么拷貝就不用我教了吧~~~~不會(huì)拷貝的去撞墻吧!~~呵呵!


          5、拷貝完畢,開始解壓新內(nèi)核,具體操作請(qǐng)依次執(zhí)行以下命令:

          # cd /usr/src (進(jìn)入到/usr/src目錄下,如果已經(jīng)在/usr/src目錄下,可不執(zhí)行該命令)

          # rm –rf linux (刪除linux文件夾。值得一提的是,如果內(nèi)核先前從未編譯過(guò),則沒(méi)有這個(gè)文件夾,此命令行可略過(guò))

          # tar jvxf linux-2.6.18.tar.bz2 (解壓新內(nèi)核)

          # ln -s linux-2.6.18 linux (重新生成linux文件夾)


          6、安裝module-init-tools工具包

          在/usr/src目錄下,依次執(zhí)行下列命令:(ZhiQiao:最好先看下README)

          # tar jvxf module-init-tools-3.2.tar.bz2 (解壓module-init-tools)

          # cd module-init-tools-3.2 (由/usr/src目錄進(jìn)入module-init-tools目錄下)

          #./configure --prefix=/ (--prefix=/若重新配置文件把文件放到指定的目錄下)

          # make moveold

          # make all install

          #./generate-modprobe.conf /etc/modprobe.conf


          7、安裝另外三個(gè)升級(jí)工具

          回到/usr/src目錄下,依次執(zhí)行下列3個(gè)命令來(lái)安裝另外三個(gè)升級(jí)工具:

          # rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm (注意,這里一定要加入--nodeps參數(shù),下同) (ZhiQiao:nodeps不驗(yàn)證組件的關(guān)聯(lián)性)

          # rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm

          # rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpm


          如果不更新以上幾個(gè)升級(jí)包,在后面編譯內(nèi)核時(shí)會(huì)提示以下錯(cuò)誤:

          mkinitrd failed

          make[1]: *** [install] Error 1

          make: *** [install] Error 2


          8、配置內(nèi)核選項(xiàng)。有點(diǎn)繁瑣,~~希望一次成功哦~~。

          # cd linux-2.6.18 (進(jìn)入到/usr/src/linux-2.6.18目錄下)

          # make mrproper (該命令可確保源代碼目錄下沒(méi)有不正確的.o文件)

          # make menuconfig (配置內(nèi)核各選項(xiàng))


          此時(shí)會(huì)出現(xiàn)一個(gè)圖形界面,列出了所有的內(nèi)核配置選項(xiàng),有的選項(xiàng)下還有子選項(xiàng),你可以用方向鍵來(lái)選擇,用Y鍵來(lái)確定。經(jīng)過(guò)我多次試驗(yàn),大多數(shù)選項(xiàng)默認(rèn)就行,以下幾個(gè)選項(xiàng)必須選擇(請(qǐng)認(rèn)真核對(duì)下面每一個(gè)選項(xiàng),否則編譯很有可能前功盡棄):


          (1)Loadable Module support選項(xiàng)中,一定要選上“Module unloading”和“Automatic kernel module loading”這兩項(xiàng);

          (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”(如果是在實(shí)環(huán)境中,想要更多USB支持,就全選吧。我的是在虛擬機(jī)中,用不著了)

          Device Drivers --->; Network device support --->;Ethernet (10 or 100Mbit) --->; <*>; AMD PCnet32 PCI support

          (3) File system--->(以下9個(gè)選項(xiàng)是關(guān)于ext2和ext3文件系統(tǒng)配置,全部選上)

          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

          File system--->DOS/FAT/NT Filesystems --->選上“ NTFS file system support”;

          File Systems --> Miscellaneous filesystems ---><*> Compressed ROM file system support (cramfs)


          注意:

          ext2和ext3文件系統(tǒng)配置很重要,也是必需的,如果對(duì)Ext3、Ext2文件的支持直接編譯進(jìn)內(nèi)核,在你reboot時(shí)機(jī)器就會(huì)當(dāng)?shù)簦霈F(xiàn)如下錯(cuò)誤信息:

          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

          (我的機(jī)器就是在重啟之后出現(xiàn)第三種錯(cuò)誤,進(jìn)不去系統(tǒng),郁悶死,只好重裝了~~~)


          (4)如果你在vmware下重新編譯內(nèi)核,硬盤用的是scsi的,以下選項(xiàng)必選:

          Device Drivers --->SCSI device support ---><*>SCSI disk support

          Device Drivers--->SCSI device support--->SCSI low-level drivers--->;<*>; BusLogic SCSI support


          三、編譯工作


          OK,繁雜的配置工作完成了,至此,編譯前的準(zhǔn)備工作都做好了!

          9、開始編譯啦……:

          在/usr/src/linux-2.6.18目錄下,執(zhí)行以下命令即可編譯。編譯需要一段時(shí)間,給自己倒杯茶耐心等候吧!

          # make dep (建立編譯時(shí)所需的從屬文件。注意:如果內(nèi)核從未編譯過(guò),此步可跳過(guò))

          # make clean (清除內(nèi)核編譯的目標(biāo)文件)

          # make bzImage (注意大小寫。這一步才真正編譯內(nèi)核)(ZhiQiao:這步大約花了我10分鐘時(shí)間,配置:512M內(nèi)存,1.8G CPU)

          內(nèi)核編譯成功后,會(huì)在/usr/src/linux/arch/i386/boot目錄中生成一個(gè)新內(nèi)核的映像文件bzImage。如果用make zImage編譯,內(nèi)核很大的話,系統(tǒng)會(huì)提示你使用make bzImage命令來(lái)編譯,所以我直接用make bzImage來(lái)編譯。

          # make modules (編譯可加載模塊) (ZhiQiao:這步大約花了20分鐘時(shí)間)

          # make modules_install (安裝可加載模塊)

          安裝成功后,系統(tǒng)會(huì)在/lib/modules目錄下生成一個(gè)2.6.18子目錄,里面存放著新內(nèi)核的所有可加載模塊。

          # make install (安裝新內(nèi)核)


          注意:make install的時(shí)候可能會(huì)出現(xiàn)如下錯(cuò)誤信息:

          No module BusLogic found for kernel 2.6。18

          mkinitrd failed

          此問(wèn)題一般只出現(xiàn)在SCSI硬盤+VMWARE+REDHAT架構(gòu)中,因?yàn)锽usLogic被編譯進(jìn)了內(nèi)核而不是一個(gè)module的形式(2.4內(nèi)核的Buslogic模塊即使靜態(tài)編譯進(jìn)內(nèi)核也不行)。解決方式是直接將可以BusLogic.o文件復(fù)制過(guò)去:

          # cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi

          不過(guò)別忘記,復(fù)制過(guò)后再執(zhí)行一下make install。

          (如果make menuconfig時(shí),把BusLogic模塊選成M--Module模式--就不會(huì)出現(xiàn)這個(gè)提示。)
          ?
          ZhiQiao:這里我是按上面所說(shuō)的方法做的結(jié)果在啟動(dòng)時(shí)出現(xiàn)關(guān)于BusLogic的錯(cuò)誤,后來(lái)我將虛擬機(jī)的硬盤換成了IDE的,成功升級(jí)!Vmware默認(rèn)的硬盤是SCSI的,有很多人不知道怎么改成IDE的,具體方法可以參考四、啟動(dòng)新內(nèi)核

          10、將新內(nèi)核和System.map文件拷貝到/boot目錄下,依次執(zhí)行以下命令:

          # 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 (進(jìn)入boot目錄)

          # rm –rf System.map (刪除原來(lái)的連接)

          # ln -s System.map-2.6.18 System.map (重新建立連接)


          11、修改Grub啟動(dòng)管理器

          如果沒(méi)有錯(cuò)誤的話, 下面開始修改grub配置文件(不要告訴我你用的lilo)

          在/boot目錄下,執(zhí)行以下命令:

          # new-kernel-pkg --mkinitrd --depmod --install 2.6.18 (這時(shí)候你的/boot下生成一個(gè)initrd-2.4.12.img,并且你的grub.conf也作了相應(yīng)更改)


          # df (查看根目錄在那個(gè)分區(qū),下一步要用到。注意,這里根分區(qū)不時(shí)boot的那個(gè)50M的分區(qū),而一般是你最大的那個(gè)分區(qū),也就是”/”,千萬(wàn)不要搞錯(cuò)哦。我的為 /dev/hda2)


          # vi grub/grub.conf (ZhiQiao:此處應(yīng)該為/grub/grub.conf)

          進(jìn)入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(不改的話,重啟之后默認(rèn)進(jìn)入2.4內(nèi)核)

          (2) 將kernel行的“LABEL=/”換成根目錄所在的分區(qū)(上一步查看的就是)

          此步很重要,修改錯(cuò)誤將會(huì)可能導(dǎo)致進(jìn)不去系統(tǒng),我把我修改后的grub.conf文件列出來(lái),不明之處,可以對(duì)照修改:

          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/hda2

          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


          12,OK,大功告成!趕快重啟,看看升級(jí)后的2.6內(nèi)核吧!

          13,下一步該做什么呢?我的qq:147863130


          我編譯以后成功運(yùn)行看看我的版本號(hào)!下圖

          redhat9上面的linux-2.6.18的內(nèi)核
          ?



          ?

          posted on 2007-04-27 12:46 壞男孩 閱讀(7338) 評(píng)論(12)  編輯  收藏 所屬分類: Linux

          FeedBack:
          # re: 一次性成功編譯Linux內(nèi)核!
          2007-06-20 21:30 | 恍惚
          我遇到的問(wèn)題有點(diǎn)麻煩
          VFS: Cannot open root device "sda8" or unknown-block(2,0)
            Please append a correct "root=" boot option
            Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
            回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2007-07-26 22:08 | Bo
          老大,太感謝了,一次性搞定!!  回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2008-01-17 17:18 | jpuff
          經(jīng)典!感謝  回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2008-07-11 00:24 |
          十分感謝~搞定了。SCSI選擇編譯成模塊也可以,試過(guò)了  回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2009-07-09 09:51 | 諤諤
          make bzImage后錯(cuò)誤修改如下
          錯(cuò)誤 make[2]: *** [arch/i386/boot/compressed/vmlinux.bin] Error 1
          make[1]: *** [arch/i386/boot/compressed/vmlinux] Error 2
          make: *** [bzImage] Error 2
          方法:在arch/i386/Makefile里面做一些修改:
          將OBJCOPYFLAGS改成如下的: OBJCOPYFLAGS := -O binary ——change-section-lma .bss-0xc0000000 -R .note -R .comment -S 然后重新make bzImage OK!
            回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2009-08-25 18:30 | sine920
          做到最后一步,重啟后就直接進(jìn)入了GRUB界面。現(xiàn)在應(yīng)該怎么辦呢?
            回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2010-03-15 22:12 | 劉艷軍
          這位大哥,能把那四個(gè)工具給我發(fā)下不,找了挺長(zhǎng)時(shí)間都沒(méi)找著,很多鏈接都沒(méi)法用了!我的郵箱:liuyanjun803@163.com 謝謝了!!!  回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2012-03-05 17:08 | linttt@126.com
          這位大哥,能把那四個(gè)工具給我發(fā)下不,找了挺長(zhǎng)時(shí)間都沒(méi)找著,很多鏈接都沒(méi)法用了!我的郵箱:linttt@126.com 謝謝了!!!  回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2012-11-08 17:07 | ballack
          沒(méi)有編譯文件系統(tǒng),真進(jìn)不了系統(tǒng)了,網(wǎng)上有的說(shuō)可以都用默認(rèn)配置的,擦……  回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核!
          2014-09-28 01:01 | Linux新手
          東西都失效了,可以發(fā)給我嗎?363984349@qq.com  回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核![未登錄](méi)
          2014-10-09 11:41 | huang
          感覺(jué)講的很詳細(xì),但是東西已經(jīng)失效了,能不能發(fā)一份給我,萬(wàn)分感謝!851887444@qq.com。  回復(fù)  更多評(píng)論
            
          # re: 一次性成功編譯Linux內(nèi)核![未登錄](méi)
          2014-10-09 15:52 | huang
          主站蜘蛛池模板: 博爱县| 清徐县| 贺兰县| 阳信县| 镇康县| 洪湖市| 木里| 潢川县| 仙居县| 台东县| 台山市| 彭泽县| 吉首市| 海原县| 乡宁县| 庆元县| 松江区| 长岛县| 卢氏县| 章丘市| 定远县| 阿拉善盟| 承德县| 西盟| 顺平县| 策勒县| 宜章县| 讷河市| 奇台县| 蒙山县| 集安市| 聂荣县| 平和县| 彭阳县| 天镇县| 辽中县| 临沂市| 仁寿县| 威信县| 平凉市| 玉龙|