升級Red Hat 9.0(Kernel 2.4.20-8) 至 Linux Kernel 2.6.15 筆記(最全)

來源:互聯網
上載者:User


Author: Kendiv
整理於: 2006/02/01

***********************************
一、安裝必要工具
***********************************
1. 安裝module-init-tools-3.2.tar.gz
:http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/

安裝方法:
#tar zxvf module-init-tools-3.2.tar.gz
#cd modules-init-tools-3.2
#./configure --prefix=/
#make moveold
#make all install
#./generate-modprobe.conf /etc/modprobe.conf

2. 升級mkinitrd
:我沒有升級mkinitrd,到goole裡搜吧。

說明:
如果你啟動,載入模組沒有給出模組與核心版本不相容的資訊,就不用重新下載mkinitrd程式來編譯模組產生initrd。因為2.6相對於2.4來說,模組不是每個都改動,
如果你使用的模組沒有改動,就什麼都不用做.

具體的:
1)如果你不使用lvm2或使用lvm來做volume management,你就無需下載新版mkinitrd
2)如果你沒有使用2.6中新的模組,或者新的模組已經編譯進核心,就意味著與2.4使用的initrd.img沒有變化,就連initrd.img也無需產生

initrd.img是由bootload載入入記憶體的,ext3編成模組加在initrd中照樣可以啟動,按我的理解,ext3並非要編譯進核心中,但具體實踐中,
如果沒編譯進核心中,會出現類似如下錯誤:
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.
而這可以通過重建initrd.img來解決。所謂在grub.conf中root=LABLE=/必須修改成絕對分區編號,其實也就是因為沒有產生重建initrd.img的問題造成。

如果需要安裝最新的mkinitrd,請注意:新的mkinitrd, 它需要lvm2 和device-mapper
用 rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm 進行安裝

安裝lvm2-2.00.25-1.01.i386.rpm時請用rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm

3. 安裝hotplug工具,如果沒有此工具,則USB滑鼠即使在啟動顯示ok 載入上了也不能用,2.6.15核心可使用hotplug-2004_09_23.tar.gz
:http://www.kernel.org/pub/linux/utils/kernel/hotplug/

安裝方法:
#tar zxvf hotplug-2004_09_23.tar.gz
#cd hotplug-2004_09_23
#make install

4. 下載最新的Kernel原始碼
:http://www.kernel.org/pub/linux/kernel/

***********************************
二、準備Kernel原始碼樹
***********************************
1、下載到tarball包之後,將核心tarball包複製到/usr/src目錄下,假定包在目前的目錄中,運行以下命令:
#cp linux-2.6.0.tar.gz /usr/src

2、轉到/usr/src目錄並解開tarball包,
#cd /usr/src
#tar xvzf linux-2.6.0.tar.gz

預設情況下(使用Intel x86 CPU系列),下面這一步可以省略。
3、將/usr/include/asm、/usr/inlude/linux、/usr/include/scsi連結到/usr/src/linux/include目錄下的對應目錄中。
# cd /usr/include
# rm -Rf asm linux
# ln -s /usr/src/linux/include/asm-i386 asm  (如果你使用其它CPU比如PPC,那就需要串連到相應的目錄)
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi

4、如果你還下載了補丁包,則打上補丁,你也可以運行scripts/patch-kernel指令檔自動打上補丁(準備好補丁包)或 #zcat patch-2.6.0.gz|patch -p1(我偷懶不打補丁的)。

5、修改核心原始碼 (升級2.6就是為了最佳化,乾脆連原始碼也改了吧)
   
    1)修改/usr/src/linux/include/linux/posix_types.h
      設定fd_set支援的最大數量  
      #define __FD_SETSIZE 1024 --->; 65536     
   
    2)修改/usr/src/linux/include/linux/fs.h
      設定最大開啟檔案數量(TCP串連數量)
      #define INR_OPEN 1024 --->; 65536
      #define NR_FILE 8192 --->; 65536
      #define NR_RESERVED_FILES 10 --->; 128
     
    3)修改/usr/src/linux/include/net/tcp.h
      設定TIMEOUT的時間為1秒
      #define TCP_TIMEWAIT_LEN (60*HZ) 60 --->; 1*HZ
      設定在backlog隊列裡的半串連的重試次數,每次都會花相應的時間,本質上 也是減少重試時間
      #define TCP_SYNACK_RETRIES  5 --->; 3

