ubuntu 18.04.6 使用内核源码安装内核

前言

内核版本:

随便选择一个内核版本,我选择 5.0 ,官网下载太慢,这里给出个链接:

一、编译内核以及安装

(1)解压内核:

sudo tar -xavf linux-5.0.tar.xz

(2)安装各种依赖,由于我是刚安装的虚拟机,所以需要安装依赖较多(编译内核时根据提示所需要的依赖进行安装,不同的环境可能稍有差异):

sudo apt-get install gcc make libncurses5-dev openssl
sudo apt-get install build-essential 
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev
sudo apt-get install libncurses-dev
sudo apt-get install libssl-dev

(3)配置需要编译的内核 在编译内核之前,拷贝当前内核的配置文件到需要编译的内核目录的.config文件下,即把5.4.0 的内核配置拷贝到 5.0 的内核版本中,直接用当前内核的配置。

cd linux-5.0
sudo cp /boot/config-$(uname -r) .config
vim .config
sudo make menuconfig

打开Kernel的配置程序,可以进行相关的配置,在这里可以选择启用或者禁用一些模块,我在这里没有进行任何修改,直接保存退出。 (4)编译 为了加快编译速度,我给我的虚拟机分配8核,磁盘分配时最好大一些,不然磁盘大小不够,会导致编译失败,不知道速度提升大不,这一步时间很长。

make -j8

在编译的过程出现如下错误(有的可能不会出现如下错误,没出现则不用管):

make[1]: *** No rule to make target debian/canonical-certs.pem, needed by certs/x509_certificate_list.  Stop.
vim .config

将 CONFIG_SYSTEM_TRUSTED_KEYS改为空值,如下所示:

CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"

改为:

CONFIG_SYSTEM_TRUSTED_KEYS=""

编译完成:

我们可以看到编译出来的原始vmlinux和System.map文件。 vmlinux是一个包括linux kernel的静态链接的可执行elf格式的文件,由编译内核源码得到的最原始的内核文件,未压缩,比较大,由于是二进制文件,该文件可以用objdump查看。

System.map是编译内核时产生的一个文件,存放着内核符号表信息。每次编译一次内核,就会产生一个新的System.map文件。符号表时所有内核符号及其对应地址的一个列表,如下图所示:

(5)安装模块 编译完成之后安装模块,位置为 /lib/modules/5.0.0:

sudo make modules_install

执行之前: 执行之后:

(6)安装内核 安装内核到/boot目录,该命令会自动更新grub,在启动时候看到可选的内核了5.0.0了:

sudo make install

根据输出我们可以得知,执行update-grub 命令,更新启动配置

执行之前: 执行之后: (7)重启 有两者方式选择内核启动版本: 第一种:修改 vim /etc/default/grub

vim /etc/default/grub
 sudo update-grub
 reboot

第二种:启动时按shift键,选择 Linux 5.0.0版本启动: 可以看到通过编译内核的方式启动新内核成功:

二、编译内核模块

可以我们的内核源码没有在 /usr/src 目录下: 因此我们可以在编译内核完成后:

sudo mv linux-5.0/ /usr/src/
cd /usr/src/linux-5.0/
sudo make modules_install
sudo make install

总结

使用内核源码安装内核到此结束。

参考资料

经验分享 程序员 微信小程序 职场和发展