一、環境
Linux:RedHat 5.4
內核版本 2.6.18 (用命令uname –a 查看)
計劃新內核版本 Linux-3.0.4.tar.bz2 (文件保存在 /usr/src中)
操作用戶:root
二、內核裁剪計劃:
拷貝/boot/config-2.6.18-164.el5 到源代碼目錄並改名為.config,由於內核選項多達上千條,所以用當前內核版本配置文件為藍本,在它的基礎上配置。內核的具體裁減可參考網絡上的其他文章(一定要加入RAM disk support 和initial RAM disk (initrd) support 的支持,要不然等下你的新系統肯定啟動不了)
三、編譯准備
1、解決紅帽的源更新問題,替代方案:使用CentOS的源
cd /usr/src
rpm -qa|grep yum 查看yum包
rpm -qa|grep yum|xargs rpm -e --nodeps 卸載rhel的默認安裝的yum包
wget http://centos.ustc.edu.cn/centos/5/os/i386/CentOS/yum-3.2.22-33.el5.centos.noarch.rpm
wget http://centos.ustc.edu.cn/centos/5/os/i386/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm
wget http://centos.ustc.edu.cn/centos/5/os/i386/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.i386.rpm
rpm -ivh yum-* 同時安裝新的yum
cd /etc/yum.repos.d/
wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo 下載yum的配置源
yum makecache 生成緩存
2、准備相關軟件包
yum install rpmdevtools yum-utils ncurses-devel make rpm-build rpm-devel
yum install ncurses ncurses-devel
3、安裝gcc編譯包
yum -y install gcc
四、源碼編譯安裝
1、解壓源碼
cd /usr/src
tar xvf linux-3.0.4.tar.bz2
2、清除環境變量,即清除配置文件,如果是第一次編譯,可省略該步驟
make mrproper
cd linux-3.0.4
3、定制內核配置:(以下幾種方法任選一種)
make menuconfig | make config | make menuconfig | make xconfig | make gconfig
進入後load舊配置文件,然後再根據自己的需要修改,完後則保存
4、編譯內核
make
5、安裝內核模塊
make modules_install
6、安裝內核(自動方式)
make install
五、收尾工作:
1、清除多余的文件(可略)
make clean
2、重啟系統
reboot 或 shutdown -r now
3、出現啟動畫面時,按 e 方出現啟動菜單
其他一:手動安裝內核方式
make bzImage
cp bzImage /boot/vmlinuz-3.0.4
cp System.map /boot/System.map-3.0.4
mkinitrd /boot/initrd_2.6.30.img 2.6.30
update-grub
其他二:重啟報錯 insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits 解決方法:
1、解壓initrd文件
mkdir /tmp/mylinux
cp /boot/initrd-3.0.4.img /tmp/mylinux/initrd-3.0.4.img.gz
cd /tmp/mylinux
gunzip initrd-3.0.4.img.gz
cpio -id < initrd-3.0.4.img
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
find . | cpio -H newc -o --quiet | gzip -9 > /boot/initrd-3.0.4.img
ps:其實將init文件的第二行setquiet去掉,就知道initrd文件到底在做什麼了