免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1894 | 回复: 1
打印 上一主题 下一主题

学习sys系统后的一些感想,不知道对错,请大侠纠正 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-09 10:18 |只看该作者 |倒序浏览
本帖最后由 mihouge 于 2011-12-09 10:19 编辑

实际的在操作系统中,很少有像教科书中那样的驱动。 建立一个 字符设备,初始化,注册, 然后就齐活了。这样的写法很少的。当然,如果仅仅像教科书中,使用alloc_chrdev(),add_chrdev()等函数的话,好像不会和sys文件系统产生什么关系。仅仅在添加了一个字符驱动,要再运行mknod 来建立设备文件进行操作。


但是,在实际中,最底层的驱动,并不是直接与用户进行交互的。 例如:nand,nor上面会有mtd层,serial上面有tty层等。。。。真正开放给用户的是mtd和tty。所以在《驱动设备模型---sys文件系统》文章中的讨论的函数(bus,device,drive,bus_register,device_register....)都是最最底层的驱动。nand,Nor,serial这样的底层驱动用的。


而到mtd,tty层的时候,可能就不会使用(bus,device,drive)等这些结构和函数了。mtd,tty这些层一般会使用最底层驱动提供的接口(读,写),再对其进行一次封装,使其更标准更易用。然后同过class_creat等函数,对/sys/class进行操作,所以/sys/class下的那些文件,才是最后面向用户提供的。

系统boot成功后,udev会check /sys/class还有/sys/block下的每个文件,然后在/dev目录下建立设备文件。

所以说,/sys/device /sys/bus目录都是面向很底层很底层的驱动的。当然可以在用户态通过 观察对/sys/bus下的目录结构来了解很底层的设备,如usb的数量,什么样的flash等。/sys/class 是面向用户的,可以通过/sys/class 查看到鼠标设备,网络等。那么由此可以看出,如果编写很底层的设备的话,那么要做的事,1,调用drive_register,device_register等函数注册,实现probe函数,2,实现对上层子系统的接口。 只需要这两步就可以了,什么主次设备号,什么其他的东西都不用。

当然,如上面例子中,也可以直接编写Nand,Nor的驱动,跳过MTD层,直接让flash的驱动接口开放给用户。那么的话,就需要在flash的驱动中,添加 字符驱动的注册,或者块设备的注册函数等。同时,drive_register,device_register等函数就可以省略了。因为这些函数都是向他上层的子系统来传达信息的。



不知道我理解对不对?希望有人能够指正,尤其是黑色字体的部分。

论坛徽章:
0
2 [报告]
发表于 2011-12-09 23:11 |只看该作者
没人给我指导一下?对待新手这么冷漠???诶。。。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP