环境

光影精灵3(双系统,efi,windows在固态,ubuntu在机械)

总体流程

大致步骤如:https://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
且看:https://www.yuque.com/go/doc/51082102

遇到的问题

1 pem证书问题

在kernel源码根目录运行以下命令生成certs/mycert.pem:

  1. openssl req -x509 -newkey rsa:4096 -keyout certs/mycert.pem -out certs/mycert.pem -nodes -days 3650

并在.config中将2个pem改成该文件:

CONFIG_MODULE_SIG_KEY="certs/mycert.pem" CONFIG_SYSTEM_TRUSTED_KEYRING=y CONFIG_SYSTEM_TRUSTED_KEYS="certs/mycert.pem" CONFIG_SYSTEM_EXTRA_CERTIFICATE=y CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096 CONFIG_SECONDARY_TRUSTED_KEYRING=y CONFIG_SYSTEM_BLACKLIST_KEYRING=y CONFIG_SYSTEM_BLACKLIST_HASH_LIST=""

这样签名后还是要关闭sercure boot的。

PS:这一步网上的很多教程是把两个pem字段的值清空为””,我的亲身经历是这样做的确能编译了,但是在sudo make modules_install这一阶段会报错,并且导致modules_install根本没进行,即/lib/modules/5.4.73下没modules,从而导致reboot的时候失败。而配置了mycert.pem的情况下,modules_install这一步也要一会时间,完全不像前者那样。我又发现,用了pem成功modules_install后,之前不能启动的内核也启动了,因为moudles是单独在lib/moudles中,命名会覆盖,但是内核镜像会在老的同名镜像后加一个.old。

PS:5.11的有pem,5.13的config没有。5.13好像是apt upgrade的时候装进来的。用这种版本的config编译然后make modules_install得到的/lib/modules/xxx里的东西会少很多,boot的时候也会有错但还是可以登录进来。

2

编译到结束的时候,出现:

BTF: .tmp_vmlinux.btf: pahole (pahole) is not available

解决方法:sudo apt install dwarves

3 kvm: disabled by bios

image.png
解决方法:虽然不影响开机,但是在BIOS开启处理器虚拟化即可。

4 关闭MODULE_SIG

https://www.yuque.com/tyn1998/linux-kernel/hmut0e

编译时间

按照make menuconfig默认参数生成的.config编译,用make -j6差不多编译了50min?(约1h)。
优化方法:
https://www.yuque.com/tyn1998/linux-kernel/zmmxpi