Linu那些事儿之我是Sysfs

Linux那些事儿之我是Sysfs于:blog.csdn/fudan_abcLinux那些事儿之我是Sysfs(1)sysfs初探"sysfsisaram-basedfilesysteminitiallybasedonramfs.Itprovidesameanstoexportkerneldatastructures,theirattributes,andthelinkagesbetweenthemtouserspace.”---documentation/filesystems/sysfs.txt可以先把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#lsi2c/ide/pci/pciexpress/platform/pnp/scsi/serio/usb/里面就包含了系统用到的一系列总线,比如pci,ide,scsi,usb等等。比如你可以在usb文件夹中发现你使用的U盘,USB鼠标的信息。我们要讨论一个文件系统,首先要知道这个文件系统的信息在哪里。所谓信息是指文件组织存放的地点。比如,我们挂载一个分区,mount-tvfat/dev/hda2/mnt/C我们就知道挂载在/mnt/C下的是一个vfat类型的文件系统,它的信息是在第一块硬盘的第2个分区。但是,你可能根本没有去关心过sysfs的挂载过程,她是这样被挂载的。mount-tsysfssysfs/sysms看不出她的信息在哪。sysfs是一个特殊文件系统,并没有一个实际存放文件的介质。断电后就玩完了。简而言之,sysfs的信息是kobject层次结构,读一个sysfs文件,就是动态的从kobject结构提取信息,生成文件。所以,首先,我要先讲一讲sysfs文件系统的信息--kobject层次结构。kobject层次结构就是linux的设备模型。莫愁前路无知己,天下谁人不识君。唐·高适·别董大Linux那些事儿之我是Sysfs(2)linux设备底层模型关于linux设备模型网上有一些论述,有些东西我就用了拿来主义,进行了修改和整理。§1KobjectKobject是Linux2.6引入的新的设备管理机制,在内核中由structkobject表示。通过这个数据结构使所有设备在底层都具有统一的接口,kobject提供基本的对象管理,是构成Linux2.6设备模型的核心结构,它与sysfs文件系统紧密关联,每个在内核中注册的kobject对象都对应于sysfs文件系统中的一个目录。Kobject是组成设备模型的基本结构。类似于C++中的基类,它嵌入于更大的对象的对象中--所谓的容器--用来描述设备模型的组件。如bus,devices,drivers都是典型的容器。这些容器就是通过kobject连接起来了,形成了一个树状结构。这个树状结构就与/sys向对应。kobject结构为一些大的数据结构和子系统提供了基本的对象管理,避免了类似机能的重复实现。这些机能包括-对象引用计数.-维护对象链表(集合).-对象上锁.-在用户空间的表示.Kobject结构定义为:structkobject{char*kname;指向设备名称的指针charname[KOBJNAMELEN];设备名称structkrefkref;对象引用计数structlistheadentry;挂接到所在kset中去的单元structkobject*parent;指向父对象的指针structkset*kset;所属kset的指针structkobjtype*ktype;指向其对象类型描述符的指针structdentry*dentry;sysfs文件系统中与该对象对应的文件节点路径指针};其中的kref域表示该对象引用的计数,内核通过kref实现对象引用计数管理,内核提供两个函数kobject_get()、kobject_put()分别用于增加和减少引用计数,当引用计数为0时,所有该对象使用的资源释放。Ktype域是一个指向kobjtype结构的指针,表示该对象的类型。相关函数voidkobject_init(structkobject*kobj);kobject初始化函数。intkobject_set_name(structkobject*kobj,constchar*format,...);设置指定kobject的名称。structkobject*kobject_get(structkobject*kobj);将kobj对象的引用计数加1,同时返回该对象的指针。voidko...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?