`
mmdev
  • 浏览: 12880608 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

使用 /sys 文件系统访问 Linux 内核

 
阅读更多
原文链接:http://www.bitscn.com/os/linux/200904/158631.html

  sysfs 是 Linux 内核中设计较新的一种虚拟的基于内存的文件系统,它的作用与 proc 有些类似,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。相比于 proc 文件系统,使用 sysfs 导出内核数据的方式更为统一,并且组织的方式更好,它的设计从 proc 中吸取了很多教训。本文就 sysfs 的挂载点 /sys 目录结构、其与 Linux 统一设备模型的关系、常见属性文件的用法等方面对 sysfs 作入门介绍,并且就内核编程方面,以具体的例子来展示如何添加 sysfs 支持。

sysfs 的历史,其与 proc 的关系?
sysfs 本身并不是一项很新的技术,但笔者发现,虽然 sysfs 从2003年诞生至今已有5年,但人们对 sysfs 依然缺乏了解;一个很重要的原因可能是缺乏文档, Linux 内核方面最重要的理论书籍“Linux 设备驱动第3版”和“理解 Linux 内核第2版”都诞生于2003年前后,并且从那以后尚未有再版过,其它一些重要文章则多对 sysfs 与 proc 相提并论且举例常常只有 proc,这导致了 sysfs 的很多重要概念至今仍鲜为人知,因此有必要对 sysfs 作更多介绍,这是写作本文的初衷。


sysfs 与 /sys

sysfs 文件系统总是被挂载在 /sys 挂载点上。虽然在较早期的2.6内核系统上并没有规定 sysfs 的标准挂载位置,可以把 sysfs 挂载在任何位置,但较近的2.6内核修正了这一规则,要求 sysfs 总是挂载在 /sys 目录上;针对以前的 sysfs 挂载位置不固定或没有标准被挂载,有些程序从 /proc/mounts 中解析出 sysfs 是否被挂载以及具体的挂载点,这个步骤现在已经不需要了。请参考附录给出的 sysfs-rules.txt 文件链接。

sysfs 与 proc

sysfs 与 proc 相比有很多优点,最重要的莫过于设计上的清晰。一个 proc 虚拟文件可能有内部格式,如 /proc/scsi/scsi ,它是可读可写的,(其文件权限被错误地标记为了 0444 !,这是内核的一个BUG),并且读写格式不一样,代表不同的操作,应用程序中读到了这个文件的内容一般还需要进行字符串解析,而在写入时需要先用字符串格式化按指定的格式写入字符串进行操作;相比而言, sysfs 的设计原则是一个属性文件只做一件事情, sysfs 属性文件一般只有一个值,直接读取或写入。整个 /proc/scsi 目录在2.6内核中已被标记为过时(LEGACY),它的功能已经被相应的 /sys 属性文件所完全取代。新设计的内核机制应该尽量使用 sysfs 机制,而将 proc 保留给纯净的“进程文件系统”。

初识 /sys

清单 1. 与 /sys 文件系统的一次交互(视内核版本号和外接设备的不同,在您的系统上执行这些命令的结果可能与此有所不同)

ls -F /sys
block/ bus/ class/ dev/ devices/ firmware/ fs/ kernel/ module/ power/
$ ls -F /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/
broken_parity_status enable modalias resource0 rom uevent
class irq msi_bus resource0_wc subsystem@ vendor
config local_cpulist power/ resource1 subsystem_device
device local_cpus resource resource2 subsystem_vendor


这是在 Fedora 10 的 2.6.27.5-117.fc10.i686 的内核上,可以看到在 /sys 目录下有 block, bus, class, dev, devices, firmware, fs, kernel, module, power 这些子目录,本文将分别介绍这些目录存在的含义。

第二个 ls 命令展示了在一个 pci 设备目录下的文件, "ls" 命令的 "-F" 命令为所列出的每个文件使用后缀来显示文件的类型,后缀 "/" 表示列出的是目录,后缀 "@" 表示列出的是符号链接文件。可以看到第二个目录下包含有普通文件 (regular file) 和符号链接文件 (symbolic link file) ,本文也将以这个具体的设备为例说明其中每一个普通文件的用途。


文章转载自网管网:http://www.bitscn.com/os/linux/200904/158631.html


分享到:
评论

相关推荐

    AccessControl-5.3-cp39-cp39-manylinux_2_5_i686.whl.zip

    AccessControl-5.3-cp39-cp39-manylinux_2_5_i686.whl.zip

    AccessControl-6.1-cp39-cp39-manylinux_2_5_x86_64.whl.zip

    AccessControl-6.1-cp39-cp39-manylinux_2_5_x86_64.whl.zip

    基于S128单片机智能赛车的设计

    本文的目的是实现基于单片机智能赛车的设计,它是一种以规定的汽 车模型为载体,采用位微控制器为核心控制模块,通过自主设计电源电路,电 机驱动电路、道路光电传感器电路,硬件部分合理布局,同时编写配套程序,使其能够自 主识别路径的模型车。比赛时它能在规定赛道上,以最短时间跑完全程,且取得较好成绩, 论文整体包括:绪论,系统总体方案设计,车模机械部分设计改造,硬件电路部分设计制 作,软件部分设计,系统调试六章内容。 本文简单介绍了国内外智能车的发展概况,“飞思卡尔杯”智能车大赛起源以及我国 “飞思卡尔”杯全国智能车竞赛盛况。详细地阐述了该款智能赛车软硬件设计、制作、调试 的具体方法和过程。并对转向舵机,直流电机调速信号的控制做了一些研究。 主控模块,作为整个智能汽车的“大脑”,光电传感器、光电编码器 等传感器的信号,根据控制算法做出控制决策,驱动直流电机和伺服电机完成对智能汽车 的控制。传感器模块,是智能汽车的“眼睛”,可以通过一定的前瞻性,提前感知前方的 赛道信息,为智能汽车的“大脑”做出决策提供必要的依据和充足的反应时间。总之,电 源模块,为整个系统提供合适而又充足的能源。电机驱动模块,驱

    AX3_Mercadopago-0.3.6-py3-none-any.whl.zip

    AX3_Mercadopago-0.3.6-py3-none-any.whl.zip

    RealChar原生版本

    数字人对话源码原生版本,为了更好地阅读源码可参考此版本,具体源码解析文章见:https://blog.csdn.net/eaglewood2005/article/details/137786309

    Acquisition-4.11-cp38-cp38-manylinux_2_17_aarch64.whl.zip

    Acquisition-4.11-cp38-cp38-manylinux_2_17_aarch64.whl.zip

    2024年Java高工面试题 2024年Java高工面试题 2024年Java高工面试题

    2024年Java高工面试题 JVM虚拟机:堆、方法区(元空间)、栈(线程)、本地方法栈、程序计数器 栈帧:局部变理表、操作数栈、动态链接、方法出口 对象组成:对象头(Mark Word、KlassPointer类型指针、数组长度)、实例数据、对齐填充(8个字节)CMS:初始标记、并发标记、重新标记、并发清理、并发重置 G1:初始标记、并发标记、最终标记、筛选回收1、spring是一个快速开发框架,帮助程序员来管理对象 2、设计模式的应用、并发安全的实现、面向接口的设计等 3、在创建Spring容器,也就是启动Spring时: (1)首先会进行扫描得到所有的Bean Definition对象,并存在一个MAP中 (2)然后筛选出非懒加载的单例Bean Definition 对象进行创建Bean,多实例的Bean会在每次获取Bean时利用Bean Definition去创建 (3)利用Bean definition创建Bean就是Bean的创建生命周期,包括:合并Bean Definition 推断构造方法、实例化、属性填充、初始化前、初始化、初始化后等其中AOP就是发生在初始化后这一步

    Python机器学习机器学习十大算法英文文档SVM

    Python机器学习机器学习十大算法英文文档SVM提取方式是百度网盘分享地址

    基于最近邻分类器KNN的手写数字识别程序,包含GUI界面

    亲测可用。 算法基于最近邻分类器(K-Nearest Neighbors, KNN)的思想。而是遍历所有已知字符的特征向量,找到距离输入特征向量最近的一个,并将其对应的字符作为识别结果。

    Python机器学习机器学习十大算法英文文档CART

    Python机器学习机器学习十大算法英文文档CART提取方式是百度网盘分享地址

    pycharm-08-tcp服务端程序的开发.ev4.rar

    pycharm-08-tcp服务端程序的开发.ev4.rar

    Acquisition-4.13-cp310-cp310-manylinux_2_17_aarch64.whl.zip

    Acquisition-4.13-cp310-cp310-manylinux_2_17_aarch64.whl.zip

    2024-2030全球与中国住宅太阳能光伏组件市场现状及未来发展趋势.docx

    2024-2030全球与中国住宅太阳能光伏组件市场现状及未来发展趋势

    第2章 方程求根.pdf

    第2章 方程求根

    Python安装文件(MAC苹果系统)

    0.Python安装教程-Mac、pycharm-community-2022.2.1、python-3.10.7-macos11

    AX3_model_extras-1.4.1-py3-none-any.whl.zip

    AX3_model_extras-1.4.1-py3-none-any.whl.zip

    调优初始jmeter脚本

    调优初始jmeter脚本

    Ent animated character 恩特动画角色 游戏树怪模型带动画资源包unitypackage项目

    Ent animated character 恩特动画角色 游戏树怪模型带动画资源包unitypackage项目 支持Unity版本2019.2.18或更高 动画 走 闲置的 空闲时间长 空闲_长_2 攻击 损害 死亡 纹理 512x512 多边形 3093

    计算机设计 - VB+ACCESS智能公交考勤系统管理软件设计(LW),保证可靠运行,毕业生可参考,免费资源下载

    VB+ACCESS智能公交考勤系统管理软件设计项目是一个基于Visual Basic(VB)编程语言和ACCESS数据库技术的考勤管理解决方案。该项目旨在利用现代信息技术,为公交公司的考勤管理提供智能化、自动化的工具,提高考勤工作的效率和准确性。 在软件设计过程中,我们首先对公交公司的考勤管理需求进行了深入的分析,明确了软件的功能模块和数据结构。基于这些需求,我们利用VB的编程功能,设计了用户友好的界面和交互逻辑,使用户能够方便地进行考勤信息的录入、查询和统计。 同时,我们利用ACCESS数据库技术,建立了考勤信息的存储和管理机制。通过合理的数据库设计,我们实现了对考勤数据的快速查询、更新和备份,保证了数据的完整性和安全性。 此外,软件还具备智能化的考勤分析功能,能够根据考勤数据自动生成各类报表和图表,帮助管理人员更好地了解员工的出勤情况,优化考勤管理制度。 最后,我们撰写了详细的论文,对智能公交考勤系统管理软件的设计思路、实现过程以及应用效果进行了全面阐述,为软件的开发和应用提供了理论支持和实践指导。

    Android L代码编译及版本下载说明-V1.0

    Android L代码编译及版本下载说明-V1.0

Global site tag (gtag.js) - Google Analytics