Platform总线设备驱动中非常重要的结构体`platform_device`的详细介绍【以及如何查看系统中存在的`platform_device`结构体的记录文件】

后期补充说明:

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。
  • 用途
  • 示例
    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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值