***********************************
三、定製核心
***********************************
配製核心之前請清理原始碼樹,如果還沒有進入/usr/src/linux-2.6.0目錄,請進入此目錄,命令如下:
#make clean
#make mrproper (這步是為確保原代碼目錄下沒有不正確的.o檔案及檔案的相互依賴,剛解開的tarball包不需此步驟)

注: 可以使用make help來查看協助。

然後可以使用以下四個命令來配置核心:
#make gconfig  (需要Gtk開發庫的支援)
#make xconfig  (需要Qt開發庫的支援)
#make config
#make menuconfig (推薦)

配置核心選項
#make menuconfig
基本上保持預設選項就可以了,但是要注意的是必須把ext2和ext3檔案系統支援編進核心,否則升級核心重新啟動是會有錯誤:
Kernel panic: No init found. Try passing init= option to kernel

ext2和ext3檔案系統配置為: (全部選擇)
File systems --->
  <*>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

注意:
   如果你是ext3檔案系統,則在定製核心設定檔時把對Ext3、Ext2檔案的支援直接編譯進核心,否則,等你啟用新核心時機器就會當掉,出錯資訊如下:
      kernel panic : no init found ,try passing init = option to kernel......
  或者是:
      kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
  把對Ext3、Ext2檔案系統的支援直接編譯進核心,可解決此問題,還有把對“Module unloading“選項也選上,否則的話,你在新核心環境下將無法卸載
核心模組(rmmod命令不能用)。

***********************************
四、編譯核心及模組
***********************************
配置完核心後,開始編譯:
#make dep  (編譯2.6核心無需此步驟)

#make -jn (n代表同時編譯的進程,可以加快編譯速度,n由你的配置決定,我的配置用15-25)

注意: 此命令已完成make bzImage及make modules的工作, 產生的bzImage核心檔案在arch/i386/boot目錄中,你的CPU不同核心檔案存放位置也不同

注: 這一步比較耗時,根據機器配置,可能會消耗30分鐘或更長時間。
   
***********************************
五、編譯可載入模組和安裝新核心
***********************************
如果使用者在配置核心時設定了可載入模組,則需要對這些模組進行編譯,以便將來使用insmod命令進行載入。
# make modules -j25
# make modules_install (安裝核心模組到/lib/modules/2.x.x下)
# make install         (完成mkinitrd命令及核心(bzImage)和System.map的拷貝)

完成後,請查看/boot目錄,檔案名稱是有區別的,如是GRUB引導,make install命令已幫你自動修改了引導選項,對於LILO則要手工修改,重寫引導記錄。

***********************************
六、修改相應檔案已適應2.6核心
***********************************
1.核心2.6 的usb 裝置名稱與核心2.4 大不相同。所以我們要改一下哈哈。

在安裝module-init-tools程式包時產生的/etc/modprobe.conf設定檔卻仍然使用usb-ohci這個名字

alias usb-controller usb-ohci
alias usb-controller1 ehci-hcd

因此, 要把它改為:

alias usb-controller ohci-hcd
alias usb-controller1 ehci-hcd

2.需要改一個最重要的檔案/etc/rc.sysconfig 這是一個ln 串連。正真的檔案在/etc/rc.d/裡

#vi /etc/rc.sysinit

把/proc/ksyms 改為如下所示(註:用於配置了HOTPLUG的支援)

KSYMS=/proc/ksyms

改為:

KSYMS=/proc/kallsyms

3.把所有mount -f -t usbdevfs usbdevfs 改為mount -f -t usbfs usbfs 我查看了就二個。

4.建立一個/sys系統這部我也不知道為啥,但你是用預設的/proc/bus/usb 下就提示找不到drivers 檔案。暈死了。
# mkdir /sys

6.修改rc.sysconfig 檔案

在mount -f /proc 下加入
mount -f /sys 這一行

7.# Mount /proc (done here so volume labels can work with fsck)
action $"Mounting proc filesystem: " mount -n -t proc /proc /proc
action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys
加入上面這行

8.修改fstab
#vi /etc/fstab 加入如下
none    /sys  sysfs   defaults  0 0
.

9.修改/etc/init.d/halt 為如下
awk '$2 ~ /^//$|^//proc|^//dev/{next}
改為
awk '$2 ~ /^//$|^//proc|^//sys|^//dev/{next}

10.把needusbstorage=這段改成如下

