内核的开发很多情况下需要确认一下里面的一些函数或变量,或是你自己追加了的函数要运行确认一下。
这里说的是一个思路,即结合 QEMU 来做快速的确认。
首先要搭一个QEMU的环境,这个自找教程。
另外就是直接编译一个对应的内核模块。
很简单的 Makefile 和 C 文件。
Makefile:
KBUILD := /path/to/kernel
obj-m := helloworld.o
all:
make -C $(KBUILD) M=$(PWD) modules
clean:
make -C $(KBUILD) M=$(PWD) clean
helloworld.c:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/delay.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
dump_stack();
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
这里就是测试 dump_stack() 这个函数。
编译后的二进制直接放在 QEMU 对应的 rootfs 后启动 QEMU 加载对应的 helloworld.ko 就可以了。