前面已经可以把内核编译出来,但是作为技术狗想看到内核是怎么运行的怎么办?
内核很多代码都是C语言写的,那简单,添加2行代码:
include/linux/printk.h
529和530原来的:
#define pr_info(fmt, ...) \
printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
改为:
#define pr_info(fmt, ...) \
printk(KERN_INFO "%s %s "pr_fmt(fmt), __FILE__, __FUNCTION__, ##__VA_ARGS__)
上面这行代码添加主要是在显示日志的时候把当前文件名和函数信息带上,这样容易知道是哪个文件,哪个函数打印的日志,比较容易梳理代码运行的流程。
init/main.c的start_kernel函数添加如下一行:
如果需要编译多次,可以在内核源代码目录/usr/src/linux-6.9建立一个shell脚本,比如我的命名是auto_compile.sh:
make -j8
make -j8 modules_install
make -j8 install
mkinitramfs -o /boot/initrd.img-6.9.0
update-initramfs -c -k 6.9.0
reboot
添加可执行权限后,这样可以一个脚本搞定,非常的舒服,如果一切正常,重启后执行dmesg就可以看到我们添加的代码生效了,如下图第2行所示:
内核执行速度是比较快的,本质上是一个死循环,打印日志的时候不能太多,可以多尝试就会明白。
当前是在虚拟机运行的,如果有条件的话在真实电脑上运行比较有意思,不过真实电脑上主要怕有时候操作系统起不来,虚拟机就不怕,各种快照,重装系统。。。。。