MODULE_DEVICE_TABLE 函数定义
时间: 2023-07-25 08:03:44 浏览: 257
Linux嵌入式platform设备模块modules_platform_device
`MODULE_DEVICE_TABLE` 是一个宏,其定义如下:
```c
#define MODULE_DEVICE_TABLE(type, name) \
static const struct type##_device_id __maybe_unused name##_id[] = { \
{ .compatible = #name }, \
{ } \
}; \
MODULE_DEVICE_TABLE_GPL(type, name##_id)
```
`MODULE_DEVICE_TABLE` 宏接受两个参数:`type` 和 `name`。其中,`type` 表示设备类型,比如 `platform`、`i2c` 等;`name` 表示设备名称,可以是任何字符串。
宏展开后,会生成一个 `static` 的、仅在当前模块中可见的 `const struct type##_device_id` 数组,并命名为 `name##_id`。`type##_device_id` 是一个结构体,表示设备 ID。该结构体中包含一个 `compatible` 字段,表示设备的兼容性字符串,用于匹配设备和驱动程序。
`MODULE_DEVICE_TABLE_GPL` 是另一个宏,用于将设备 ID 数组注册到内核中。它接受两个参数:`type` 和 `id`。其中,`type` 表示设备类型;`id` 表示设备 ID 数组。宏展开后,会调用内核中的 `__mod_register_device_table` 函数,将设备 ID 数组注册到内核中。
总之,`MODULE_DEVICE_TABLE` 宏用于定义设备 ID 数组,并将其注册到内核中,以便内核可以根据设备的兼容性字符串自动匹配设备和驱动程序。
阅读全文