此次操作环境为VirtualBox中的centos6.5,编译的内核内核版本为linux-2.6.32.63
1、下载内核
可以在终端输入指令查看自己的内核版本,如果系统不是centos6.5的可以根据自己的内核下一个更高版本的内核源码进行编译安装。
uname -rs
去kernel.org下载所需版本的内核源码
在终端运行
wget https://kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.63.tar.xz
2、准备编译
拷贝内核代码到src目录
cp ./linux-2.6.32.63.tar.xz /usr/src
解压缩代码,.tar.xz格式的代码不能直接用tar解压,要先解压成.tar文件,再用tar进行解压缩
xz -d linux-2.6.32.63.tar.xz
tar -xvf linux-2.6.32.63.tar
3、生成编译所需的配置文件
进入解压后的源码目录内,执行环境清空操作
make distclean/make mrproper/make clean
#make clean 删除大多数的编译生成文件, 但是会保留内核的配置文件.config, 还有足够的编译支持来建立扩展模块
#make mrproper 删除所有的编译生成文件, 还有内核配置文件, 再加上各种备份文件
#make distclean 将configure生成的文件全部删除掉,包括Makefile文件。
#执行make mrproper, 会先执行make clean, 执行make distclean之前, 会先执行make mrproper。
准备配置文件
.config文件——用户选择的配置选项,存放内核配置后的结果
在/boot目录下有个linux系统安装时生成的config-*文件,可以基于该文件进行编译配置
cp /boot/config-* ./.config
4、配置内核选项
#三选一
make defconfig/make config #i386模板/全手工
make oldconfig/make menuconfig/make (x)gconfig #基于.config或者/boot/config-*
make [> /dev/null]
我直接采用/boot目录下的config-*,没有进行手工配置,直接开始编译内核。
5、开始编译内核
编译内核,此过程比较慢,为了加快编译速度,可添加选项-jn,其中n替换为线程数值,一般是cpu核数的两倍
#二选一
make
make -jn all
在此过程中可能会报错说没有某个命令,我就出现了这个问题,把那个命令安装后重新回到第三步即可。
6、安装内核模块内核编译过程中没有报错的话就可进行内核模块的安装,安装内核模块到/lib/modules/2.6.32的目录下
make modules_install
7、安装内核镜像
将编译生成的内核镜像文件拷贝到启动分区目录下
make install
#作用等同于cp -v arch/x86/boot/bzImage /boot/vmlinuz-KernelName
为新内核创建一个initrd(initial RAM disk)
mkinitrd /boot/initramfs-2.6.32.63.img 2.6.32.63
linux初始RAM磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统。linux发行版在内核中只编译了基本的硬件驱动,在安装过程中通过检测系统硬件,生成包含安装系统硬件驱动的initrd。boot loader加载内核和initrd(以文件系统镜像文件形式存在)到内存,执行initrd中的init脚本加载驱动模块,执行完成后开始挂载真正的文件系统,在真正的根文件系统上进行正常启动过程,执行/sbin/init。
8、重启
内核到此编译安装完成,重启后可以在系统的引导界面看到你自己编译的内核。