#include <linux/init.h>
#include <linux/module.h>
static int hello_init(void)
{
printk(KERN_ALERT"hello world!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT"goodbye world!\n");
}
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
hello_init模块装载时调用
hello_exit模块移除时调用
module_init和module_exit使用了内核的特殊宏;宏MODULE_LICENSE告诉内核该模块采用自由许可证,如果没有这样的声明,内核在装载模块时会出错。
printk和printf类似,最大的不同在于它缺乏对浮点数的支持。
KERN_ALERT定义消息的优先级
测试(ubuntu16.04.7 <内核版本:4.15.0>):
dmesg -c 清除内核驱动打印
insmod hello.ko 装载模块
dmesg 查看打印(hello world!)
rmmod hello 移除模块
dmesg 查看打印(goodbye world!)