环境
光影精灵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:
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
3 kvm: disabled by bios
解决方法:虽然不影响开机,但是在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