Sysfs简介

news2025/1/22 12:32:09

Sysfs学习记录
主要参考文献:https://xuesong.blog.csdn.net/article/details/109522945

Sysfs(System File System)是一种虚拟文件系统,它提供了一种在Linux和Unix系统中管理设备和内核参数的机制。Sysfs基于内核,将底层硬件信息和内核参数暴露给用户空间应用程序
例如CPU温度、内存使用情况等。此外,Sysfs还允许用户空间程序动态更改内核参数,从而实现更高效的系统管理和调整。

Sysfs的基本概念:

节点(Node):Sysfs中的每个目录都表示一个节点,通常以斜杠(/)开头。例如,/sys/devices/pci0000:00/0000:00:00.0/resource_bus_width表示PCI总线宽度的节点。
属性(Attribute):每个节点都有一组属性,用于描述该节点所代表的对象或设备的相关信息。例如,/sys/devices/pci0000:00/0000:00:00.0/resource_bus_width具有ro(只读)属性,表示该属性只能由root用户读取。
文件(File):Sysfs中的每个属性都可以关联一个文件,用于存储相关的数据。例如,/sys/devices/pci0000:00/0000:00:00.0/resource_bus_width/value表示PCI总线宽度的实际值。

要访问Sysfs,您可以使用类似于ls、cat和grep等命令行工具。例如,要查看所有CPU核心的频率信息,您可以运行以下命令:

ls -l /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

请注意,Sysfs可能会因不同的Linux发行版而有所不同。在某些情况下,它可能被替换为其他类型的虚拟文件系统。

Sysfs tree

在这里插入图片描述

sysfs要素关系

在这里插入图片描述

在这里插入图片描述
下面主要介绍内核对象kobject和目录之间的关系;
对象属性内容也较多,且在用户层和设备树有一定关系,先不做介绍可单独开篇;

sysfs中kobject和kset的关系结构

在这里插入图片描述
单独的kobject和kset都略微看了下,不看大佬的文章,我是没出来如此详细的关系图;

kobject

kobject 结构体include/linux/kobject.h包含了一些常用的成员变量,如 name, parent, siblings, ktype, kref 等。其中,name 成员变量表示对象的名称,parent 成员变量表示对象的父对象,siblings 成员变量表示同级的对象列表,ktype 成员变量表示对象的类型,kref 成员变量表示对象的引用计数。

struct kobject *kobject_create(void)
{
	struct kobject *kobj;

	kobj = kzalloc(sizeof(*kobj), GFP_KERNEL);
	if (!kobj)
		return NULL;

	kobject_init(kobj, &dynamic_kobj_ktype);
	return kobj;
}

struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)
{
	struct kobject *kobj;
	int retval;

	kobj = kobject_create();
	if (!kobj)
		return NULL;

	retval = kobject_add(kobj, parent, "%s", name);
	if (retval) {
		printk(KERN_WARNING "%s: kobject_add error: %d\n",
		       __func__, retval);
		kobject_put(kobj);
		kobj = NULL;
	}
	return kobj;
}

使用kobject_create_and_add来进行创建和添加目录,传参如果是NULL则代表是sys主目录下,否则依次往下建立目录;device_attribute 是一个文件的属性value,后面可以在介绍,可以通过这个给他传值;

struct kobject *firmware_kobj;
EXPORT_SYMBOL_GPL(firmware_kobj);
firmware_kobj = kobject_create_and_add("firmware", NULL);
	acpi_kobj = kobject_create_and_add("acpi", firmware_kobj);
 hotplug_kobj = kobject_create_and_add("hotplug", acpi_kobj);
	   result = sysfs_create_file(acpi_kobj, &pm_profile_attr.attr);
root@ATP-YQYF-459:/sys# ls
block  bus  class  dev  devices  firmware  fs  kernel  module  power

上述kobject_create_and_add创建了/sys/firmware/acpi/hotplug
kobject_add_internal 将kobject添加到kernel。使用parent = kobject_get(kobj->parent);申请内存增加引用计数。,error = create_dir(kobj);创建目录;kobject_put,以内部接口kobject_release为参数,调用kref_put。kref模块会在引用计数为零时,调用kobject_release。kobject_put 释放内存kfree;

kset

Kset是一个特殊的kobject,因此其初始化、注册等操作也会调用kobject的相关接口,除此之外,会有它特有的部分。另外,和Kobject一样,kset的内存分配,可以由上层软件通过kmalloc自行分配,也可以由Kobject模块负责分配
内核对象集

edd_kset = kset_create_and_add("edd", NULL, firmware_kobj);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/522203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF:WPF原生布局说明

前言 WPF在国内讨论度很小,我在这里记录一下WPF简单的原生控件是如何使用的,顺便回忆一下WPF的基础知识,有些忘记的比较厉害了 WPF简介 WPF是微软推出的桌面UI软件,是我觉得最早实现MVVM(数据驱动事务)&…

三、H3C-NE实验-配置管理实验

实验拓扑图: 实验描述: 1)把路由器R配置为FTP服务器; 2)在R上save配置文件后,主机登录FTP,把R的配置文件copy备份; 3)删掉R的配置文件后,利用主机恢复R的配…

42个网工高效率工具,我只告诉你(一)

晚上好,我是老杨。 不知道上一篇书单总结,你是否觉得干货 今天更新第四篇,也是最后一篇总结——2022年全年,我安利给你的网工好用工具,整整42个。 它是什么,为什么好用,哪里下载,…

【Linux】进程信号详解(二)

