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处按空格
image

进入最后的Default里面
image

选择MIKA作为默认安全模块,空格
image

退出并保存即可

下面开始编译内核

make bzImage -j8

image

开始编译各个模块,要很长时间

make modules -j8

image

安装模块

make modules_install

image

安装内核

make install

image

可能出现的问题:

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
image

虚拟机默认启动的时候是不显示内核选择界面的,需要修改vim /etc/default/grub,将GRUB_TIMEOUT_STYLE=hidden注释掉,并修改GRUB_TIMEOUT=20
image

更新grub并重启

update-grub
reboot

重启时选择4.19.275内核
image

image

如果模块实现没错的话可以正常启动,进入后可以看到成功切换了内核
image

查看日志,发现编写的模块也在运行了
image

posted @ 2023-03-09 23:22  Nemuzuki  阅读(239)  评论(0编辑  收藏  举报