linux driver devfs

linux driver devfs

ID:37276710

大小:73.50 KB

页数:13页

时间:2019-05-20

linux driver devfs_第1页
linux driver devfs_第2页
linux driver devfs_第3页
linux driver devfs_第4页
linux driver devfs_第5页
资源描述:

《linux driver devfs》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、如果你曾对Linux2.0版比较熟悉,现在要在内核2.4版下开发驱动程序,那么在了解了2.0到2.2内核API的变化后,还要了解2.2到2.4的变化。1.使用设备文件系统(DevFS)DevFS设备文件系统是Linux2.4一个全新的功能,它主要为了有效的管理/dev目录而开发的。我能知道,Unix/Linux中所有的目录都是层次结构,唯独/dev目录是一维结构(没有子目录),这就直接影响着访问的效率及管理的方便与否。另外,/dev目录下的节点并不是按实际需要创建的,因此,该目录下存在大量实际不用的节点,但一般也不能轻易删除

2、。理想的/dev目录应该是层次的、其规模是可伸缩的。Devfs就是为达到此目的而设计。它在底层改写了用户与设备交互的方式和途径。它会给用户在两方面带来影响。首先,几乎所有的设备名称都做了改变,例如:“/dev/hda”是用户的硬盘,现在可能被定位于“/dev/ide0/...”。这一修改方案增大了设备可用的名字空间,且容许USB类和类似设备的系统集成。其次,不再需要用户自己创建设备节点。DevFS的/dev目录最初是空的,里面特定的文件是在系统启动时、或是加载模块后驱动程序装入时建立的。当模块和驱动程序卸载时,文件就消失了。

3、为保持和旧版本的兼容,可以使用一个用户空间守护程序“devfsd”,以使先前的设备名称能继续使用。目前,Devfs的使用还只是一个实验性选项,由一个编译选项CONFIG_DEVFS_FS加以选择。(1)注册和注销字符设备驱动程序如前所述,一个新的文件系统要加入系统,必须进行注册。那么,一个新的驱动程序要加入系统,也必须进行注册。在下一章我们会看到,我们把设备大体分为字符设备和块设备。字符设备的注册和注销调用register_chrdev()和unregister_chrdev()函数。注册了设备驱动程序以后,驱动程序应该调用

4、devfs_register()登记设备的入口点,所谓设备的入口点就是设备所在的路径名;在注销设备驱动程序之前,应该调用devfs_unregister()取消注册。devfs_register()和devfs_unregister()函数原型为:devfs_handle_tdevfs_register(devfs_handle_tdir,constchar*name,unsignedintflags,unsignedintmajor,unsignedintminor,umode_tmode,void*ops,void*in

5、fo);voiddevfs_unregister(devfs_handle_tde);其中devfs_handle_t表示Devfs的句柄(一个结构类型),每个参数的含义如下:dir:我们要创建的文件所在的Devfs的句柄。NULL意味着这是Devfs的根,即/dev。flags:设备文件系统的标志,缺省值为DEVFS_FL_DEFAULT。major:主设备号,普通文件不需要这一参数。minor:次设备号,普通文件也不需要这一参数mode:缺省的文件模式(包括属性和许可权)。ops:指向file_operations或bl

6、ock_device_operations结构的指针info:任意一个指针,这个指针将被写到file结构的private_data域。例如,如果我们要注册的设备驱动程序叫做DEVICE_NAME,其主设备号为MAJOR_NR,次设备号为MINOR_NR,缺省的文件操作为device_fops:则该设备驱动程序的init_module()函数和cleanup_module()函数如下:intinit_module(void){intret;if((ret=register_chrdev(MAJOR_NR,DEVICE_NAME

7、,&device_fops))==0)returnret;}voidcleanup_module(void){unregister_chrdev(MAJOR_NR,DEVICE_NAME);}对以上代码进行改写以支持设备文件系统(假定设备入口点的名字为DEVICE_ENTRY)#includedevfs_handle_tdevfs_handle;intinit_module(void){intret;if((ret=devfs_register_chrdev(MAJOR_NR

8、,DEVICE_NAME,&device_fops))==0)returnret;devfs_handle=devfs_register(NULL,DEVICE_ENTRY,DEVFS_FL_DEFAULT,MAJOR_NR,MINOR_NR,S_IFCHR

9、S_IRUGO

10、S_IWUSR

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。