文章目录 前言一、信号阻塞1.信号其他相关常见概念信号递达:信号未决:信号阻塞:信号阻塞vs信号递达的忽略动作 2. 在内核中的表示3. sigset_t4. 信号集操作函数5.sigprocmask函数6.sigpending 二、深入理解捕捉信号1. 虚拟地址空间2.用户态和…

mybatis是如何集成到spring的?

文章目录 1 前言1.1 集成spring前使用mybatis的方式1.2 集成mybatis到spring的关键步骤 2 SqlSessionFactoryBean对象分析2.1 buildSqlSessionFactory做了什么事情?2.2 为什么是SqlSessionFactoryBean却可以使用SqlSessionFactory? 3 验证demo4 举一反三…

【Python 爬虫之BeautifulSoup】零基础也能轻松掌握的学习路线与参考资料

BeautifulSoup是一种Python库,用于解析HTML和XML文档,并从中提取数据。它提供了Pythonic的解决方案来处理非结构化数据,因此可以轻松地从网页上提取数据。 使用BeautifulSoup编写爬虫,你可以自动化许多任务,比如数据抓…

实验三 Spark SQL基础编程

实验三 Spark SQL基础编程 1.实验目的 1. 掌握 Spark SQL 的基本编程方法; 2. 熟悉 RDD 到 DataFrame 的转化方法; 3. 熟悉利用 Spark SQL 管理来自不同数据源的数据。 2.实验内容 1.Spark SQL 基本操作 将下列 JSON 格式数据复制到 Li…

CF1245D Shichikuji and Power Grid 题解

CF1245D Shichikuji and Power Grid 题解 题目链接字面描述题面翻译样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 思路点拨代码实现 题目 链接 https://www.luogu.com.cn/problem/CF1245D 字面描述 题面翻译 已知一个平面上有 n n n 个城市&#x…

计网笔记 数据链路层 (1-2) 封装成帧、差错控制、流量控制与可靠传输、停止等待协议、后退N帧协议(GBN)、选择重传协议(SR)

文章目录 前言在这里插入图片描述 零、数据链路层基本概念一、功能0、数据链路层功能概述1、封装成帧和透明传输1.1封装成帧1.2 透明传输1.3组帧方法 2、数据链路层的差错控制2.0差错从何而来2.1位错(比特错,1变成0,0变成1)2.2帧错…

干货 | ChatGPT使用指南,让你轻松上车AI世界!

Hello,大家好! 这里是壹脑云科研圈,我是喵君姐姐~ 聊天机器人(Chatbot)是一种人工智能应用,可以模拟人类对话行为,以自然语言进行交互。 在过去的几年里,随着自然语言处理技术和深…

Springboot +Flowable,定时器的简单使用

一.流程定义定时激活 之前介绍流程定义的时候,流程都是定义好之后立马就激活了,其实在流程定义的这个过程中,我们还可以设置一个激活时间,也就是流程定义好之后,并不会立马激活(不激活就不能据此流程定义创…

操作系统作业 第37-40章

第四次作业 第37章 本章作业需要使用提供的disk.py程序。该程序可以模拟磁盘的工作。在默认情况下,磁盘调度方法为FIFO。对于时间的计算,假设旋转一度为1个时间单位,旋转完整一圈需要360个时间单位,而一个磁道上默认有12个扇区&…

实验二 RDD基础编程

实验二 RDD基础编程 前提是配置好大数据环节。 hadoop,spark,scala等必须的软件 以及下载pyshark 1.实验目的 1. 掌握 RDD 基本操作; 2. 熟悉使用 RDD 编程解决实际具体问题的方法; 2.实验内容 本人仅提供测试代码!…

策划专业技能提升攻略,让你在职场中脱颖而出

作为一个10多年的老策划,刚入行的时候也走过很多弯路,后来加入到一家在国内比较知名的策划公司(老板也是当年的十大知名策划人)才真正让我实现水平的跃升。 当时公司经常有内训,新人的第一课就是策划人应该如何快速入…

FreeRTOS-事件组详解

✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页:rivencode的个人主页 🔥系列专栏:玩转FreeRTOS 💬保持…

深入理解JVM读书笔记与实战_01_Java内存区域与内存溢出异常

文章目录 运行时数据区域问题引入 运行时数据区域 Java虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区。运行时数据区包括了程序计数器、虚拟机栈、本地方法栈、方法区和堆。 程序计数器:程序计数器是线程私有的内存,用来记住…

vue:组件使用v-model实现2个组件间的数据双向绑定

一、需要实现的需求: 子组件输入框的数据发生改变,父组件的数据跟着实时改变; 父组件的数据发生改变,子组件的数据跟着实时改变。 二、实现思路: 1、(1)在父组件引入子组件。(2&…

CAN总线要点总结(CAN2.0A/B)

个人博客原文链接:CAN总线要点总结(CAN2.0A/B) 前言 工作也有几年了,在项目中也接触过几次CAN总线,但总是止步于会用即可,对于很多细节上的东西有时还是稀里糊涂的状态,这几天正好有点时间&am…

【亲测有效】pycharm不显示软件包

http://pypi.hustunique.com/ https://pypi.mirrors.ustc.edu.cn/ http://pypi.tuna.tsinghua.edu.cn/simple/ http://mirrors.aliyun.com/pypi/simple/ http://pypi.douban.com/simple/2023.5.13 亲测有效

单点登录系统:登录,登出,拦截器

什么是单点登录? 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 假设一个企业…