Yuhang Zheng

第一节、Linux第一个驱动Helloworld

N 人看过

本节用于书写我们的在Linux上的第一个驱动Helloworld



驱动分为四个部分:

  1. 头文件
  2. 驱动模块的入口和出口
  3. 声明信息
  4. 功能实现

第一步,包含头文件

#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

第二步,编译驱动

编译驱动之前注意的问题:

  1. 内核源码一定要先编译通过
  2. 编译驱动模块用的内核源码一定要和实际使用的镜像是同一套的
  3. 设置好开发环境,export ARCH和CROSS_COMPILE

加载模块驱动:insmod

查看模块加载列表:lsmod

卸载模块驱动:rmmod