编译内核
前提:
(1)准备好开发环境
(2) 获取目标主机上硬件设备的相关信息
(3) 获取目标主机系统功能的相关信息
例如:需要启用相应的文件系统
(4) 获取内核源代码包
www.kernel.org
开发环境准备
包组(Centos 7):Development Tools
#yum grouplist 查看包组信息
目标主机硬件设备相关信息:
CPU: #cat /proc/cpuinfo
#lscpu
PCI设备:
lspci (-v|-vv)
lsusb (-v|-vv)
lsblk 块设备
这是在虚拟机上做的实验,可以把cpu设置成4核的,内存设置成2G,这样可以快速的编译:
步骤如下:
1、下载源码文件:linux-4.12.tar ;并解压缩到/root下
#tar xvf linux-4.12.tar
2、安装开发包组
#yum groupinstall “Development Tools”
3、准备文本配置文件,为了省事,直接参考当前的内核配置文件作为要编译的内核模块:
#cd /boot
#cp /boot/config-3.10.0-514.e17.x86_64 /root/linux-4.12/.config
4、配置内核选项,通过菜单的方式,定义内核的选项:
cd /root/linux-4.12
运行 #make menucofig命令时,发现报错,缺ncurses-devel包
#yum install ncurses-devel 安装包
继续运行#make menuconfig,会打开一个Kernel Configuration 配置窗口:如下图
上图中”[ ]“ 里*表示打到核心里,M:是以模块方式打到核心里;空白就表示不设置。
上图中选中General setup ,回车展开如下图:
在下图中输入内核的版本,以及编译者信息,可以自己随便设定:
设置完内核选项后,按TAB建切换<Save> 保存然后推出。
设置好的内核选项,就被保存到了,/root/linux4.12/.config 文件里,可以查看已经设置的内容
5、开始编译,操作如下图:
通过lscpu 命令看到有4个CPU,内核编译支持多线程编译,执行命令:
# make -j 4 && for i in {1..10} ;do echo -e “-a”;sleep 1 ;done
由于编译时间过长,这里编写一个下循环,编译结束时发声,提醒便宜结束。
编译过程发现报错,如下图:
上图中提示缺少openssl工具;缺什么就安装什么:yum -y install openssl-devel
然后继续运行:# make -j 4 && for i in {1..10} ;do echo -e “-a”;sleep 1 ;done
编译过程时间比较长,所以不要急。可以再打开一个终端窗口,cd /root/linux-4.12 下;
wach -n 5 du -sh . 可以每隔5秒统计一下大小,总计大小差不多9个多G.请耐心等待。
6、 当听到发声提醒时,说明第5 步已经完成了。然后执行如下操作:
make modules_install 安装模块。把/root/linux-4.12目录下的大量的内核模块包,复制生成到/lib/modules目下;
会生成一个文件夹如下图:
7、 #make install
安装内核相关文件 :安装bzImage为/boot/vmlinuz-VERSION-RELEASE 生成initramfs文件, 编辑grub2的配置文件
8、重启就可以选择linux-4.12的内核启动加载了。
在编译完成后,那么怎么在已经执行过编译操作的内核源码树做重新编译呢?如下描述:
1、#make clean :清理大多数编译生成的文件,但会保留condig文件等
2、#make mrproper :清理所有编译生成的文件、config及某些备份文件
3、#make distclean : mrproper、patches以及编辑器备份文件
如果编译有错误,或者还想用旧的内核启动,那么怎么删除新的内核呢?
只要把上述编译的每一步骤生成的文件目录删除就可以了;如下操作:
1、rm -rf /lib/modules/4.12.0.1.0-wangkernel/
2、rm -rf /boot/*4.12* 把带有4.12的文件都删了。如下图:
3、删除/boot/grub2/grub.conf文件下生成的配置文件删除了:如下图选中的部分都删除了;
原创文章,作者:shenjialong,如若转载,请注明出处:http://www.178linux.com/80116