后期补充说明:
2025-03-20 19:55:13 :关于 Platform总线不错的视频总结回顾讲解,请百度网盘搜索“1-3_03_SPI总线设备驱动”,然后从头开始看。
结构体platform_device
的概述
platform_device
是 Linux 内核中用于描述 Platform 设备(片上资源)的关键结构体。它的作用是定义硬件资源的基本属性,并通过注册到 Platform 总线上与对应的驱动匹配。
结构体platform_device
的定义
其定义来自文件include\linux\platform_device.h
,具体如下:
struct platform_device {
const char *name;
int id;
bool id_auto;
struct device dev;
u32 num_resources;
struct resource *resource;
const struct platform_device_id *id_entry;
char *driver_override; /* Driver name to force a match */
/* MFD cell pointer */
struct mfd_cell *mfd_cell;
/* arch specific additions */
struct pdev_archdata archdata;
};
结构体platform_device
的字段详解
1 const char *name
- 功能:定义设备的名称,用于与驱动的名称进行匹配。
- 匹配机制:设备和驱动通过名称进行匹配(
platform_driver.driver.name == platform_device.name
)。【完整准确的匹配机制请参考 https://blog.youkuaiyun.com/wenhao_ir/article/details/145023181】 - 示例:
struct platform_device my_device = { .name = "my_platform_device", };
2 int id
- 功能:定义设备的唯一 ID,用于区分同类设备。
- 特殊值:
-1
:表示没有具体 ID,即单一设备无需区分。- 非负整数:用于区分多个同类设备。
- 示例:
struct platform_device my_device = { .name = "my_platform_device", .id = 0, // 第一个设备 };
3 bool id_auto
- 功能:指示是否自动分配设备 ID。
- 用途:
- 如果设置为
true
,内核会为设备自动分配唯一的 ID。 - 如果设置为
false
,则使用id
字段中提供的值。 - 通常结构体
platform_device
的实例都作为全局变量,所以其默认值为false
。详情见 https://blog.youkuaiyun.com/wenhao_ir/article/details/144612305
- 如果设置为
- 示例:
struct platform_device my_device = { .name = "my_platform_device", .id_auto = true, };
4 struct device dev
- 功能:嵌套的通用设备结构体,用于设备的通用管理。
- 作用:
- 提供设备的基础功能(如设备注册、供电管理等)。
- 与设备模型(sysfs)集成。
- 关键字段:
dev.parent
:指定设备的父设备。dev.of_node
:与设备树节点关联。
- 示例:
my_device.dev.parent = &some_device; // 设置父设备
注意:这个dev结构体的成员release一般情况下需要被赋值才行,因为platform_device_unregister函数执行时会调用它,相关示例代码如下:
//led_dev_release函数即使为空也必须要有,因为platform_device_unregister函数执行时会调用它
static void led_dev_release