前提:
(1)打算好开发环境
(2)获取目标主机上硬件设备的相关信息
(3)获取目标主机系统功能的相关信息
比如:须要启用相应的文件系统
(4)获取内核源代码包
开发环境打算
包组(Centos7):DevelopmentTools
#yumgrouplist查看包组信息
目标主机硬件设备相关信息:
CPU:#cat/proc/cpuinfo
#lscpu
PCI设备:
lspci(-v|-vv)
lsusb(-v|-vv)
lsblk块设备
这是在虚拟机上做的实验,可以把cpu设置成4核的,显存设置成2G,这样可以快速的编译:
步骤如下:
1、下载源码文件:linux-4.12.tar;并解压缩到/root下
#tarxvflinux-4.12.tar
2、安装开发包组
#yumgroupinstall“DevelopmentTools”
3、准备文本配置文件,为了省事linux 编译内核,直接参考当前的内核配置文件作为要编译的内核模块:
#cd/boot
#cp/boot/config-3.10.0-514.e17.x86_64/root/linux-4.12/.config
4、配置内核选项,通过菜单的形式,定义内核的选项:
cd/root/linux-4.12
运行#makemenucofig命令时,发觉报错,缺ncurses-devel包
#yuminstallncurses-devel安装包
继续运行#makemenuconfig,会打开一个KernelConfiguration配置窗口:如右图
上图中”[]“里*表示打到核心里,M:是以模块形式打到核心里;空白就表示不设置。
上图中选中Generalsetup,回车展开如右图:
在右图中输入内核的版本,以及编译者信息linux 编译内核,可以自己随意设定:
设置完内核选项后,按TAB建切换保存之后推出。
设置好的内核选项,就被保存到了,/root/linux4.12/.config文件里,可以查看早已设置的内容
5、开始编译,操作如右图:
通过lscpu命令听到有4个CPU,内核编译支持多线程编译,执行命令:
#make-j4&&foriin{1..10};doecho-e“-a”;sleep1;done
因为编译时间过长redflag linux,这儿编撰一个下循环,编译结束时发声,提醒实惠结束。
编译过程发觉报错,如右图:
上图中提示缺乏openssl工具;缺哪些就安装哪些:yum-yinstallopenssl-devel
之后继续运行:#make-j4&&foriin{1..10};doecho-e“-a”;sleep1;done
编译过程时间比较长,所以不要急。可以再打开一个终端窗口,cd/root/linux-4.12下;
wach-n5du-sh.可以每隔5秒统计一下大小,总计大小差不多9个多G.请耐心等待。
6、当看到发声提醒时,说明第5步早已完成了。之后执行如下操作:
makemodules_install安装模块。把/root/linux-4.12目录下的大量的内核模块包,复制生成到/lib/modules目下;
会生成一个文件夹如右图:
7、#makeinstall
安装内核相关文件:安装bzImage为/boot/vmlinuz-VERSION-RELEASE生成initramfs文件,编辑grub2的配置文件
8、重启就可以选择linux-4.12的内核启动加载了。
在编译完成后,这么如何在早已执行过编译操作的内核源码树做重新编译呢?如下描述:
1、#makeclean:清除大多数编译生成的文件,但会保留condig文件等
2、#makemrproper:清除所有编译生成的文件、config及个别备份文件
3、#makedistclean:mrproper、patches以及编辑器备份文件
假如编译有错误,或则还想用旧的内核启动linux 输入法,这么如何删掉新的内核呢?
只要把上述编译的每一步骤生成的文件目录删掉就可以了;如下操作:
1、rm-rf/lib/modules/4.12.0.1.0-wangkernel/
2、rm-rf/boot/*4.12*把带有4.12的文件都删了。如右图:
3、删除/boot/grub2/grub.conf文件下生成的配置文件删掉了:如右图选中的部份都删掉了;