1、使用如下命令安裝安裝編譯前需要的編譯環境。
srv10:~# yum install -y gcc make bison ncurses-devel rpm-build
2、使用如下命令下載內核原碼包。
srv10:~# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.37.tar.bz2
3、使用如下命令解壓內核原碼包。
srv10:~# tar -xvjf linux-2.6.37.tar.bz2 -C /usr/src
4、使用如下命令開始系統的內核編譯,先清掉以前的編譯的內容(初次編譯內核這步也可以省略)。
srv10:~# cd /usr/src/linux-2.6.37
srv10:~# make mrproper
5、使用如下命令復制現有內核編譯的配置文件。
srv10:~# cp /boot/config-`uname -r` .config
6、使用如下命令選擇需要的內容。
srv10:~# make menuconfig
一定要勾選General setup→[*] enable deprecated sysfs features to support old userspace tools和Processor type and features→HighMemory Support。
7、修改.config文件中CONFIG_SYSFS_DEPRECATED_V2,將原本被注釋掉的,CONFIG_SYSFS_DEPRECATED_V2改成CONFIG_SYSFS_DEPRECATED_V2=y。
8、使用如下命令編譯內核。
srv10:~# make bzImage && make modules && make modules_install
srv10:~# make install
9、使用如下命令生成RPM包(生成的RPM包位於/usr/src/RedHat/RPMS/目錄,RPM源碼包位於/usr/src/redhat/SRPMS/目錄)。
srv10:~# make rpm
10、使用rpm -ivh命令安裝上一步生成在/usr/src/redhat/RPMS/目錄下i386(或x86_64)目錄上的kernel的RPM包。
11、使用rpm命令安裝上面生成的RPM包。
12、使用如下命令生成生成initrd文件。
srv10:~# cd /lib/modules
srv10:~# mkinitrd /boot/initrd-2.6.37.img 2.6.37/
在linux-2.6.33以後,如果在升級重啟後會報的錯誤“insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits”,這是 由於initrd裡面的init中加載dm-region-hash.ko這個模塊重復了,因此需要修改生成的initrd文件(不是所有的機器都會出現這個錯),修改的方式如下:
1、解壓initrd。
srv10:~# cp /boot/initrd-2.6.37.img /tmp
srv10:~# cd /tmp/
srv10:~# mkdir newinitrd
srv10:~# cd newinitrd/
srv10:~# zcat ../initrd-2.6.33.img |cpio -i
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。
srv10:~# find .|cpio -c -o > ../initrd
srv10:~# cd ..
srv10:~# gzip -9 < initrd > initrd-2.6.33.img
4、將initrd重新復制到/boot目錄下。
srv10:~# cp initrd-2.6.33.img /boot