Linux设备模型的目的是:为内核建立起一个统一的设备模型,从而有一个对系统结构的一般性抽象描述。

2.6 设备模型提供了这个抽象. 现在它用在内核来支持不同的任务, 包括

电源管理和系统关机:这些需要对系统结构的理解,设备模型使操作系统能以正确顺序遍历系统硬件。

与用户空间的通讯 : sysfs 虚拟文件系统的实现被紧密地捆绑进设备模型, 并且暴露它所代表的结构. 关于系统到用户空间的信息提供和改变操作参数的旋纽正越来越多地通过 sysfs及设备模型来完成.

可热插拔设备:计算机硬件正更多地动态变化; 外设可因用户的一时念头而进出. 在内核中使用的来处理和(特别的)与用户空间关于设备插入和拔出的通讯, 是由设备模型来管理

设备类别:系统的许多部分需要知道什么类型的设备可用. 设备模型包括一个机制来分配设备给类别, 它在一个更高的功能性的级别描述了这些设备, 并且允许它们从用户空间被发现.

对象生命期:设备模型的实现需要创建一系列机制来处理对象的生命周期、对象间的关系和对象在用户空间的表示。 

 

sysfs初探

sysfs is a ram-based filesystem initially based on ramfs. It provides

sysfs 是一个最初基于ramfs的位于内存的文件系统。它提供

a means to export kernel data structures, their attributes, and the

一些方法以导出内核的数据结构、他们的属性和

linkages between them to userspace.

他们与用户空间的连接。

sysfs is tied inherently to the kobject infrastructure. Please read

sysfs 始终与kobject的底层结构紧密相关。请阅读

Documentation/kobject.txt for more information concerning the kobject

Documentation/kobject.txt 文档以获得更多关于 kobject 接口的信息。

interface.

 

可以先把documentation/filesystems/sysfs.txt读一遍。文档这种东西,真正读起来就嫌少了。

Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。

 

/sys看一看,

localhost:/sys#ls /sys/

block/ bus/ class/ devices/ firmware/ kernel/ module/ power/

Block目录:包含所有的块设备

Devices目录:包含系统所有的设备,并根据设备挂接的总线类型组织成层次结构

Bus目录:包含系统中所有的总线类型

Drivers目录:包括内核中所有已注册的设备驱动程序

Class目录:系统中的设备类型(如网卡设备,声卡设备等)

sys下面的目录和文件反映了整台机器的系统状况。比如bus

localhost:/sys/bus#ls

i2c/ ide/ pci/ pci express/ platform/ pnp/ scsi/ serio/ usb/

里面就包含了系统用到的一系列总线,比如pci, ide, scsi, usb等等。比如你可以在usb文件夹中发现你使用的U盘,USB鼠标的信息。

我们要讨论一个文件系统,首先要知道这个文件系统的信息来源在哪里。所谓信息来源是指文件组织存放的地点。比如,我们挂载一个分区,

mount -t vfat /dev/hda2 /mnt/C

我们就知道挂载在/mnt/C下的是一个vfat类型的文件系统,它的信息来源是在第一块硬盘的第2个分区。深圳专业嵌入式实训,郭老师QQ754634522

但是,你可能根本没有去关心过sysfs的挂载过程,她是这样被挂载的。

mount -t sysfs sysfs /sys

看不出她的信息来源在哪。sysfs是一个特殊文件系统,并没有一个实际存放文件的介质。断电后就玩完了。简而言之,sysfs的信息来源是kobject层次结构,读一个sysfs文件,就是动态的从kobject结构提取信息,生成文件。