2017-2018-1 20155225 实验四 外设驱动程序设计
《嵌入式Linux应用程序开发标准教程》第十一章学习
Lsmod列出当前系统加载的模块
Rmmod卸载当前模块
Insmod/modprobe加载当前模块
Linux系统的设备分为3类:字符设备、块设备和网络设备
设备号是设备的标志,一个设备文件(设备节点)可以通过mknod命令创建,其中指定了主设备号(标明设备的类型,与一个确定的驱动程序对应)和次设备号(标明不同的属性)
设备驱动程序位内核提供了一个I/O接口。
字符设备驱动编程:
程序入口:init_module()函数,在该函数中完成对设备的注册
模块卸载的入口函数cleanup_module()。
设备驱动程序主要组成:
(1) 早期版本的字符设备注册
(2) 设备号相关函数
(3) 最新版本的字符设备注册
(4) 打开设备
(5) 释放设备
(6) 读写设备
(7) Ioctl函数,提供配置和控制等非读写操作机制
(8) 获取内存,以字节或页面为单位
(9) 打印信息
/proc是一个伪文件系统,是内核和内核模块用来向进程发送信息的机制。
块设备驱动编程,包括一个request请求队列,设备驱动描述符和块设备驱动的编写流程。
中断编程,以编写完整的按键驱动程序为例。
test试验
在虚拟设备驱动源码目录下编译并加载驱动模块。
make clean;make
./test_drv_load
编译并运行测试程序
gcc –o test test.c
./test
卸载驱动程序
./test_drv_unload
通过 dmesg 命令可以查看内核打印的信息
dmesg|tail –n 10
……
The major of the test device is 250
This is open operation
This is release operation
Test device uninstalled