Linux 驱动编写

驱动程序(Device Driver)全称为“设备驱动程序”,是一种负责操作系统中的设备操作和通信,相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备工作,否则不能正常工作。本博文主要讲解如何编写编译驱动程序、加载驱动模块、移除驱动模块等。

 

前提条件:

安装好Linux环境,这里选用Ubuntu16.04

 

步骤:

1、新建一个用于存放驱动文件的目录

$ mkdir ~/driver
$ cd ~/driver

2、编写hello.c文件

$ nano hello.c

内容如下:

#include <linux/init.h>
#include <linux/module.h>
 
MODULE_LICENSE("Dual BSD/GPL");
 
static int hello_init(void)
{
    printk(KERN_ALERT "hello module!\n");
    return 0;
}
 
static void hello_exit(void)
{
    printk(KERN_ALERT "bye module!\n");
}
 
module_init(hello_init);
module_exit(hello_exit);

 保存退出。

3、编写Makefile(注意:Makefile名称不要随意改变)

$ nano Makefile

内容如下:

obj-m := hello.o
KERNEL_DIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
	make -C $(KERNEL_DIR) SUBDIRS=$(PWD) modules
clean:
	rm *.o *.ko *.mod.c

.PHONY:clean

保存退出。

 ls查看有刚新建好的两个文件

$ ls
hello.c  Makefile

4、编译

输入make命令编译

$ make
make -C /lib/modules/4.4.0-93-generic/build SUBDIRS=/home/hadoop/driver modules
make[1]: Entering directory '/usr/src/linux-headers-4.4.0-93-generic'
  CC [M]  /home/hadoop/driver/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/hadoop/driver/hello.mod.o
  LD [M]  /home/hadoop/driver/hello.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.4.0-93-generic'

再次用ls命令查看,发现编译之后多个6个文件

$ ls
hello.c   hello.mod.c  hello.o   modules.order
hello.ko  hello.mod.o  Makefile  Module.symvers

5、安装模块:

$ sudo insmod hello.ko

  查看信息:

$ dmesg

此时输出了大量的日志,在输入日志的最后一行有

 hello module!

6、移除模块

$ sudo rmmod hello

  再次查看信息:

$ dmesg

 此时输出了大量的日志,在输入日志的最后一行有

  bye module!


可以重复步骤5、步骤6能看到如下信息

重复步骤5,重新加载模块,查看信息如下:

 

重复步骤6,再次移除模块,查看信息如下:

说明:

每次加载模块(insmod),运行一次hello.c的module_init(hello_init)方法;

每次卸载模块(rmmod),运行一次hello.c的module_exit(hello_exit)方法。

 

 

完成!enjoy it!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值