内核 API 中的 __class_create() 和 class_create() 有啥区别?

Posted

技术标签:

【中文标题】内核 API 中的 __class_create() 和 class_create() 有啥区别?【英文标题】:What is the difference between __class_create() and class_create() in the Kernel API?内核 API 中的 __class_create() 和 class_create() 有什么区别? 【发布时间】:2021-12-04 04:36:34 【问题描述】:

参考1 和2 等,似乎内核API 带有一个带有两个参数的函数“class_create()”。

但是,在那个 API 3 中,我只能找到一个名为“__class_create()”的函数,它需要三个参数。

“class_create()”和“__class_create()”有什么区别? 前者过​​时了吗? “class_create()”的文档在哪里?

【问题讨论】:

【参考方案1】:

“class_create()”是一个定义在include/linux/device/class.h中的类函数宏,这不是一个函数。 它替换了直接传递给“__class_create()”的静态结构的定义,如下所示:

#define class_create(owner, name)       \
(                      \
    static struct lock_class_key __key; \
    __class_create(owner, name, &__key);    \
)

因此,“__class_create()”存在于内核 API 中。

“__class_create()”的原型可以在同一个头文件中找到。

【讨论】:

以上是关于内核 API 中的 __class_create() 和 class_create() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

005_linux驱动之_class_device_create函数

class_create(),device_create自动创建设备文件结点

Linux 内核进程管理 ( Linux 内核中的进程状态 | TASK_RUNNING | TASK_INTERRUPTIBLE | __TASK_STOPPED | EXIT_ZOMBIE )

class_create(),device_create自动创建设备文件结点

win64 内核hook API

Windows API之DuplicateHandle