内核模块:动态加载或删除不会影响内核正常运行的代码
#include <linux/init.h>
#include <linux/module.h>
static __init int hello_init(void) //__init修饰的函数,执行结束后,函数的内存空间会被释放
{
printk("hello kernel!!!\n");
return 0;
}
static __exit void hello_exit(void) //__exit 标记出口
{
printk("bye kernel!!!\n");
}
moudle_init(hello_init); //模块入口,模块加载时,内核会自动执行module_init修饰的函数
module_exit(hello_exit); //模块出口,模块删除时,内核会自动执行module_exit修饰的函数
MODULE_LICENSE("GPL");
动态编译方法:
将hello.c拷贝到内核源码目录drivers/char,
在drivers/char/Makefile最后一行增加 obj-m += hello.o
编译内核,在drivers/char就会生成hello.ko文件,将hello.ko拷贝到nfs目录(根文件系统目录)
在minicom终端(linux正常启动):
insmod hello.ko //动态加载hello.ko 文件到内核,内核会自动执行module_init修饰的函数
rmmod hello //动态删除hello模块,内核会自动执行module_exit修饰的函数
lsmod 查看被加载的内核模块