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

image

image

image

posted on 2017-12-03 22:51  20155225江智宇  阅读(168)  评论(0编辑  收藏  举报