《实验三 Linux驱动程序编写课件.ppt》由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关《实验三 Linux驱动程序编写课件.ppt》文档请在天天文库搜索。
1、实验三 Linux驱动程序应用一、实验目的1、掌握Linux动态加载驱动程序2、了解基本驱动程序的编写drv驱动程序的加载编译应用程序drvtest下载调试应用程序drvtest二、实验内容三、预备知识Linux驱动程序驱动程序编写驱动模块动态加载3.1 Linux驱动程序系统内核应用程序系统调用机器硬件系统内核设备驱动程序Linux下对外设的访问只能通过驱动程序进行3.1 Linux驱动程序设备类型字符设备---指存取时没有缓存的设备。 鼠标,键盘,串行口等。块设备 -----读写都有缓存来支持,块设备必 须能够随机存取。 硬盘软盘设备,CD-ROM等。网络设备3.1 Linux驱动程序驱动的作用设备初始化和释放数据传送 (内核- >硬件) 读数据 (硬件- >内核)读取应用程序传送给设备文件的数据 回送应用程序请求数据检测和处理设备错误3.2 驱动程序编写设备编号主设备号 。
2、从设备号3.2 驱动程序编写头文件#include #include #include ……3.2 驱动程序编写模块初始化open, read, write , close结构体 struct file_operation{ int (*open) (struct……..) int (*write) (struct……..) ….. }驱动设备工作原理 *每个成员=一个系统调用;一种设备对应一个结构体 *用户进程利用系统调用操作设备,通过设备文件的主设备号找到相应设备驱动程序,然后读取这个数据结构相应的函数指针,将控制权交给该函数.这样编写 设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域 3.2 驱动程序编写设备操作函数类型 open 设备文件打开调用该函数 release 设备文件关闭调用该函数 read 读设备状态到buffer write 写设备 。
3、ioctl 控制I/O设备 3.2 驱动程序编写模块退出 模块退出,必须删除设备驱动,并释放占用的资源。Linux驱动程序编译方式Linux中驱动程序的使用可以按照两种方式编译:静态编译进内核编译成模块以供动态加载由于Linux不支持模块动态加载,而且嵌入式Linux不能够象桌面Linux那样灵活的使用insmod/rmmod加载卸载设备驱动程序,因而通常在Linux中将设备驱动程序静态编译进内核。但是编译进内核的话,会增加内核的大小,还要改动内核的源文件,而且不能 动态的卸载,不利于调试,所以推荐使用模块方式。 3.3 驱动模块动态加载安装驱动# insmod drv.o卸载驱动 #rmmod drv创建设备文件 mknod /dev/drvtest c major minor四、实验步骤1.进入工作目录$cd /home/cvtech/cvtpxa270/examples/drvtest2.查看代码drv.c -----驱动程序源代码drv.h -----驱动程序源代码包含的头文件drvtest.c---- 应用程序源代码四、实验步骤3.编译drv驱动,生成drv.o驱动模块程序4.编译drvtest应用程序5.下载运行drvtest6.观察实验结果 输入数字后回车,程序将该值写到驱动层,然后从驱动层度上来,比较两值是否相等。