分类: 嵌入式
2012-01-22 02:40:04
第五章:
这一章讲的是文件系统和设备文件系统。开始讲的是对文件操作的系统调用和C库函数,这部分没什么好说的。
接着讲文件系统的目录结构,平常看的多,但这些文件夹分别有什么内容有时候不一定完全记得住。这里大概说说自己平时没注意到的。
/dev存储的是设备文件,应用程序对这些文件的读写和控制就可以访问实际的设备。
/etc系统配置文件的所在地。
/mnt一般是用于存放挂载储存设备的挂载目录。
/opt一般放咱们自己的软件。
/proc操作系统运行时,进程及内核信息存放在这里。/proc目录为伪文件系统proc的挂载目录,proc并不是真正的文件系统,它存在于内存之中。
/var这个目录的存的是经常变动的东西。
/sys Linux2.6内核所支持的sysfs文件系统被映射在此目录。(下面会讲到)
接下来说了Linux文件系统和设备驱动的关系。
(1)file结构体。其实file是一个block的实例。(2)inode结构体。通过这个能找到block。其中有个i_bdev字段,若是块设备,对应block_device结构体指针;还有个i_cdev,若是字符设备,对应cdev结构体指针。新版内核这两个和一个叫i_pipe的字段在一个union里面。i_rdev字段是对应着设备编号,主设备号为高12位,此设备号为低20位。
具体的内容看书吧,亲。
接着说了devfs设备文件系统。过时了就不提了。
咱们谈udev。udev利用热插拔机制,在热插拔时设备的详细信息会输出到sysfs中。udev就是利用sysfs中的信息来进行创建设备文件结点。
好,接下来是设备模型。我们来看device_driver、device和bus_type三种结构体,device和device_driver都包含bus_type指针,因为必须依附同一种总线。 bus_type的match成员函数把前面两者结合在一起。
总线、设备和驱动最终都会落实到sysfs的一个目录。而各个attribute则为文件。attribute结构体定义看书。
下面是udev的工作过程:
(1)当内核检测到在系统中出现了新设备后,内核会在sysfs文件系统中为该新设备生成新的纪录并导出一些设备特定的信息及所发生的事件。
(2)udev获取内核导出的信息,它调用namedev决定设备名称如果是新插入的设备,udev将调用lubsysfs决定应该为该设备的设备文件指定的主/次设备号,并用分析获得的设备名称和主/次设备号创建/dev中的设备文件;如果移除,则删除/dev里面对应的文件。
namedev的规则和udev的规则文件这里就略了。