linux 读sysfs文件,SYSFS 读写流程简析

本文详细介绍了Linux内核中的sysfs文件系统,它是一个内存文件系统,用于暴露内核数据给用户态。文章重点剖析了sysfs文件的创建过程,包括目录和文件的创建,以及如何在首次open时创建inode。此外,还阐述了sysfs文件的open、read和write操作流程,解释了如何通过kobject、ktype和kset来管理和操作sysfs文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

149895539bdcedc812d241058d5154a0.png

作者简介:刘立超,靠 Linux 内核,驱动吃饭的工程师,喜欢探究事物本质,喜欢分享。

版权声明:本文最先发表于 “泰晓科技” 微信公众号,欢迎转载,转载时请在文章的开头保留本声明。

1. sysfs 文件系统简介

sysfs 是一个内存文件系统,可以将内核数据暴露给用户态。因为它比较简单,且与设备模型有紧密联系。同时,不涉及 pagecache,IO 调度,块设备等概念,是初学 VFS 概念的绝佳目标。

本篇文章介绍:文件读写在内核中的基本流程

inode/dentry 的概念

设备模型在 kobject/ktype/kset 概念

2. sysfs 目录/文件创建//创建目录int sysfs_create_dir(struct kobject * kobj)

Linux 的设备模型中,每一个 kobject 对应 sysfs 文件系统的一个目录,所以入参 kobject 表示创建一个名称为 kobj->name 的目录。其父目录是 kobj->parent,如果 parent 不存在,就在根目录创建。

每一个 sysfs 文件系统内的目录或文件,都对应一个 sysfs_dirent。

所以,创建目录的步骤如下:分配 sysfs_dirent,设置此 sysfs_dirent 类型是 SYSFS_DIR,表示它是一个目录

调用 sysfs_add_one,根据 dirent 的 hash 值,把 sysfs_dirent 添加到 sd->s_parent->s_dir.children.rb_node(红黑树),即添加到父目录的 children 红黑树中

创建文件的 API 是 sysfs_create_file,与 sysfs_create_dir 类似,就是 sysfs_dirent 类型是 SYSFS_KOBJ_ATTR,表示此 sysfs_dire

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值