- 1、本文档共84页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chropen=0; len=0; cdev_init(chardev,char_ops); if(cdev_add(chardev, dev, 1)0) { printk(KERN_ALERT添加字符设备chardev出错!\n); } return 0; } module_init(char_init); 3.设备打开 在设备打开部分,一般都用于完成一个具体的外围硬件设备,由open函数完成。open函数提供给驱动程序以初始化的能力,从而为以后的操作做准备。在用insmod加载驱动后也有一个初始化动作,但这个初始化是相对于整个Linux内核来说的,或者说是针对整个module在外部的全局意义上的初始化;而open函数的初始化则是相对于设备操作来说的,是属于驱动内部的初始化,比如初始化read操作时的某个变量(如file结构体),或设备、清空buffer等。 设备打开的代码如下: static int char_open(struct inode *inode,struct file *file) { if(chropen==0) { chropen++; } else{ printk(KERN_ALERT添加字符设备chardev已经被打开!\n); return -1; } printk(KERN_ALERT打开字符设备chardev!\n); try_module_get(THIS_MODULE); return 0; } open函数的原型如下(在file_operations结构体中的定义):? int (*open)(struct inode *inode, struct file *filp) ? 在open函数原型中,有inode和filp两个参数,都是外部应用程序在操作设备时通过系统调用传递给驱动module的。于是驱动module就可以通过这两个参数来确定要打开的具体设备了。 4.关闭设备 关闭设备即实现一个打开设备的反操作。关闭设备完成如下任务: 释放open分配的,保存在file-private_data中的所有内容。 在最后一次关闭操作时关闭设备。 关闭设代码如下: static int char_release(struct inode *inode,struct file *file) { chropen--; printk(KERN_ALERT注消字符设备chardev!\n); module_put(THIS_MODULE); return 0; } 5.读写操作 驱动module的file_operations结构体中可以定义很多设备操作服务函数,实现这些函数与系统调用,或者外部应用程序交互,而不管具体的设备操作。下面以read函数为例介绍驱动函数的调用过程。 (1)read实现过程。read函数的原型如下:? ssize_t read(struct file *filp, char __user *buf, size_t count, loff_t *f_pos) read实现过程 (2)write的实现过程。write的函数原型如下: static int char_write(struct file *filp, const char __user *buffer, size_t length, loff_t *offset) static int char_read(struct file *filp, char __user *buffer, size_t length, loff_t *offset) { if(length12) { if(copy_to_user(buffer, hello world!,12)) { printk(KERN_ALERT字符设备chardev读操作出错!\n); return 0; } }else { if(copy_to_user(buffer, hello world!, length)) { printk(KERN_ALERT字符设备chardev读操作出错!\n); return 0; } } printk(KERN_ALERT添加字符设备chardev读操作成功!\n); return 1; } s
您可能关注的文档
- 第7章 图像恢复.pptx
- 第7章 用户数据报协议UDP.ppt
- 第7章 计算机网络基础.ppt
- 第7章 索引和完整性.ppt
- 第7章 输入输出系统.ppt
- 第7章 滚动轴承的互换性.ppt
- 第7章圆和矩形——类与对象.ppt
- 第7章 标准件及常用件.ppt
- 第7章 无形资产与投资性房地产.ppt
- 第7章数字控制技术.ppt
- 副市长在2025年全市水电气网联合报装“一件事”工作推进会上的讲话.docx
- 镇域经济高质量发展工作调度会上的讲话.docx
- 党工委书记在2025年街道“作风转变年”活动推进会上的讲话.docx
- 2024年度民主生活会支委班子对照检查材料(包含2024年支部情况+上年度主题教育整改落实情况+征求意见情况).docx
- 市贯彻落实第三轮省级生态环境保护督察报告整改工作方案.docx
- 在2025年现代服务业开发区项目谋划工作推进会上的讲话发言材料.docx
- 乡镇党委书记在2025年全面从严治党暨党风廉政建设工作会议上的讲话发言材料.docx
- 局长在2025年全市生态环境系统美丽河湖保护与建设工作推进会上的讲话发言材料.docx
- “以讲促学、以学促干、以干促效”在“政策大讲堂”上的动员讲话.docx
- 校党委书记在2025年春学期干部教师大会上的讲话发言材料.docx
文档评论(0)