实验三 Linux驱动程序编写
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.查看代码 drv.c -----驱动程序源代码 drv.h -----驱动程序源代码包含的头文件 drvtest.c---- 应用程序源代码
Linux操作系统
四、实验步骤
3.编译drv驱动,生成drv.o驱动模块程序 4.编译drvtest应用程序 5.下载运行drvtest 6.观察实验结果 输入数字后回车,程序将该值写到驱动 层,然后从驱动层度上来,比较两值是 否相等
•
•
Linux操作系统
3.3 驱动模块动态加载
• 安装驱动
# insmod drv.o drv
• 卸载驱动
#rmmod
• 创建设备文件
mknod /dev/drvtest c major minor
Linux操作系统
四、实验步骤
1.进入工作目录
$cd /home/cvtech/cvtpxa270/examples/drvtest
• 驱动模块动态加载
Linux操作系统
3.1 Linux驱动程序
• Linux下对外设的访问只能通过驱动程序进行
系统内核 系统内核 系统调用 应用程序 设备驱动程序 机器硬件
Linux操作系统
3.1 Linux驱动程序
• 设备类型
字符设备---指存取时没有缓存的设备。 鼠标,键盘,串行口等。 块设备 -----读写都有缓存来支持,块设备必 须能够随机存取。 硬盘软盘设备,CD-ROM等。 网络设备
3.2 驱动程序编写
• 头文件
#include <linux/kernel.h> #include <linux/fs.h> #include <linux/mould.h> ……
Linux操作系统
3.2 驱动程序编写
•
模块初始化
open, read, write , close 结构体
Linux操作系统
3.1 Linux驱动程序 • 驱动的作用
设备初始化和释放 数据传送 (内核- >硬件) 读数据 (硬件- >内核) 读取应用程序传送给设备文件的数据 回送应用程序请求数据 检测和处理设备错误
Linux操作系统
3.2 驱动程序编写
• 设备编号
主设备号 从设备号
Linux操作系统
struct file_operation{ int (*open) (struct……..) int (*write) (struct……..) ….. }
驱动设备工作原理 *每个成员=一个系统调用;一种设备对应一个结构体 *用户进程利用系统调用操作设备,通过设备文件的主 设备号找到相应设备驱动程序,然后读取这个数据结构相 应的函数指针,将控制权交给该函数.这样编写 设备驱动程 序的主要工作就是编写子函数,并填充file_operations的各个 域
Linux操作系统
3.2 驱动程序编写 • 设备操作函数类型
open 设备文件打开调用该函数 release 设备文件关闭调用该函数 read 读设备状态到buffer write 写设备 ioctl 控制I源自文库O设备
Linux操作系统
3.2 驱动程序编写
• 模块退出
模块退出,必须删除设备驱动,并释放 占用的资源。
Linux操作系统
实验三 Linux驱动程序应用
一、实验目的
1、掌握Linux动态加载驱动程序
2、了解基本驱动程序的编写
Linux操作系统
二、实验内容
•
• •
drv驱动程序的加载
编译应用程序drvtest 下载调试应用程序drvtest
Linux操作系统
三、预备知识
• Linux驱动程序
• 驱动程序编写
Linux操作系统
Linux驱动程序编译方式
•
Linux中驱动程序的使用可以按照两种方式编译: • 静态编译进内核 • 编译成模块以供动态加载
由于Linux不支持模块动态加载,而且嵌入式Linux不能够 象桌面Linux那样灵活的使用insmod/rmmod加载卸载设备 驱动程序,因而通常在Linux中将设备驱动程序静态编译进 内核。 但是编译进内核的话,会增加内核的大小,还要改动内核 的源文件,而且不能 动态的卸载,不利于调试,所以推荐 使用模块方式。