驱动示例详解.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
驱动示例详解

驱动示例详解 在驱动程序的示例代码中,一共有两个文件,整个代码对驱动的框架做了 详细的说明。在驱动程序开发中有三个非常重要的结构体:struct file_operationsstruct filestruct cdev、 、 ,所有的文件相关操作都在struct file_operations,而文件相关的读写信息等文件信息在struct file,struct而 cdev主要就是字符驱动的相关内容 头文件 : #ifndef _MEMDEV_H_ #define _MEMDEV_H_ #ifndef MEMDEV_MAJOR #define MEMDEV_MAJOR 254 /*预设的mem 的主设备号*/ #endif #ifndef MEMDEV_NR_DEVS #define MEMDEV_NR_DEVS 2 /*设备数*/ #endif #ifndef MEMDEV_SIZE# define MEMDEV_SIZE 4096 #endif /*mem 设备描述结构体*/ struct mem_dev { char *data; //地址指针 unsigned long size; //设备的大小 }; //struct mem_dev 这个结构是用于测试的。 #endif /* _MEMDEV_H_ */ .c 文件 #include linux/module.h #include linux/types.h #include linux/fs.h #include linux/errno.h #include linux/mm.h #include linux/sched.h #include linux/init.h #include linux/cdev.h #include asm/io.h #include asm/system.h #include asm/uaccess.h #include memdev.h static mem_major = MEMDEV_MAJOR ; module_param (mem_major, int, S_IRUGO); struct mem_dev *mem_devp ; /*设备结构体指针*/ struct cdev cdev; /*文件打开函数*/ int mem_open (struct inode *inode, struct file *filp) { struct mem_dev *dev; /*获取次设备号*/ int num = MINOR (inode-i_rdev); //inode-i_rdev 中存放了设备号 //这里要注意struct inode,open close read write 等函数的参数是不 一样的 //在struct inode 中存放有该设备的设备号,struct file 中存放有设 备文件相关操作的信息。 if (num = MEMDEV_NR_DEVS) //这里做检测, return -ENODEV ; dev = mem_devp [num]; /*将设备描述结构指针赋值给文件私有数据指针*/ filp-private_data = dev; // 为什么这里要这么操作? //在read write 中的参数没有struct inode,只有struct file ,而设 备号在struct inode, //要获取设备号对应的内存空间,只能在open 中这样操作。 //这里的filp-private_data 与dev 之间的数据类型是一致的吗 / //还是filp-private_data 的数据类型是 // void *类型 return 0; } /*文件释放函数*/ int mem_release (struct inode *inode, struct file *filp) { return 0

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档