centos 編譯升級內核的方法及問題處理

準備工做:linux

yum install bzip2 libncurses5-dev kernel-package zlib1g-dev gcc make kernel-package wget module-init-tools procps libncurses5-devvim

1,下載內核包linux-2.6.39.3放到/usr/src 目錄下es5

cd /usr/srcspa

tar -xvjf linux-2.6.39.3.tar.bz2 .net

cd linux-2.6.39.3ip

make mrproper   清除環境變量,即清除配置文件ci

make menuconfig 在菜單模式下選擇須要編譯的內核模塊:rem

initrd是舊版本mkinitrd生成的。若是直接編譯可能會出錯get

出現:mount:could not find filesystem/dev/root’的解決方法hash

解決方法就是加入對舊版sysfs路徑的支持,方法以下:

1)、經過make menuconfig選中如下對應的選項

General setup -->

[*] enable deprecated sysfs features to support old userspace tools

2)、修改.config文件

             修改.config文件中CONFIG_SYSFS_DEPRECATED_V2,將本來被註釋掉的

             CONFIG_SYSFS_DEPRECATED_V2 改爲CONFIG_SYSFS_DEPRECATED_V2=y

修改這項是由於舊版的mkinitrd及其nash在內核沒有CONFIG_SYSFS_DEPRECATED_V2參數時默認使用舊版sysfs 徑格式,從而在新內核下沒法正確訪問/sys內的硬盤信息節點。

而後能夠寫一個編譯的腳本 vim  neihe.sh  在中間加入

#! /bin/sh

  make dep

  make clean  確保全部東西均保持最新狀態.

  make -j4 bzImage  生成內核文件

  make modules 編譯模塊

  make modules_install 安裝模塊

  make install  安裝

安裝完成後去 /boot/grub/grub.conf 中把默認啓動內核改成0

這樣啓動的時候可能還會報錯的 做以下修改initrd-2.6.39.3initrd-2.6.39.3.imginitrd-2.6.39.3.imginitrd-2.6.39.3.imginitrd-2.6.39.3.imginitrd-2.6.39.3.imginitrd-2.6.39.3.img

1,解壓initrd文件

[root@localhost ~]# cp /boot/initrd-2.6.39.3.img /tmp

[root@localhost ~]# cd /tmp/

[root@localhost tmp]# ls

initrd-2.6.39.3.img

[root@localhost tmp]# mkdir newinitrd

[root@localhost tmp]# cd newinitrd/

[root@localhost newinitrd]# zcat ../initrd-2.6.39.3.img |cpio -i

11537 blocks

釋放以後看到以下內容

[root@localhost newinitrd]# ls

bin   dev   etc   init   lib   proc   sbin   sys   sysroot

 

2,下邊就是編輯init,刪掉其中重複的四行中的兩行

echo "Loading dm-region-hash.ko module"

insmod /lib/dm-region-hash.ko

echo "Loading dm-region-hash.ko module"

insmod /lib/dm-region-hash.ko

 

3,從新打包initrd

[root@bogon newinitrd]# find .|cpio -c -o > ../initrd-2.6.39.3.img

11538 blocks

[root@bogon newinitrd]# cd ..

[root@bogon tmp]# gzip -9 < initrd-2.6.39.3 > initrd-2.6.39.3.img

[root@bogon tmp]# ls

initrd-2.6.39.3.img              newinitrd

 

好了,initrd.img就是從新打包的initrd了,而後把initrd.img拷貝到/boot,更改grub.conf裏邊的initrd-2.6.39.3.img

這樣「insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists 就不會有了

 

 編譯完成後生成linux deb 包,先dpkg -i裝image,再裝headers 

安裝完成之後再update-grub 進入/boot/grub/menu.lst中選擇啓動的內核項 默認的第一項爲0

ps:在編譯完成內核後開機可能出現 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)的錯誤 在/boot/grub/menu.lst中能夠發現新加的內核多是沒有 initrd   /initrd.img-2.6.37.6 未生成的緣由不明 能夠手動生成 

執行命令 

 mkinitramfs -o /boot/initrd.img-2.6.34.10 2.6.34.10/boot/initrd.img-2.6.34.10是這個啓動加載文件的生成路徑 2.6.34.10 /lib/modules/2.6.34.10)而後update-grub 再啓動新內核就沒有問題了

卸載一個已經安裝的內核包

debian卸載舊內核要先看看有哪些舊的內核,用命令:

   dpkg --get-selections |grep linux

若是你的內核是以kernel開頭的就把上面的linux改爲kernel,以後再用

   dpkg --purge --force-remove-essential linux-image-XXX

相關文章
相關標籤/搜索