Linux sysfs_create_group属性组创建与bin_attribute
Linux sysfs_create_group属性组创建与bin_attributesysfs_create_group()是驱动程序向sysfs导出属性的标准接口它允许一次注册一组属性而无需逐一调用sysfs_create_file()。其函数原型位于fs/sysfs/group.cint sysfs_create_group(struct kobject *kobj, const struct attribute_group *grp);struct attribute_group的核心定义struct attribute_group {const char *name;umode_t (*is_visible)(struct kobject *, struct attribute *, int);umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);struct attribute **attrs;struct bin_attribute **bin_attrs;};当grp-name为NULL时属性直接创建在kobj对应的sysfs目录下。当name非空时sysfs_create_group()先创建以name命名的子目录然后将所有属性放入该子目录中。实现上sysfs_create_group()首先计算属性数量然后调用internal_create_group()进行实际创建。关键步骤包含(1) 如果grp-name非空通过sysfs_create_dir_ns()创建子目录。(2) 遍历grp-attrs数组对每个attribute调用sysfs_add_file_mode_ns()创建普通属性文件。(3) 遍历grp-bin_attrs数组对每个bin_attribute调用sysfs_add_bin_file_mode_ns()创建二进制属性文件。属性文件在内核态通过struct attribute描述struct attribute {const char *name;umode_t mode;#ifdef CONFIG_DEBUG_LOCK_ALLOCbool ignore_lockdep:1;struct lock_class_key *key;struct lock_class_key skey;#endif};每个attribute对应一个sysfs文件show/store回调通过struct sysfs_ops从kobject的ktype中获取struct sysfs_ops {ssize_t (*show)(struct kobject *, struct attribute *, char *);ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);};当用户空间读取sysfs文件时内核调用sysfs_kf_read()它通过kobj-ktype-sysfs_ops-show()分发到具体实现。bin_attribute提供了对无格式二进制数据的读写能力这在大块数据传输如firmware、寄存器dump场景中远优于基于文本的attributestruct bin_attribute {struct attribute attr;size_t size;void *private;ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *,char *, loff_t, size_t);ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *,char *, loff_t, size_t);loff_t (*llseek)(struct file *, struct kobject *, struct bin_attribute *,loff_t, int);};bin_attribute突破了普通attribute单页缓冲区的限制。普通attribute的show()回调最多只能返回PAGE_SIZE字节的数据而bin_attribute的read()回调可以处理任意大小的数据块通过偏移和长度参数支持随机访问。典型的硬件寄存器dump实现static ssize_t regs_read(struct file *filp, struct kobject *kobj,struct bin_attribute *bin_attr,char *buf, loff_t off, size_t count){struct my_device *dev container_of(kobj, struct my_device, kobj);size_t regs_size 0x1000;if (off regs_size)return 0;if (off count regs_size)count regs_size - off;/* 从硬件寄存器空间读取 */memcpy_fromio(buf, dev-regs_base off, count);return count;}static BIN_ATTR(regs, 0400, regs_read, NULL, 0x1000);static struct bin_attribute *my_bin_attrs[] {bin_attr_regs,NULL,};static struct attribute_group my_group {.attrs my_attrs,.bin_attrs my_bin_attrs,};is_visible()和is_bin_visible()回调在属性创建前被调用返回值决定了属性文件的访问权限。返回0表示隐藏该属性。这种机制使得同一属性组可以根据设备能力动态调整可见性static umode_t my_is_visible(struct kobject *kobj, struct attribute *attr, int n){struct my_device *dev container_of(kobj, struct my_device, kobj);if (attr dev_attr_feature_x.attr !dev-has_feature_x)return 0;return attr-mode;}sysfs_update_group()用于在运行时更新属性组的权限和可见性它不会创建或删除属性文件只会修改已有文件的权限位。如果要动态添加属性需使用sysfs_add_group()或重新创建组。sysfs_remove_group()是逆向操作按相反顺序移除属性和子目录。需要注意sysfs_create_group()和sysfs_remove_group()必须配对调用否则会导致sysfs节点残留进而引发后续内核对象注册冲突。在设备驱动模型中devm_device_add_group()提供了资源管理版本当设备被注销时自动移除属性组省去了手动清理的麻烦。

相关新闻

TensorFlow轻量CNN人脸情绪识别工具:含训练、预测、预处理全流程代码与实测图

TensorFlow轻量CNN人脸情绪识别工具:含训练、预测、预处理全流程代码与实测图

本文还有配套的精品资源,点击获取 简介:一套开箱即用的人脸情绪识别Python工具包,基于TensorFlow实现七类基础情绪(高兴、悲伤、愤怒、惊讶、恐惧、厌恶、中性)分类。包含完整开发链路:pre_process.py负…

2026/6/23 15:14:46阅读更多 →
Python asyncio 并发调度与限速控制

Python asyncio 并发调度与限速控制

Python asyncio 并发调度与限速控制 在现代网络编程中,高并发和请求限速是开发者经常面临的挑战。Python的asyncio库提供了一种高效的异步IO解决方案,能够轻松实现并发任务调度,同时通过灵活的限速机制避免服务过载。本文将深入探讨asyncio的…

2026/6/23 15:14:46阅读更多 →
嵌入式实时系统开发

嵌入式实时系统开发

嵌入式实时系统开发:连接数字世界的隐形桥梁 在智能设备无处不在的今天,嵌入式实时系统(RTS)已成为工业控制、医疗设备、自动驾驶等领域的核心技术。它像一台精准的时钟,在毫秒甚至微秒级的时间内完成任务调度&#x…

2026/6/23 15:14:46阅读更多 →
Graphene开发指南:如何为新的应用程序编写自定义的manifest文件

Graphene开发指南:如何为新的应用程序编写自定义的manifest文件

Graphene开发指南:如何为新的应用程序编写自定义的manifest文件 【免费下载链接】graphene Graphene / Graphene-SGX - a library OS for Linux multi-process applications, with Intel SGX support 项目地址: https://gitcode.com/gh_mirrors/graph/graphene …

2026/6/23 16:30:02阅读更多 →
TitleCardMaker性能优化:提升图片生成速度与资源管理的完整指南

TitleCardMaker性能优化:提升图片生成速度与资源管理的完整指南

TitleCardMaker性能优化:提升图片生成速度与资源管理的完整指南 【免费下载链接】TitleCardMaker Automated title card maker for Plex, Jellyfin, and Emby 项目地址: https://gitcode.com/gh_mirrors/ti/TitleCardMaker TitleCardMaker是一款为Plex、Jell…

2026/6/23 16:30:01阅读更多 →
opsu!游戏模式与Mods指南:如何提升游戏难度与得分

opsu!游戏模式与Mods指南:如何提升游戏难度与得分

opsu!游戏模式与Mods指南:如何提升游戏难度与得分 【免费下载链接】opsu opsu! ~ an open-source osu! client 项目地址: https://gitcode.com/gh_mirrors/op/opsu opsu!是一款开源的osu!客户端,提供了丰富的游戏模式和Mods系统,让玩家…

2026/6/23 16:30:01阅读更多 →
Python安全必备:Safety-DB漏洞数据库完全指南

Python安全必备:Safety-DB漏洞数据库完全指南

Python安全必备:Safety-DB漏洞数据库完全指南 【免费下载链接】safety-db A curated database of insecure Python packages 项目地址: https://gitcode.com/gh_mirrors/sa/safety-db 在Python开发中,使用第三方包可以极大提高效率,但…

2026/6/23 16:30:01阅读更多 →
SWR-Firestore安全指南:保护你的Firestore数据访问权限

SWR-Firestore安全指南:保护你的Firestore数据访问权限

SWR-Firestore安全指南:保护你的Firestore数据访问权限 【免费下载链接】swr-firestore Implement Vercels useSWR for querying Firestore in React/React Native/Expo apps. 👩‍🚒🔥 项目地址: https://gitcode.com/gh_mirro…

2026/6/23 16:30:01阅读更多 →
揭秘跨平台桌面流媒体界面的技术实现:SDL与ImGUI的完美融合

揭秘跨平台桌面流媒体界面的技术实现:SDL与ImGUI的完美融合

揭秘跨平台桌面流媒体界面的技术实现:SDL与ImGUI的完美融合 【免费下载链接】DesktopSharing 桌面共享, 支持RTSP转发, RTSP推流, RTMP推流。 项目地址: https://gitcode.com/gh_mirrors/de/DesktopSharing 在远程协作、在线教育和技术支持的浪潮中&#xff…

2026/6/23 16:25:00阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/23 7:04:52阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/23 1:55:32阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/23 5:55:37阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →