免费注册 查看新帖 |

Chinaunix

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

NetBSD系列介绍--设备管理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-19 14:19 |只看该作者 |倒序浏览

                                NetBSD系列介绍--设备管理
1. 设备的初始化
    NetBSD 中设备是以设备之间的总线关系进行管理的,编译的时候根据配置文件生成一个设备树。设备树在编译kernel前执行config命令的时候生成,设备之间的关系在src/sys/arch//config/中描述,比如src/sys/arch/i386/config/GENERIC中就描述了一般i386 PC的设备之间的关系。这些设备中有一个叫mainbus,这个是根节点,i386 PC中mainbus上挂cpubus,pcibus等等,pcibus上又挂usbbus或者某个pci设备,系统初始化的时候会一层一层的扫描这些总线,直到所以设备初始化完毕。
    NetBSD 在 src/sys/kern/init_main.c 中的 main() 中的调用configure()完成设备的初始化,在 configure()中会调用cpu_configure(),这个函数负责完成平台相关的设备初始化,因为不同平台的设备模型可能是不一样的,在cpu_configure()中会找mainbus,找到mainbus后会attach mainbus,然后根据设备树的结构一层一层的初始化设备节点数上的每个设备。调用顺序是               
     main()->configure()->config_init()
                        ->cpu_configure()->config_rootfound("mainbus",)->mainbus_attach()
config_init()负责初始化自动配置相关的数据结构,这些数据结构有config生成,在执行config的时候会在编译目录里生成3个*.c的文件,其中两个devsw.c和ioconf.c, 和设备初始化相关。cpu_configure()会从由config_init()生成的表中查找设备和相应的驱动程序。
在初始华mainbus的时候,在mainbus_attach()中初始化所有设备。
2. 设备的使用
    在根文件系统的/dev/目录下,有很多设备节点,这些设备需要先打开,然后才能读写。通过open()系统调用就能打开这些设备,当执行open()的时候,文件名是一个参数,NetBSD kenel拿到这个文件名之后会把这个文件名转换成一个vnode,在NetBSD中每一个文件,每一个目录都会有一个vnode表示,这相关的内容是文件系统的东西,将在文件系统中介绍。比如/dev/console,如果你的根文件系统是ffs,你要访问这个设备,当你open 这个设备的时候,系统走到kernel里面会转到sys_open(),调用流程是sys_open()->vn_open()->namei()->do_namei()->lookup()->ufs_lookup->ffs_vget()->ufs_vinit()
这个调用流程不是具体的,只是指出一个顺序,具体实现还有认真分析代码。ffs_vget会读出这个inode所在的磁盘的内容,然后在ufs_vinit()中会根据读出来的inode的类型初始化vnode中的v_op指针,如果是设备节点就初始化为specops,这样以后的read/write就转到specfs中去了,specfs的实现在src/sys/miscfs/specfs中。在specfs中,再根据设备号查找相应的设备驱动程序,完成对设备的操作。
3. 关于NetBSD设备管理的一些说明
    NetBSD的设备关系是在编译内核前就指定了的,所以不能动态加载配置中没有的设备驱动,但现在引入了一个叫drvctl的设备,实现在src/sys/kern/kern_drvctl.c,具体是干什么用的,我还不是很清楚,还没有仔细研究,看着像是一种支持动态加载设备的框架。只有实现了vget()的文件系统才能做根文件系统,否则将不能支持设备管理,也就是文件系统必须支持从inode的属性判断该文件的类型,并能保存设备的一些信息,主要是设备号,这样才能查找设备驱动。
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/16553/showart_2031790.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP