参考:linux公社:http://www.linuxidc.com/Linux/2016-12/137794.htm和鸟哥私房菜
Linux内核(linux kernel),是一种计算机操作系统的内核,由c和汇编语言编写,匹配POSIX标准,以GNC通用公共许可证发布。内核指的是一个提供硬件抽象层、磁盘及文件控制、多任务等功能的系统软件。
内核是操作系统的核心,也是操作系统最基本的部分。Linux内核工作在模块化的方式下并且这些模块可以动态的卸载和装载;所以在很多公司面临不同的实际应用都会编译内核定制相关的内核模块配置相关的内核参数以达到需求并剔除不需要的内核模块。
yum groupinstall Development tools
https://www.kernel.org/
可以看到当前稳定的最新版本为4.13.11
tar -xvf linux-4.13.11.tar.xz -C/usr/src/kernels/
进入文件夹查看
查看内核源代码的次目录
感兴趣可以了解每个目录里是哪些重要数据。
保持源码干净
make mrproper
make clean
查看cpu信息
cat /proc/cpuinfo
lspci
make menuconfig
我使用的是GNOME界面,所以也可以使用make gconfig,还有很多方法,但我们最常用make menuconfig,因为不管是图形界面还是文字模式都可以显示类似图形界面供选择。
发现缺少ncurses,使用yum install ncurses-devel安装即可。
安装完成,再次输入make menuconfig命令,出现如下
使用空格键选择设置,[]<>符合可以选择选项,空为不编译,*为编译进内核,M为编译模块。对于细节,自己可以进行深入理解,此处不再详细描述,后续将解析。
设置完成选择Save
保存到.config文件中
完成后Exit退出
这里我使用的是鸟哥的方法,也可以使用make -j #(#为cpu核心数)或者直接make我也试验过,有效。
make clean #先清除
make bzImage #先编译内核
make modules #再编译模块
编译内核发现缺少文件
使用yum install openssl-devel安装,完成,重新编译
要等一段时间啦!安装完成如下:
编译模块继续等一段时间。编译完成如下:
1)安装模块
make modules_install
make install
出现错误,那就将缺少的安装yum install elfutils-libelf-devel
注意先安装模块再安装内核
注意:我使用的是centos7,原来的grub变为grub2,原来的grub.conf变为了grub.cfg。
原来的内核:
刚刚编译的新内核,可能我使用版本较新,自动添加了进来(好像不需要我们手动添加了):
重启会出现新编译的选择项,选择即可。
uname -a
uname -r
原先的内核:
安装新内核后:
注意:对于装了多系统的电脑,会发现重新启动选项没有变。我的电脑就是,因为装了好几个系统,最后是由ubuntu引导的,所以要进ubuntu系统,使用update-grub2命令将开机启动内核更新即可。