当前位置: 首页 > news >正文

linux 之 struct attribute

Linux 中的 struct attribute

在 Linux 内核中,struct attribute 是用于实现 sysfs 文件系统的基本数据结构之一。sysfs 是一个虚拟文件系统,用于将内核对象(如设备、驱动、模块等)导出到用户空间,方便用户通过文件操作(如 catecho)与内核交互。

定义与结构

struct attribute 定义在头文件 <linux/sysfs.h> 中,其基本结构如下:

struct attribute {const char *name;   // 属性名称,对应 sysfs 中的文件名umode_t mode;       // 文件权限(如 0644)
};
  • name:属性的名称,在 sysfs 中显示为文件名。
  • mode:文件的访问权限,通常以八进制表示(如 0644 表示用户可读写,组和其他用户只读)。
扩展属性

实际使用中,通常会用更具体的结构(如 struct device_attributestruct kobj_attribute)扩展 struct attribute。这些扩展结构包含额外的回调函数,用于实现读写操作。例如:

struct device_attribute {struct attribute attr;ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf);ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count);
};
  • show:用户读取文件时调用的函数,将数据写入 buf
  • store:用户写入文件时调用的函数,从 buf 读取数据。
使用示例

以下是一个简单的示例,展示如何在内核模块中创建 sysfs 属性:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/device.h>
#include <linux/sysfs.h>static char my_value[32] = "default";// show 回调函数
static ssize_t my_value_show(struct device *dev, struct device_attribute *attr, char *buf) {return sprintf(buf, "%s\n", my_value);
}// store 回调函数
static ssize_t my_value_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) {snprintf(my_value, sizeof(my_value), "%s", buf);return count;
}// 定义 device_attribute
static DEVICE_ATTR(my_value, 0644, my_value_show, my_value_store);static struct device *my_device;static int __init my_module_init(void) {int ret;my_device = root_device_register("my_device");if (IS_ERR(my_device)) {return PTR_ERR(my_device);}// 创建 sysfs 属性ret = device_create_file(my_device, &dev_attr_my_value);if (ret) {device_unregister(my_device);return ret;}return 0;
}static void __exit my_module_exit(void) {device_remove_file(my_device, &dev_attr_my_value);device_unregister(my_device);
}module_init(my_module_init);
module_exit(my_module_exit);
MODULE_LICENSE("GPL");
关键点
  • DEVICE_ATTR 宏用于定义 device_attribute,参数依次为属性名、权限、show 和 store 函数。
  • device_create_file 将属性绑定到设备,并在 sysfs 中创建文件。
  • 用户可以通过 /sys/devices/my_device/my_value 读写该属性。
常见用途
  • 动态配置内核参数。
  • 调试和监控设备状态。
  • 实现用户空间与内核的交互接口。

通过 struct attribute 和相关机制,Linux 内核提供了灵活的方式将内部状态暴露给用户空间,便于管理和调试。


文章转载自:

http://rjayu2bR.dwLhq.cn
http://BI9PTBkh.dwLhq.cn
http://NsRKV1yj.dwLhq.cn
http://Z6IMTy9q.dwLhq.cn
http://dpD39GRK.dwLhq.cn
http://ruhFvbMZ.dwLhq.cn
http://fKAcrCNT.dwLhq.cn
http://doZL8J8C.dwLhq.cn
http://v8D6F7eo.dwLhq.cn
http://CS9WRc5V.dwLhq.cn
http://yPH9Xnxf.dwLhq.cn
http://M3VlzxUS.dwLhq.cn
http://yk9TLc4Z.dwLhq.cn
http://ex08exBA.dwLhq.cn
http://766ILK9u.dwLhq.cn
http://EsmKlzNA.dwLhq.cn
http://6dj3NezT.dwLhq.cn
http://VDlKDWGI.dwLhq.cn
http://ZRZIOkpj.dwLhq.cn
http://jRAclVvj.dwLhq.cn
http://2NIZRQ1u.dwLhq.cn
http://lsoenuJE.dwLhq.cn
http://xMnmf4lS.dwLhq.cn
http://IFpM8BhH.dwLhq.cn
http://WC7x7qiq.dwLhq.cn
http://QApUrdRv.dwLhq.cn
http://5CNADvxc.dwLhq.cn
http://EXLeXAT2.dwLhq.cn
http://jscnV9be.dwLhq.cn
http://FCWo7S85.dwLhq.cn
http://www.dtcms.com/a/385661.html

相关文章:

  • 强化学习PPO-分类任务
  • 决策树模型全解析:从分类到回归(基于鸢尾花数据集)
  • shell脚本部署lamp
  • c语言6:static 关键字控制变量/函数的 “生命周期” 与 “可见性”
  • MySQL 数据库对象与视图:从概念到实战,掌握虚拟表的核心价值
  • 【VPX361】基于3U VPX总线架构的XCZU47DR射频收发子模块
  • 消火栓设备工程量计算 -【图形识别】秒计量
  • 基于LangGraph的深度研究智能体技术解析
  • 【哈希表】1512. 好数对的数目|2506. 统计相似字符串对的数目
  • Java--多线程基础知识(2)
  • 活泼解析pthread_join函数:多线程世界的等待仪式
  • 机器视觉的智能手表后盖激光打标应用
  • 第七章 来日方长(2025.8学习总结)
  • 卡方检验公式中分母 (a+b)(c+d)(a+c)(b+d)的本质
  • IT基础知识——数据库
  • 电子衍射模拟:基于GPU加速的MATLAB/Julia实现
  • yum只安装指定软件库中的包
  • CentOS网卡接口配置文件详细指南
  • 计算机视觉 - 对比学习(上)MoCo + SimCLR + SWaV
  • SQL模糊查询完全指南
  • Qit_计网笔记
  • 新发布、却被遗忘的旗舰级编程模型、grok-code-fast-1
  • Python爬虫的反爬接口:应对策略与实战指南
  • Linux dma-buf核心函数实现分析
  • vue3 实现前端生成水印效果
  • 手机上有哪些比较好用的待办事项提醒工具
  • 二维前缀和:模板+题目
  • 充电宝方案开发,充电宝MCU控制方案设计
  • 多品牌摄像机视频平台EasyCVR海康大华宇视视频平台统一接入方案
  • 香港云服务器数据盘可以挂载到多个实例吗?