内核源码更新内核(以linux内核4.11.7为例子)linux
1. 内核更新前的工做准备ubuntu
a. 系统:ubuntu16.04的Desktop版本,内核为linux-4.8.0;vim
b. 虚拟机VMware Workstation Pro 12,并安装上述的ubuntu版本系统;ide
c. 配置好相应的ubuntu16.04的基本操做,包括安装vim,nfs等必要包;ui
d. 在http://www.kernel.org上下载最新的内核源码包,本文使用的为当时最新的内核源码包linux-4.11.7.tar.xz。es5
2. 解压内核源码包spa
a. 在ubuntu16.04中的/usr/src中创建目录linux-kernel-4.11:线程
sudo mkdir /usr/src/linux-kernel-4.113d
b. 解压内核源码blog
sudo xz –d linux-4.11.7.tar.xz,获得 linux-4.11.7.tar的tar包;
sudo tar –xvf linux-4.11.7.tar,获得linux-4.11.7解压源码包。
3. 获取内核源码包的相关说明和配置编译内核的最小要求的文档
a. 进入linux-4.11.7目录中,打开README文档说明,查看到相关的文档说明信息
在Documentation/admin-guide/README.rst中,而后打开它
b. 在README.rst文档中,咱们看到了对内核编译的两种方式,其中一种就是使用打
补丁的方式,另一种就是如今咱们在作的,使用源码内核包来进行内核升级(
查看到144行,有教导咱们如何编译内核的方式)
c. 按照上述的文档的方法,咱们在本身的家目录中创建相应的文件夹来进行编译内核
本文使用的是host用户名,创建目录为
sudo mkdir –p /home/host/build/kernel
(这个目录是随本身创建的,可是不能创建在ubuntu和windowns共享的文件目录下,由于有些连接文件是共享目录没法创建的)
4. 获取编译内核的要求说明文档
a. 进入Documentation目录找到Changes这个文件,就是咱们编译内核的环境要求;
b. 打开Documentation/Changes这个文件,获取重要信息;
c. 上述的信息中,第一列表明须要安装的库包,第二列表示第一列库包的最小版本信息,第三列表示查询当前系统这个包的命令,
没有的添加之,版本不够的就升级;
d. 能够在查询以前升级当前系统的信息:
sudo apt-get update 升级当前新安装的包信息;
sudo apt-get upgrade 升级系统附带的最新包
5. 安装编译以前须要安装另一些库文件和lib:
a. sudo apt-get install automake autoconf libtool 进行make和库链接的关键
b. sudo apt-get install libssl-dev 防止出现openssl/ioensslv.h找不到
c. sudo apt-get install libncureses5-dev 防止出现curses.h没有找到
d. sudo apt-get install build-essential 防止出现系统创建build时候出错
6. 进行编译:
a. 按照Documentation/admin-guide/README.rst的所说,第一步先去掉linux-kernel-4.11源码包中的全部.o文件(在文档的112行);
sudo make mrproper
b. 转到141行的内容,按照相应的步骤进行编译;
i. 配置内核,生成.config文件:
sudo make O=/home/host/build/kernel menuconfig
在里面咱们不须要修改任何东西,而后点击Save,而后肯定保存的名字为.config不变,
这样就会在咱们的/home/host/build/kernel/中出现了.config这个配置文件;
ii. 编译内核(这里一次性编译bzImage和modules):
sudo make O=/home/host/build/kernel –j4
其中,-j4表示以4线程的方式进行编译内核,这样会比较快,所以笔者的电脑vmwere配置成2核的,
因此使用4线程的方式编译,节省编译的时间;
iii: 安装内核和模块到现有的内核中:
sudo make O=/home/host/build/kernel modules_install install
其中 modules_install为安装模块,install为安装内核
iv. 到此,若是没有出现任何问题的话,内核的编译就已经完成了。
7. 替换当前系统
a. 找到4.11.07在/lib的位置,并进行mkinitramfs操做:
sudo find /lib -iname "4.11.7",获得路径为:/lib/modules/4.11.7,那么执行
mkinitramfs /lib/modules/4.11.7 /boot/initrd.img-4.5.0
(注意这时候仍是在源码目录中的)
b. 修改启动的grub
安装grub: sudo apt-get install grub2
更改启动: update-grub2
重启系统: reboot
查询内核版本: uname -r