实验七——IO设备驱动.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验七——IO设备驱动.ppt

实验七——I/O设备驱动 王兴隆 实验目的 实验原理 实验内容 7.1实验目的 读懂I/O设备驱动代码,理解内核态与用户态的联系 练习使用I/O设备用户态函数接口 7.2实验原理 用户态I/O设备操作函数 字符设备驱动介绍 7.2.1用户态I/O操作函数 open函数 close函数 read函数 write函数 范例7.1 ioctl函数 范例7.2 7.2.2字符设备驱动介绍 linux驱动程序分为两种形式: 直接编译进内核 编译成module形式,需要时手动加载 module驱动的工作流程分为四部分: 用linux提供的命令加载module module初始化 用户操作设备时,调用module提供的各种服务函数 module卸载 module加载 源代码参见MyStrDev.c 使用insmod ./MyStrDev.ko 加载module linux内核调用宏module_init(MyStrDev_init)进行初始化,其中MyStrDev_init是一个函数指针,初始化工作由此函数完成。 module初始化 MyStrDev_init函数功能 分配并注册主设备号和次设备号 初始化代表设备的结构体:MyStrDev_dev* dev 初始化设备在内核中的cdev结构体 struct?cdev?{???????? struct?kobject?kobj;???? //由cdev_init设置 ?????struct?module?*owner;?? //设为THIS_MODULE ?????const?struct?file_operations?*ops; //由cdev_init设置 ?????struct?list_head?list;?????//由cdev_init设置 ????dev_t?dev;????????//由cdev_add设置 ?unsigned?int?count; ?//由cdev_add设置 };? 设备操作 在linux/fs.h定义的结构体file_operations用来存储驱动内核模块对设备进行各种操作的函数的指针。 module卸载 使用rmmod MyStrDev卸载module 内核调用module_exit(MyStrDev_exit)进行卸载,其中MyStrDev_exit是一个函数指针,卸载工作由此函数完成。 7.3 实验内容 阅读MyStrDev.c程序代码,理解程序功能。 编译程序,学会加载和卸载驱动。 编写用户态程序,验证你对程序功能的理解。 实验评价 读懂源程序,了解驱动程序编写的框架 学会加载和卸载驱动 编写用户态测试程序,调用用户态下的open、close、read、write、ioctl函数,验证自己对程序的理解是否正确 实验参考 关于字符驱动程序更详细的介绍请参考/noaming1900/archive/2010/10/20/1856401.html 请将MystrDev.c和Makefile文件放在同一文件夹下 驱动加载和卸载的详细命令请参考cmd.txt 2013年8月 open close read write ioctl 若所有欲核查的权限都通过了检查则返回0 值,表示成功,只要有一个权限被禁止则返回-1。 返回值 参数pathname 指向欲打开的文件路径字符串。下列是参数flags 所能使用的旗标: O_RDONLY 以只读方式打开文件 O_WRONLY 以只写方式打开文件 O_RDWR 以可读写方式打开文件。上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。 O_CREAT 若欲打开的文件不存在则自动建立该文件。 O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。 O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。 函数说明             int open( const char * pathname, int flags); int open( const char * pathname,int flags, mode_t mode); 定义函数   #includesys/types.h #includesys/stat.h #includefcntl.h 表头文件 若文件顺利关闭则返回0,发生错误时返回-1。 返回值 open,fcntl,shutdown,unlink,fclose 相关函数 当使用完文件后若已不再需要则可使用close()关闭该文件,close()会让数据写回磁盘,并释放该文件所占用的资源。参数fd为先前由o

文档评论(0)

magui + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8140007116000003

1亿VIP精品文档

相关文档