linu driver devfs分析和总结最新分析和总结.docxVIP

linu driver devfs分析和总结最新分析和总结.docx

  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文档。上传文档
查看更多
如果你曾对 Linux2.0 版比较熟悉,现在要在内核 2.4 版下开发驱动程序,那么在了解了 2.0 到 2.2 内核 API 的变化后,还要了解 2.2 到 2.4 的变化。 1. 使用设备文件系统(DevFS) DevFS 设备文件系统是 Linux 2.4 一个全新的功能,它主要为了有效的管理/ dev 目录而开发的。我能知道,Unix/Linux 中所有的目录都是层次结构,唯独/ dev 目录是一维结构(没有子目录),这就直接影响着访问的效率及管理的方便与否。另外,/dev 目录下的节点并不是按实际需要创建的,因此,该目录下存在大量实际不用的节点,但一般也不能轻易删除。 理想的/dev 目录应该是层次的、其规模是可伸缩的。Devfs 就是为达到此目的而设计。它在底层改写了用户与设备交互的方式和途径。它会给用户在两方面带来影响。首先,几乎所有的设备名称都做了改变,例如:“/dev/hda”是用户的硬盘,现在可能被定位于“/dev/ide0/...”。这一修改方案增大了设备可用的名字空间,且容许 USB 类和类似设备的系统集成。其次,不再需要用户自己创建设备节点。DevFS 的 /dev 目录最初是空的,里面特定的文件是在系统启动时、或是加载模块后驱动程序装入时建立的。当模块和驱动程序卸载时,文件就消失了。为保持和旧版本的兼容,可以使用一个用户空间守护程序“devfsd”, 以使先前的设备名称能继续使用。目前,Devfs 的使用还只是一个实验性选项, 由一个编译选项 CONFIG_DEVFS_FS 加以选择。 (1)注册和注销字符设备驱动程序 如前所述,一个新的文件系统要加入系统,必须进行注册。那么,一个新的驱动程序要加入系统,也必须进行注册。在下一章我们会看到,我们把设备大体分为字符设备和块设备。字符设备的注册和注销调用 register_chrdev()和 u nregister_chrdev()函数。注册了设备驱动程序以后,驱动程序应该调用 devfs _register()登记设备的入口点,所谓设备的入口点就是设备所在的路径名;在注销设备驱动程序之前,应该调用 devfs_unregister()取消注册。 devfs_register()和 devfs_unregister() 函数原型为: devfs_handle_t devfs_register(devfs_handle_t dir, const char *nam e, unsigned int flags, unsigned int major, unsigned int minor, umode_t mode, void *ops, void *info); void devfs_unregister(devfs_handle_t de); 其中 devfs_handle_t 表示 Devfs 的句柄(一个结构类型),每个参数的含义如下: dir : 我们要创建的文件所在的Devfs 的句柄。NULL 意味着这是Devfs 的根, 即 /dev。 flags :设备文件系统的标志,缺省值为 DEVFS_FL_DEFAULT。major : 主设备号,普通文件不需要这一参数。 minor : 次设备号, 普通文件也不需要这一参数 mode : 缺省的文件模式(包括属性和许可权)。 ops : 指向 file_operations 或 block_device_operations 结构的指针 info : 任意一个指针,这个指针将被写到 file 结构的 private_data 域。 例如,如果我们要注册的设备驱动程序叫做DEVICE_NAME,其主设备号为MA JOR_NR,次设备号为 MINOR_NR,缺省的文件操作为 device_fops:则该设备驱动程序的 init_module()函数和 cleanup_module()函数如下: int init_module(void) { int ret; if ((ret = register_chrdev(MAJOR_NR, DEVICE_NAME, device_fop s)) == 0) return ret; } void cleanup_module(void) { unregister_chrdev(MAJOR_NR, DEVICE_NAME); } 对以上代码进行改写以支持设备文件系统(假定设备入口点的名字为 DEVIC E_ENTRY) #include linux/devfs_fs_kernel.h devfs_handle_t devfs_handle; int init_module(void) { int ret; if ((ret = devfs_register_chr

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

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

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档