刚接触硬件底层驱动,通过小实例实现对代码编写,模块加载等的基本了解
一、新建hello.c文件
#include <linux/init.h>
#include <linux/module.h>
static int __init hello_init(void) /*模块加载函数,通过insmod命令加载模块时,被自动执行*/
{
printk(KERN_INFO " Hello World !\n");
return 0;
}
static void __exit hello_exit(void) /*模块卸载函数,当通过rmmod命令卸载时,会被自动执行*/
{
printk(KERN_INFO " goodbye World !\n ");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");
二、在该目录下建立Makefile,在编译时自动调用该文件
obj-m :=hello.o //目标文件
#module-objs := file1.o file.o //当模块有多个文件组成时,添加本句
KDIR :=/home/zengyihe/build //内核路径,注意是指内核build路径,不是内核源文件路径
PWD := $(shell pwd) //模块源文件路径
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
@rm -rf *.mod.* //注意,Makefile的开始不要空格,只能是TAB
@rm -rf .*.cmd
@rm -rf *.o
@rm -rf Module.*
clean:
rm -rf *.ko
运行编译:make
对产生的文件:insmod hello.ko 这样便将模块加载到内核中去了,此时可以看到屏幕上打印出
Hello World !
移除模块:rmmod hello 此时显示出
goodbye World !