第一节、Linux第一个驱动Helloworld
本节用于书写我们的在Linux上的第一个驱动Helloworld
驱动分为四个部分:
- 头文件
- 驱动模块的入口和出口
- 声明信息
- 功能实现
第一步,包含头文件
#include <linux/init.h> //包含宏定义的头文件,包含了module_init,module_exit等
#include <linux/module.h> //包含初始化加载模块的头文件
第二步,驱动模块的入口和出口
module_init();
module_exit();
第三步,声明模块拥有开源许可证
MODULE_LICENSE("GPL")
第四步,功能实现
static int hello_init(void) //函数返回类型是int
{
printk("hello world\n");
return 0;
}
static void hello_exit(void) //函数返回类型是void
{
printk("byb bye\n");
}
注意:内核打印函数不能用printf,因为内核没有办法使用C语言库。
第一步,将模块编译成内核模块的Makefile
obj-m += helloworld.o
KDIR:=/home/zyh/workspace/SOURCE/OK10xx-linux-kernel/
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
第二步,编译驱动
编译驱动之前注意的问题:
- 内核源码一定要先编译通过
- 编译驱动模块用的内核源码一定要和实际使用的镜像是同一套的
- 设置好开发环境,export ARCH和CROSS_COMPILE
加载模块驱动:insmod
查看模块加载列表:lsmod
卸载模块驱动:rmmod