- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.2.2 重要数据结构 struct inode结构提供了关于设备文件/dev/driver(假设此设备名为driver)的信息,file结构提供关于被打开的文件信息,主要用于与文件系统对应的设备驱动程序使用。 struct file { mode_t f_mode;/*标识文件是否可读或可写,FMODE_READ或FMODE_WRITE*/ dev_t f_rdev; /* 用于/dev/tty */ off_t f_pos; /* 当前文件位移 */ unsigned short f_flags; /* 文件标志,如O_RDONLY、O_NONBLOCK和O_SYNC */ unsigned short f_count; /* 打开的文件数目 */ unsigned short f_reada; struct inode *f_inode; /*指向inode的结构指针 */ struct file_operations *f_op;/* 文件索引指针 */ }; 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 1.早期版本的字符设备注册 register_chrdev() unregister_chrdev() 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 1.早期版本的字符设备注册 unregister_chrdev() 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 2.设备号相关函数 获取设备号 MAJOR(dev_t dev); /*获得主设备号*/ MINOR(dev_t dev); /*获得次设备号*/ MKDEV(int major, int minor); 设备注册于注销 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 2.设备号相关函数 获取设备号 MAJOR(dev_t dev); /*获得主设备号*/ MINOR(dev_t dev); /*获得次设备号*/ MKDEV(int major, int minor); 设备注册于注销 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 3.新版本设备注册 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 4.打开设备 int (*open) (struct inode *, struct file *); 通常情况下在open函数接口中要完成如下工作: 如果未初始化,则进行初始化。 识别次设备号,如果必要,更新f_op指针。 分配并填写被置于filp-private_data的数据结构。 检查设备特定的错误(诸如设备未就绪或类似的硬件问题)。 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 5.释放设备 释放设备的函数接口是release()。 释放设备时要完成的工作如下: 释放打开设备时系统所分配的内存空间(包括filp-private_data指向的内存空间)。 在最后一次关闭设备(使用close()系统调用)时,才会真正释放设备(执行release()函数)。即在打开计数等于0时的close()系统调用才会真正进行设备的释放操作。 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 6.读写设备 read()和write()函数 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 6.读写设备 copy_to_user()和copy_from_user() 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 7.ioctl 大部分设备除了读写操作,还需要硬件配置和控制(例如,设置串口设备的波特率)等很多其他操作。在字符设备驱动中ioctl函数接口给用户提供对设备的非读写操作机制。 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 8.获取内存 kmalloc()/kfree() kmalloc语法格式: 8.2 字符设备驱动编程 * 8.2.3设备驱动程序主要组成 8.获取内存 kmalloc()/kfree() kfree语法格式: 8.2 字符设备驱动编程 * /* gpio_drv.h */ #ifndef FS2410_GPIO_SET_H #define FS2410_GPIO_SET_H #include linux/ioctl.h #define GPIO_DEVICE_NAME gpio #define GPIO_DEVICE_FILENAME /dev/gpio #define LED_NUM 4 #define GPIO_IOCTL_MAGIC G #de
您可能关注的文档
- 局域网组建与维护项目五网络服务器配置与管理.ppt
- 局域网组建与维护项目一初识局域网.ppt
- 局域网组网技术1-懂一点网络基础知识.ppt
- 局域网组网技术2-熟悉局域网体系结构.ppt
- 局域网组网技术3-掌握以太网基础知识.ppt
- 局域网组网技术4-精通TCP-IP协议.ppt
- 局域网组网技术5-构建二层交换网络.ppt
- 局域网组网技术6-扩展交换网络范围.ppt
- 局域网组网技术7-构建三层交换网络.ppt
- 局域网组网技术8-网络出口路由技术.ppt
- 嵌入式Linux应用开发教程第二章嵌入式linux C语言开发工具.ppt
- 嵌入式Linux应用开发教程第九章 Qt图形编程.ppt
- 嵌入式Linux应用开发教程第六章 嵌入式Linux多任务编程.ppt
- 嵌入式Linux应用开发教程第七章 嵌入式Linux网络编程.ppt
- 嵌入式Linux应用开发教程第三章 嵌入式LinuxC基础.ppt
- 嵌入式Linux应用开发教程第十章综合实例 - 视频监控系统.ppt
- 嵌入式Linux应用开发教程第五章 嵌入式文件IO编程.ppt
- 嵌入式Linux应用开发教程第一章嵌入式系统基础.ppt
- 嵌入式操作系统第1章 Linux 操作系统简介.ppt
- 嵌入式操作系统第2章 Linux操作系统使用.ppt
文档评论(0)