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

驱动开发学习20250523

kobj_type

功能:表示内核对象类型,描述通过ktype字段嵌入kobject的对象类型,控制在创建和销毁kobject时以及在读取或写入属性时发生的操作。

struct kobj_type {void (*realease)(struct kobject *);const struct sysfs_ops sysfs_ops;struct attribute **default_attrs;
};
  • struct kobj_type 结构允许内核对象共享公共操作(sysfs_ops),无论这些对象是否在功能上相关
  • release:需要释放对象时由kobject_put()函数调用的回调函数,此时必须在这里释放对象占用的内存
  • 使用container_of宏可获取指向该对象的指针
  • sysfs_ops字段指向sysfs操作
  • default_attrs定义与此kobject关联的默认属性
  • sysfs_ops是访问sysfs属性时调用的一组回调函数
  • default_attrs是指向struct attribute元素列表的指针,他们将用作此类型每个对象的默认属性
struct sysfs_ops {ssize_t (*show)(struct kobject *kobj, struct attribute  *attr, char *buf);ssize_t (*store)(struct kobject *kobj, struct attribute *attr, const char *buf, size_t size);
};
  • show是回调函数,在读取具有该kobj_type的所有kobject的属性时调用它
  • 缓冲区长度为PAGE_SIZE
  • 应该设置buf的值,并在成功时返回实际写入缓冲区的数据长度(以字节为单位),失败时返回负的错误码
  • 写入的时候调用store函数,其buf参数最大为PAGE_SIZE,但可以更小。
  • 成功时返回从缓冲区实际读取的数据长度,失败或收到不需要的值时返回负的错误码
  • 可以使用get_type获取指定的kobject的kobj_type
struct kobj_type *get_ktype(struct kobject *kobj);

内核对象集合kset

kset是kobject的集合

struct kset {struct list_head list;spinlock_t list_lock;struct kobject kobj;
};
  • list:kset中所有的kobject的链表
  • list_lock:保护链表访问的自旋锁
  • kobj:表示该集合的基类
  • 创建、添加和删除kset
struct kset * kset_create_and_add(const char *name, const struct kset_uevent_ops *u,struct kobject *parent_kobj);
struct kset_unregister (struct kset * k);

属性

属性是由kobject导出到用户空间的sysfs文件

用户空间代码感知数据变化的操作:

  1. 打开文件属性
  2. 对所有内容进行虚拟阅读
  3. 调用轮循请求POLLERR | POLLPRI
  4. poll或select返回时,读取数据发生变化的文件内容
  5. 关闭文件,转到循环顶部

最近学习内容有点儿乱,感觉效果也不太好,云里雾里的,其实最理想的状态是形成一个思维导图,但是靠我目前的学识还无法实现,计划现在这部分先暂停一下,后续每天再看看代码,深入理解一下。

http://www.lryc.cn/news/2384509.html

相关文章:

  • Java详解LeetCode 热题 100(20):LeetCode 48. 旋转图像(Rotate Image)详解
  • CAU人工智能class4 批次归一化
  • Android11以上通过adb复制文件到内置存储让文件管理器可见
  • Keepalived 与 LVS 集成及多实例配置详解
  • 篇章二 需求分析(一)
  • 汽车充电过程中--各个电压的关系(DeepSeek)
  • 图解深度学习 - 机器学习简史
  • Gmsh 代码深度解析与应用实例
  • 49页 @《人工智能生命体 新启点》中國龍 原创连载
  • 量化研究---bigquant策略交易api研究
  • 编译原理 期末速成
  • echarts之漏斗图
  • 零基础设计模式——第二部分:创建型模式 - 原型模式
  • Honeywell TK-PRS021 C200
  • java 进阶 1.0.3
  • 从 Docker 到 runC
  • PET,Prompt Tuning,P Tuning,Lora,Qlora 大模型微调的简介
  • 02-jenkins学习之旅-基础配置
  • 互联网大厂Java求职面试:云原生架构与AI应用集成解决方案
  • Python爬虫实战:研究Crawley 框架相关技术
  • C#实现List导出CSV:深入解析完整方案
  • Appium+python自动化(三)- SDK Manager
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解
  • 主成分分析基本概念及python代码使用
  • MCP如何助力智能交通系统?从数据融合到精准决策
  • 什么是抽象类?是所有函数都是纯虚函数吗?
  • 计算机视觉与深度学习 | Python实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据
  • 【Unity实战笔记】第二十四 · 使用 SMB+Animator 实现基础战斗系统
  • C/C++的OpenCV 进行图像梯度提取
  • Redis 缓存使用的BigKey问题