needusbstorage=
if [ $usb = "1" ]; then
    needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /proc/bus/usb/devices 2>/dev/null`
    LC_ALL=C grep 'hid' /proc/bus/usb/drivers || action $"Initializing USB HID interface: " modprobe hid 2> /dev/null
    action $"Initializing USB keyboard: " modprobe keybdev 2> /dev/null
    action $"Initializing USB mouse: " modprobe mousedev 2> /dev/null
fi

改成如下:
needusbstorage=
if [ $usb = "1" ]; then
    needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/null`
    action $"Initializing USB HID interface: " modprobe usbhid 2> /dev/null
    action $"Initializing USB keyboard: " modprobe usbkbd 2> /dev/null
    action $"Initializing USB mouse: " modprobe usbmouse 2> /dev/null
fi

這些完成就reboot吧! 希望在啟動時全是ok.

補充:
***********************************
七、手動安裝新核心和System.map
***********************************
1、將新核心和System.map檔案拷貝到/boot目錄下
# cp /usr/src/linux-2.6/arch/i386/boot/bzImage  /boot/vmlinuz-2.6.15-10custom
# cp /usr/src/linux-2.6/System.map  /boot/System.map-2.6.15-10custom
# cd /boot
# rm -f System.map   (刪除原來的串連)
# ln -s System.map-2.6.15-10custom  System.map  (重建立立串連)

***********************************
八、配置LILO
***********************************
1.配置/etc/lilo.conf檔案,在該檔案中加入下面幾行:
image=/boot/vmlinuz-2.6.15-10custom
label=linux-custom
initrd=/boot/initrd-2.6.15-10.img
read-only
root=/dev/hda3     (這與你的具體配置有關)
並把default=linux改為default=linux-custom

2.使新配置生效
# /sbin/lilo

***********************************
九、配置grub使用2.6的I/O調度器
***********************************
    設定之前先介紹一下2.6的I/O調度器
        2.6包含的四個I/O調度器分別是No-op I/O scheduler、Anticipatory I/O scheduler、Deadline I/O scheduler與CFQ I/O scheduler。
    在後文中分別簡稱為ns、as、ds與cfq。

        ns是一個簡化的發送器它只作最基本的合并與排序。與案頭系統的關係不是很大,主要用在一些特殊的軟體
    與硬體環境下,這些軟體與硬體一般都擁有自己的調度機制對核心支援的要求很小,這很適合一些嵌入式系統內容。作為案頭使用者我們一般不會選擇它。

        as是當前核心中預設的I/O調度器。它擁有非常好的效能,在2.5中它就相當引人注意。在與2.4核心進行的對比測試中,在2.4中多項以分鐘為單位
    完成的任務,它則是以秒為單位來完成的。正因為如此它成為目前2.6測試版中預設的I/O調度器。但它也存在著弱點,它本身是比較龐大與複雜的,
    在一些特殊的情況下,特別是在資料輸送量大型資料庫系統中它會變的比較緩慢。

        ds就是針對as的缺點進行改善而來的,還處於測試階段,但已經很穩定了。目前表現出的效能幾乎與as一樣好。加之比as更加小巧,
    是相當有前途的調度器,值得一試:)

        cfq為系統內的所有任務分配相同的頻寬,提供一個公平的工作環境,它比較適合案頭環境。事實上在測試中它也有不錯的表現,
    mplayer xmms等多媒體播放器與它配合的相當好,回放平滑幾乎沒有因訪問磁碟而出現的跳幀現象。對於喜歡在Linux下聽音樂看電影的朋友不妨嘗試一下。
   
    好了,下面說說怎麼設定:參數的格式為elevator=調度器名

    修改/boot/grub/grub.conf,在kernel那行後門加入elevator=deadline
   
    例如:kernel /boot/vmlinuz-2.6.10-bk4 ro root=/dev/你的根分區 elevator=deadline

***********************************
使用新核心可能出現的問題及對策
***********************************
1. RedHat使用者rpm命令不能使用,解決辦法:請把變數在全域設定檔中聲明。
這是RPM的一個Bug,特別是對於RH9的使用者,請開啟/etc/profile檔案,命令如下:
#vi /etc/profile (在檔案的末尾加上幾句如下)
if [`uname -r`="2.6.0" ];then
export LD_ASSUME_KERNEL=2.2.5
fi
也就是給系統加上一個全域的環境變數,也可直接鍵入#export LD_ASSUME_KERNEL=2.2.5。

2. 新核心根本起不來,解決方案:重新設定核心(學問挺大),也許還根引導記錄有關(很少了);

3. 新核心模組無法載入,會導致很多問題,比如了防火牆沒法工作了,mount不上光碟片和vfat及ntfs檔案系統,其解決方案:升級module-init-tools軟體包,
   RedHat的使用者可能還要修改/etc/rc.d/rc.sysinit檔案;

                 **************************** 全文完 **************************

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.