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
总结
使用内核源码安装内核到此结束。