【Linux】sysfs文件系统

news2024/11/17 16:37:35

【Linux】sysfs文件系统

前言

 一、sysfs文件系统

1.1 sysfs系统是什么

1.2 sysfs的运行机制原理

二、sysfs中重要的结构体

2.1 kobject和kset之间的关系 

2.2 kobject结构体

2.3 kset结构体 


 前言

重要的环节:带着问题不断前进

  1. sysfs文件系统是什么
  2. sysf文件系统的原理
  3. sysfs文件系统中重要的结构体。

在学习Linux笔记老师的课程中,老师讲的精简深入,但学习入门还需要一些知识背景,这里我进行了拓展和总结。---学习笔记

参考文章和视频:https://xuesong.blog.csdn.net/article/details/109522945

https://xuesong.blog.csdn.net/article/details/107724682

https://live.csdn.net/v/279734?spm=1001.2014.3001.5501

 一、sysfs文件系统

1.1 sysfs系统是什么

sysfs是一种虚拟文件系统,提供一种访问内核数据结构的方法从而允许用户空间程序查看和控制系统的设备和资源。

sysfs文件系统是挂载在sys文件目录下的,我们可以通过sys下面的目录和文件清楚的了解Linux系统的嵌入式设备的系统状况。sysfs 把连接在系统上的设备和总线组织成为一个分级的文件,它们可以由用户空间存取,向用户空间导出内核的数据结构Q以及它们的属性。

sysfs 的一个目的就是展示设备驱动模型中各组件的层次关系,如下图所示:

在sys目录下,各文件的功能如下:

1.2 sysfs的运行机制原理

sysfs 提供一种机制,使得可以显式的描述内核对象、对象属性及对象间关系。

  • 一组接口,针对内核,用于将设备映射到文件系统中。
  • 一组接口,针对用户程序,用于读取或操作这些设备。描述了内核中的 sysfs 要素及其在用户空间的表现,如下图所示:

sys下面的目录和文件反映了整台机器的系统状况。这些目录代表了完全不同的设备类型,这些目录只是给我们提供了如何去看整个设备模型的不同视角。真正的设备信息放在 devices 子目录下,Linux 系统中的所有设备都可以在这个目录里找到。如上图所示,bus 下对应驱动和设备,classes下有设备的不同分类,分类下也对应各种设备,实际上它们都是 devices 目录下设备文件的符号链接。

二、sysfs中重要的结构体

2.1 kobject和kset之间的关系 

从下面的图,非常清晰的知道kset和kobject之间的关系和联系。

2.2 kobject结构体

kobject是设备模型的核心,在后台运行。它为内核带来类似于面向对象的编程风格。

在内核中include/linux/kobject.h中定义了kobject结构体,在kobject结构体中包含了一些成员变量,其中比较重要的name、parent、sd、kref以及ktype。具体结构代码如下:

/*
name:	指向这个kobject的名称。使用kobject_set_name(struct kobject* kobj,const char * name)函数可以修改它。
entry: 简单讲就是要挂载入kset的链表。
parent:	指向此kobject父项的指针。它用于构建描述对象之间关系的层次结构。
sd:		指向struct sysfs dirent结构,它表示该结构内sysfs节点中的这个kobject。
kref:	提供kobject上的引用计数。
ktype: 	描述该对象,kset说明这个对象属于哪套(组)对象。
*/
struct kobject {
	const char		*name;
	struct list_head	entry;
	struct kobject		*parent;
	struct kset		*kset;
	struct kobj_type	*ktype;
	struct kernfs_node	*sd; /* sysfs directory entry */
	struct kref		kref;
#ifdef CONFIG_DEBUG_KOBJECT_RELEASE
	struct delayed_work	release;
#endif
	unsigned int state_initialized:1;   //初始化状态
	unsigned int state_in_sysfs:1;      //是否在sys中  
	unsigned int state_add_uevent_sent:1;
	unsigned int state_remove_uevent_sent:1;
	unsigned int uevent_suppress:1;
};

