创建一个最简单的驱动代码文件demo.c:
#include <linux/init.h>
#include <linux/module.h>
int __init demo_init(void)
{
printk("%s, %s, %d \r\n", __FILE__, __FUNC__, __LINE__);
return 0;
}
void __exit demo_exit(void)
{
printk("%s, %s, %d \r\n", __FILE__, __FUNC__, __LINE__);
}
module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");
- MODULE_LICENSE("GPL") 如果不声明开源协议,编译会报内核污染的警告,因此必须声明,才能使用内核全部功能
创建Makefile (ps:M需要大写):
KERNEL_DIR := /lib/modules/$(shell uname -r)/build
MODULE_DIR := $(shell pwd)
obj-m:=demo.o
all:
make -C $(KERNEL_DIR) M=$(MODULE_DIR) modules
clean:
make -C $(KERNEL_DIR) M=$(MODULE_DIR) clean
- obj-m:编译目标为驱动模块module
- shell uname -r:可取出当前系统kernel的文件夹名
- KERNEL_DIR :用于编译模块的内核路径,这里必须是经过编译的内核,如果是用于嵌入式硬件的驱动,这里应该为嵌入式硬件搭载系统版本的经过编译的内核路径
- MODULE_DIR:当前驱动文件所在路径
ps:本demo可直接用于linux主机测试
make生成目标文件dmeo.ko