原内核版本:linux-2.6.18-53.el5
gcc版本:4.1.2
www.kernel.org下载源码linux-3.12.3.tar.xz到共享文件夹,由于虚拟机没有xz解压工具,下载xz-5.0.3.tar.bz2
——# tar -xf xz-5.0.3.tar.bz2
——# cd xz-5.03
——# ./configure //检查编译环境,选择相应编译安装配置,生成Makefile
——# make
——# make install
——# xz -d linux-3.12.3.tar.xz
——# tar -xf linux-3.12.3.tar
ps:
创建tar.xz文件方法:先tar -cvf xxx.tar xxx/ ,创建xxx.tar文件,然后用xz -z xxx.tar将原压缩文件重压缩为xxx.tar.xz
解压tar.xz文件方法:先tar -d xxx.tar.xz ,生成xxx.tar文件,然后tar解压生成的.tar文件
——# cd linux-3.12.3
——# make distclean
——# make menuconfig
第一次运行时报错:'make menuconfig' requires ncurses libraries. 下载安装ncurses-5.4.tar.gz
第二次运行时报错:your display is too small to run Menuconfig! It must be at least 19 lines by 80 colums.原因是terminal界面太小,
在System -> Preferences -> Screen Resolution将分辨率调大就可以了
第三次运行时成功,由于原红帽系统是32位,所以将[*]64-bit kernel excluded,其他配置没改,直接保存,退出
——# make bzImage
——# make modules
第一次运行时出错:fs/gfs2/rgrp.c:In function 'try_rgrp_unlink':
fs/gfs2/rgrp.c:1648:编译器内部错误,段错误.
将1648行注释掉,结构体定以后,分别赋值:struct gfs2_rbm rbm;
rbm.rgd = rgd;
rbm.bi = rgd ->rd_bits;
rbm.offset = 0; //保存退出,编译成功
——# make modules_install //目的:将编译好的内核模块从内核源代码目录copy到/lib/modules下
——# mkinitrd initrd-3.12.3 3.12.3 //制作初始化磁盘,initrd是一个被压缩过的小型根目录,这个目录中包含了启动阶段中必须的驱动模块,可执行文件和启动脚本。
——# cp arch/x86/boot/bzImage /boot/vmlinuz-3.12.3
——# cp initrd-3.12.3 /boot/
——# vi /etc/grub.conf
复制最后四行,并粘贴到文件末尾,修改title kernel initrd 保存退出。
——# reboot //在加载系统界面按任意键,可以看到新添加的系统,但是运行的时候出错