常使用kobject_create_and_add来进行创建和添加目录。在添加到系统之前,必须使用kobject_ create()函数分配kobject,并将已经分配但尚未初始化的kob ject指针及其kobject_type 指针作为参数。kobject_add()函数用于添加kobject并将其链接到系统,同时根据其层次结构创建目录及其默认属性。功能与之相反的函数是kobject_ del(),将kobject删除链接。

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;
}

2.3 kset结构体 

内核对象集(kset)主要将相关的内核对象组合在一起,kset是object的集合。 

kset结构体还比kobject多了一个链表头,可以将子目录项对应的kobject结构体实例加入该链表,使得kset可以遍历这些子目录项的kobject。 

struct kset {
	struct list_head list;    //挂载kobject结构的链表
	spinlock_t list_lock;     //保护链表访问的自旋锁
	struct kobject kobj;      //自身包含一个kobject结构  
	const struct kset_uevent_ops *uevent_ops;
} __randomize_layout;

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

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

相关文章

YOLOv5 实例分割入门

介绍 YOLOv5 目标检测模型以其出色的性能和优化的推理速度而闻名。因此,YOLOv5 实例分割模型已成为实时实例分割中最快、最准确的模型之一。 在这篇文章中,我们将回答以下关于 YOLOv5 实例分割的问题: YOLOv5检测模型做了哪些改动,得到了YOLOv5实例分割架构?使用的 Prot…

RTC实时时钟源码分析

1.先来看一下RTC的配置过程 2.RTC源码讲解 我们的工程中加入了 rtc.c 源文件和 rtc.h头文件,同时,引入了 stm32f10x_rtc.c 和 stm32f10x_bkp.c 库文件。 说明,首先是 RTC_Init,其代码如下: //实时时钟配置 //初始化…

UI自动化测试遇弹窗怎么办?这个解决方法你get到了没?

目录 引言 弹窗的种类: APP内的业务弹窗 弹窗处理 watcher的使用 实战案例 软件测试技术的准备和建议 一、测试基础 二、Linux必备知识 三、Shell脚本 四、互联网程序原理 五、MySQL数据库 六、抓包工具 七、接口测试工具 八、Web自动化测试Java&Python 九…

关于C语言的杂记5

文章目录 引入正文内部函数与外部函数相关数组的知识点数组的初始化测试一维数组在内存中存储的地址:遍历二维数组的值测试二维数组的地址(观察内存情况)数组下标为0开始的由来 两个数交换位置的三种方法 引入 写在前面:关于C语言这部分内容,…

msys2 pacman 安装 ncurses-devel 解决 make menuconfig 问题

问题描述 windows 下使用 msys2 环境,可以开发编译一些 Linux 下的软件包,一般Linux 下的软件包,需要安装 PC 平台的gcc、gcc交叉编译工具链,如 arm的,以及一些常用的 软件包,如 python 等 有一个软件包&a…

【工具】Ubuntu 非root用户 安装openssl

文章目录 openssl 下载 & 解压指定安装路径编译安装配置环境变量验证是否安装成功 openssl 下载 & 解压 openssl 下载地址 或者 https://www.openssl.org/source/openssl-1.1.1l.tar.gz 上传到服务器 解压 tar -zxvf openssl-1.1.1l.tar.gz切换到openssl-1.1.1l目…

maven-resources-plugin详解

目录 一、什么场景会用到?二、他有什么作用?三、插件常用配置1、字符集编码2、resources相关的配置2.1、resources配置结构2.2、resources默认配置2.2.1、maven超级pom默认配置2.2.2、spring-boot对resources插件的默认配置2.2.3、resources最终生效的配…

2023年最新VMware 17+虚拟机详细配置安装【程序员使用指南】!!

文章目录 Vmware版本选择17Pro安装自定义安装填写对应的许可证正式安装虚拟机进行对应的配置配置镜像文件选择对应的语言:到这个界面,选择中文 安装结束连接对应的xshell Vmware版本选择17Pro安装 ● 最开始从这里出发 自定义安装 ● 记得自定义在自…

