Linux内核编译
Linux内核编译
首先从kernel.org下载我们需要的内核(比如linux-4.19.275),解压到/usr/src目录下。我在该内核基础上实现了自己的LSM安全模块(mika),修改Kconfig和Makefile,准备编译内核。
tar -xf linux-4.19.275.tar.xz
sudo mv linux-4.19.275 /usr/src/linux-4.19.275
将当前内核的.config复制到新内核目录下
cp /boot/config-5.4.0-144-generic .config
先进入图形化配置界面menuconfig
make menuconfig
进入Security Options后,在MIKA Support处按空格
进入最后的Default里面
选择MIKA作为默认安全模块,空格
退出并保存即可
下面开始编译内核
make bzImage -j8
开始编译各个模块,要很长时间
make modules -j8
安装模块
make modules_install
安装内核
make install
可能出现的问题:
No rule to make target 'debian/canonical-certs.pem'
vim .config
CONFIG_SYSTEM_TRUSTED_KEYS=""
No such file or directory: ../crypto/bio/bss_file.c
Linux安装TPM emulator错误:No such file or directory: ../crypto/bio/bss_file.c_LsCyy_的博客-CSDN博客
make modules时
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c:25:10: fatal error: aux.h: No such file or directory
./include/uapi/linux/netfilter/xt_ecn.h:14:10: fatal error: linux/netfilter/xt_dscp.h: No such file or directory
出现这种问题是因为把内核下载到windows修改后再copy到linux中进行编译,在windows下文件名大小写不同也不允许,导致文件名变化;所以直接在linux下载内核,就能找到这些头文件了
内核安装成功后
cp /usr/src/linux-4.19.275/arch/x86/boot/bzImage /boot/
cp /usr/src/linux-4.19.275/System.map /boot/
mkinitramfs 4.19.275 -o /boot/initrd.img-4.19.275 # 这里不会输出,要等一会才会结束
update-initramfs -c -k 4.19.275
update-grub2
grep menuentry /boot/grub/grub.cfg
可以看到出现了新的内核版本4.19.275
虚拟机默认启动的时候是不显示内核选择界面的,需要修改vim /etc/default/grub
,将GRUB_TIMEOUT_STYLE=hidden注释掉,并修改GRUB_TIMEOUT=20
更新grub并重启
update-grub
reboot
重启时选择4.19.275内核
如果模块实现没错的话可以正常启动,进入后可以看到成功切换了内核
查看日志,发现编写的模块也在运行了