Bootstrap

Ubuntu20.04 编译替换kernel内核记录

1.下载kernel sorce code,从kernel.org上下载或在直接用git clone,或者在国内mirror上(Index of /kernel/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)下载镜像。

2.为了方便,用su切换到root权限,代码放在/usr/src/目录下,解压代码。安装依赖库:

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

3.配置config:

        a. 打开源码路径:cd /usr/src/linux-xxxx

        b. cp /boot/config-xxxxx .config

        c. make menuconfig-->load-->save

4. 编译内核:make -jN;

注意:这里可能会遇到因为key而编译不过的问题,可以删除下边的两个key值:

CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"

修改为:

CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""

5. 编译模块:make modules -j N //N是根据CPU 核数确定,可以加快执行过程。

6.安装模块:

make INSTALL_MOD_STRIP=1 modules_install -j 8

这里的INSTALL_MOD_STRIP=1一定要加上,否则会有initrd.img-xxx文件太大的问题,导致开机一直卡在加载映像到磁盘,无法开机。

7.安装内核:make install

检查以下/boot/initrd.img-xxx大小是否太大,正常一般不超过100M,如果太大就执行步骤6的命令,然后在执行:

mkinitramfs /lib/modules/5.17.xxxx/ -o /boot/initrd.img-5.17xxx

8. 更新grub:update-grub2,注意这里grub会默认选择最新版本的内核,如果更新内核后需要切换到旧版本的内核,需要在启动的过程中选择ubuntu高级选项里边选择之前的版本,如果开机不显示ubuntu高级选项,可以修改/etc/default/grub文件:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0 
# GRUB_TIMEOUT_STYLE=hidden ==》增加#,mark掉这一行
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5  ==》修改为5秒

9. 重启电脑,使用uname -a 查看是否替换成功。

;