内核对象kobject和sysfs(1)——概述

时间:2023-03-08 21:55:02

内核对象kobject和sysfs(1)——概述

问题:

在走读驱动代码时,经常看见kref,kobj,sysfs这些结构,这些结构到底有什么作用?如何理解并使用这些结构呢?这将在接下来的这一系列文章中说明。


在详细介绍之前,先简单给出个人对各个结构的理解,但暂时不对这些结论做出解释。可以在看完后面几篇后,再回过头来看本篇。

(1)kref实现了资源的智能管理,调用者,不必关心资源的释放问题,系统会在合适的时机释放资源;

(2)kobj是kref的封装,利用了kref的功能,构成了sysfs里的基本目录,并提供内核到用户的接口,接口可以自定义;

(3)device是kobj的进一步封装,使其除了具有内核对象的一切属性之外,还有了和设备相关的一些特性。不过这相关的文章,不在这一系列中叙述,将在《统一设备模型》系列文章中介绍。

(4)sysfs是一个内核向用户展示自己的地方,按照开发者的约定展示给用户合适的属性,并允许用户对某些熟悉进行修改;

从上面的介绍,可以看出,内核代码虽然是C语言编写,但是充分体现了面向对象的思想:

(1)kref到kobj再到device的层层封装,体现了面向对象的封装和继承;

(2)用户编写驱动时候,对device有着各自不同的封装,甚至内核的一些其他子系统都采用不同的方式对其进行封装,这无不体现出了多态。

本系列文章分为四个部分。第一部分即为本篇概述。

第二篇为介绍kref,第三篇为介绍kobj,第四篇为介绍kset。

其中kset中包含的内容很多,比如uevent、热插拔等知识在后续别的系列中详细分析。