Linux sysfs虚拟文件系统

本文拟对Linux sysfs虚拟文件系统进行简单的介绍和原理分析

简介

测试环境:Linux dev-PC 5.18.17-amd64-desktop-hwe #20.01.00.10 SMP PREEMPT_DYNAMIC Thu Jun 15 16:17:50 CST 2023 x86_64 GNU/Linux

sysfs虚拟文件系统是随着linux统一设备驱动模型一起诞生的。这个新的设备模型是为了对计算机上的所有设备进行统一地表示和操作,包括设备本身设备之间的连接关系。

这个模型建立在PCI 和USB 的总线枚举过程的分析上,这两个总线类型能代表当前系统中的大多数设备类型。CPU 能直接控制的是PCI总线设备,而USB总线设备是一个具体的PCI设备,外部USB设备再接入到USB 总线设备上。当计算机执行挂起操作时,linux内核应该以“外部USB设备->USB总线设备->PCI总线设备”的顺序通知每一个设备将电源挂起。执行恢复时则以相反的顺序通知。sysfs是在这个linux统一设备模型的开发过程中产生的一项副产品。

在测试环境上,sysfs的挂载信息如下:

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)

下面的节点:

$ ls /sys
block  bus  class  dev  devices  firmware  fs  hypervisor  kernel  module  power

这些节点的主要功能:

  • block: 描述当前系统中所有的块设备的信息
  • class:根据设备功能分类的设备模型
  • devices:描述系统中所有的设备,设备根据类型分层
  • fs:描述系统中所有的文件系统
  • module:系统中所有模块的信息
  • bus:系统中所有设备头连接到的某种总线里
  • dev:维护一个按字符设备和块设备的主次号码连接到真实设备的符号连接文件
  • firmware:系统加载固件相关的接口
  • kernel:内核可调参数
  • power:和电源管理相关的可调参数
  • hypervisor:有人说是跟虚拟化hypervisor有关,目前没找到官方文档说明

sysfs接口

sysfs代码在路径fs/sysfs下。
下面以/sys/kernel说下在sfsfs中的接口,代码在kernel/ksysfs.c
先看其初始化入口函数:

static int __init ksysfs_init(void)
{
   
   
	int error;

	kernel_kobj = kobject_create_and_add("kernel", NULL);
	if (!kernel_kobj) {
   
   
		error = -ENOMEM;
		goto exit;
	}
	error = sysfs_create_group(kernel_kobj, &kernel_attr_group);
	if (error)
		goto kset_exit;

	if (notes_size > 0) {
   
   
		notes_attr.size = notes_size;
		error = sysfs_create_bin_file(kernel_kobj, &notes_attr);
		if (error)
			goto group_exit;
	}

	return 0;

group_exit:
	sysfs_remove_group(kernel_kobj, &kernel_attr_group);
kset_exit:
	kobject_put(kernel_kobj);
exit:
	return error;
}

首先,k

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值