TikTok选品,什么产品在TikTok最受欢迎?

TikTok是当下的海外社交媒体推广新风口已经有目共睹,与此同时跨境商家们或许都面临着同样的问题,就是TikTok要怎么选品,什么产品才会比较受欢迎。俗话说:七分靠选品,三分靠运营。选品选对了,运营也就事半功…

chatgpt赋能Python-python3_decode函数

Python3 decode函数 - 解码你的数据 编程领域中,字符串是一个不可避免的概念,他们构成了我们生活中逻辑化和技术实现化的重要组成部分。不仅如此,字符串的加载和使用也对程序的性能产生了重大的影响。在这篇文章中,我们将重点讨论…

现在有什么基于vue3.0的优秀开源项目呢?

前言 以下是一些github上一些基于vue3.0的优秀开源项目,可以自己选择一些去练一下手,废话少说,直接进入正题---- 1、 vue-manage-system Star: 16k 是一个基于 Vue3 和 Element Plus 的后台管理系统解决方案,它提供了一系列的通…

电脑找不到msvcr110.dll怎么办?电脑msvcr110.dll丢失怎么解决?

在使用某些软件或游戏时,有时会出现找不到msvcr110.dll文件的错误提示,这会导致程序无法正常运行。这个问题通常是由于缺少Visual C msvcr110.dll引起的。下面是解决这个问题的几个方法: msvcr110.dll的解决方法一 直接使用dll修复程序进行修…

videojs扩展方法,自定义功能

8版本不支持extend,8支持es6扩展 videojsextend

DeepGPS: Deep Learning Enhanced GPS Positioning in Urban Canyons

DeepGPS: Deep Learning Enhanced GPS Positioning in Urban Canyons IEEE TMC|深度学习增强的城市峡谷GPS定位 https://github.com/bducgroup/DeepGPS 文章目录 DeepGPS: Deep Learning Enhanced GPS Positioning in Urban CanyonsAbstract1 INTRODUCTION2 BACKGRO…

【C++】如何克服红黑树的恐惧?看这篇文章足够了

红黑树的实现会比AVL简单-.- 文章目录 判断是否是AVL树一、红黑树二、红黑树的实现总结 判断是否是AVL树 上一篇文章我们详细介绍了AVL树并且实现了AVL树,这篇文章我们将在前言中引入判断是否是AVL树的方法,然后我们就进入红黑树的实现,如果…

从0到1精通性能测试,需求到实战压力测试实例(详情)你要的都有...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能测试需求分析…

David Silver Lecture 9:Exploration and Exploitation

1 Introduction 1.1 Outline 1.1.1 Exploration vs. Exploitation Dilemma 1.1.2 examples 1.1.3 principles Naive Exploration 在前面的章节主要使用的是naive exploration的方法Optimistic Initialisation 这种方法的思想是,我们对每个动作的奖励给出一个乐观的…

C语言深度解刨(一)——关键字

文章目录 前言关键字定义和声明,你懂了吗?最宽宏大量关键字——auto最快的关键字——register最名不副实的关键字——static修饰变量修饰函数 基本数据类型——short、int、long、char、flaot、double变量命名规则 最冤枉的关键字——sizeof常年被人误认…

Java开发 - 不知道算不算详细的分布式锁详解

前言 今天给大家带来一篇关于分布式锁的好文,关于分布式系统下的内容,博主已经写了好几篇了,也收获了大家的不少好评。分布式系统在目前的开发中所占的比重还是比较大的,如果你还没接触过分布式系统,那么欢迎你去学习…

操作文件 --Java EE

目录 一、文件的概念 二、文件的目录(directory) 三、文件路径(Path) 四、文件的分类 五、文件的操作 1.文件系统的操作 1.1创建文件--createNewFile( ) 1.2删除文件--delete( ) 和 deleteOnExit( ) 1.3文件改名--renam…