Ubuntu 20.04 内核编译

Ubuntu 20.04 编译内核

此文虽仅在Ubuntu 20.04.04上测试,但于其他版本也有一定参考意义,希望能提供些帮助。

准备工作:

sudo apt-get install libncurses5-dev openssl libssl-dev build-essential openssl pkg-config libc6-dev bison flex libelf-dev zlibc minizip
sudo apt-get install libidn11-dev libidn11 zstd

从 https://kernel.org/下载需要编译的内核源码

准备签名文件

查看当下运行的内核
uname -r

进入内核所在header/certs目录或
cd /usr/src/linux-headers-$(uname -r)/certs

创建 x509.genkey, 内容如下

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
		
[ req_distinguished_name ]
CN = Modules
		
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid

或者

echo -e "[ req ] \n\
default_bits = 4096 \n\
distinguished_name = req_distinguished_name \n\
prompt = no \n\
x509_extensions = myexts \n\

[ req_distinguished_name ] \n\
CN = Modules \n\
\n\
[ myexts ] \n\
basicConstraints=critical,CA:FALSE \n\
keyUsage=digitalSignature \n\
subjectKeyIdentifier=hash \n\
authorityKeyIdentifier=keyid" > x509.genkey

接下来运行

sudo openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem

执行上面的命令后, 应该能得到如下两个文件

test@test:/usr/src/linux-headers-5.13.0-30-generic/certs$ ls
Kconfig  Makefile  signing_key.pem  signing_key.x509  x509.genkey

编辑配置文件

sudo cp /boot/config/config-'uname -r' /path/to/kernel/source/.config
sudo nano /path/to/kernel/source/.config

将CONFIG_SYSTEM_TRUSTED_KEYS=“debian/canonical-certs.pem”
改为 CONFIG_SYSTEM_TRUSTED_KEYS=“”

将CONFIG_SYSTEM_REVOCATION_KEYS=“debian/canonical-revoked-certs.pem”
改为 CONFIG_SYSTEM_REVOCATION_KEYS=“”

将 CONFIG_DEBUG_INFO_BTF=y
改为 CONFIG_DEBUG_INFO_BTF=n

编译内核

sudo make -j8

-j8代表用8核编译,如需不同和数量或更多核数

编译安装组件

sudo make INSTALL_MOD_STRIP=1  modules_install -j8

注:添加 INSTALL_MOD_STRIP=1 为了得到裁剪后的initrd,如下面碰到的问题中描述

安装内核

sudo make install -j8

更新过程中碰到的问题

由于本就是在网上的教程基础上进行,并未碰到过多问题。其中一个问题为更新grub后重启,不能进入OS,卡在 load initial ramdisk。 有几种可能,最大的可能是因为initrd.img文件过大,据说是因为grub能引导的文件需要小于500MB,请查看启动使用的initrd是否大于500M. 这个也是上面步骤中编译内核过程中加入 INSTALL_MOD_STRIP=1 的原因,该参数在编译组件时进行裁剪,将initrd的尺寸缩小。

参考文档
https://blog.csdn.net/weixin_62882080/article/details/124260136
https://superuser.com/questions/1214116/no-openssl-sign-file-signing-key-pem-leads-to-error-while-loading-kernel-modules/1322832#1322832
https://blog.csdn.net/HandsomeHong/article/details/125157372

编译 Ubuntu 20.04 内核的步骤如下: 1. 获取内核源代码 可以从 Ubuntu 的官方网站上下载内核源代码,或使用 Git 从内核源代码仓库中下载。在终端中输入以下命令: ``` sudo apt-get update sudo apt-get install git git clone git://kernel.ubuntu.com/ubuntu/ubuntu-focal.git ``` 2. 安装编译工具 编译 Ubuntu 内核需要安装一些编译工具和依赖项。在终端中输入以下命令: ``` sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev ``` 3. 配置内核 进入 Ubuntu 内核源代码目录并运行以下命令: ``` cd ubuntu-focal cp /boot/config-$(uname -r) .config sudo make oldconfig ``` 在运行 `sudo make oldconfig` 命令时,系统会提示你是否需要更改一些内核配置。如果你不确定,请保持默认设置。 4. 编译内核 在终端中输入以下命令开始编译内核: ``` sudo make -j $(nproc) ``` 这将使用系统上可用的所有处理器核心进行编译编译过程可能需要一些时间,具体时间取决于你的硬件配置和内核大小。 5. 安装内核 编译完成后,可以安装内核。在终端中输入以下命令: ``` sudo make modules_install sudo make install ``` 这将安装编译后的内核和模块。然后你需要更新 GRUB 配置以便引导新内核。在终端中输入以下命令: ``` sudo update-grub ``` 6. 重启系统 内核安装完成后,重启系统以使新内核生效。 ``` sudo reboot ``` 注意:编译和安装内核可能会导致系统出现问题,因此在执行此操作之前,最好进行全面备份。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值