一个最简单的Linux内核模块(代码实例)
程序员文章站
2022-04-12 22:41:58
#include #include static int __init hello_init(void){ printk(KERN_INFO "Hello World enter\n"); return 0;}static void __exit hello_exit(){ printk(KERN_INFO "Hello World exit\n");}module_init(....
#include <linux/init.h>
#include <linux/module.h>
static int __init hello_init(void)
{
printk(KERN_INFO "Hello World enter\n");
return 0;
}
static void __exit hello_exit()
{
printk(KERN_INFO "Hello World exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
这个最简单的内核模块只包含内核模块加载函数、卸载函数和许可权限的声明。
下面需要编写对应的Makefile文件,生成对应的.ko文件
KERN_DIR = /home/fitz/home/kernel/linux-2.6.22.6
all:
make -C $(KERN_DIR) M=`pwd` modules
clean:
make -C $(KERN_DIR) M=`pwd` modules clean
rm -rf modules.order
obj-m += hello.o
/home/fitz/home/kernel/linux-2.6.22.6是对应linux内核的路径,需要注意的是,这里的内核必须成功经过编译。
输入make命令即可生成对应的.ko文件
将hello.ko文件上传到单板系统,输入
insmod hello.ko加载模块,rmmod hello.ko卸载模块,可以看到对应的打印。
内核模块中用于输出的函数是内核空间的printk()而非用户空间的printf(),printk()的用法和printf()的用法基本相似,前者可定义输出级别。printk()可作为一种最基本的内核调试手段。
本文地址:https://blog.csdn.net/Tony_Stack/article/details/107802546