GGHGHGH33 2024-02-19 22:47 采纳率: 0%
浏览 21
已结题

platform下device私有数据是怎么初始化的

在linux驱动中,驱动和设备树匹配成功后会调用
dev_get_platdata,实际上就是将device下的私有数据给了申请的一个结构体。这个操作之后有的代码竟然是用私有结构的值付给了其他的变量。我得疑问是什么时初始化的平台私有数据,为什么这个平台私有数据就能适配很多很多结构体,我得错误在哪里呢?很难受,有帮忙解答一下可以吗。

  • 写回答

23条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-19 22:48
    关注
    获得0.60元问题酬金

    引自免费微信小程序:皆我百晓生

    在Linux设备驱动中,平台私有数据(platform-specific data)的初始化通常发生在设备树(Device Tree)编译时或系统启动阶段。当内核解析设备树并匹配到对应的驱动时,它会从设备树中提取出为特定设备指定的私有数据,并将其传递给驱动程序。

    以下是一个简化的概念性描述:

    1. Device Tree中的私有数据声明:在DTS(Device Tree Source)文件中,可以为每个设备节点定义一个reg属性或其他自定义属性来存储私有数据。例如:
    &amba_pl08x {
        compatible = "example,my-device";
        reg = <0x0 0x12345678>;
        my-private-data = <0xAABBCCDD>;
    };
    
    1. 驱动中的结构体定义与获取:在Linux驱动代码中,你需要定义一个结构体来接收这些私有数据。这个结构体通常包含一些和具体硬件配置相关的字段。在 probe 函数(如 platform_driver_probe)中,通过 dev_get_platdata() 或者 of_device_get_match_data() 来获取设备树中的私有数据,并将其赋值给你的私有结构体。
    static struct my_device_pdata pdata;
    
    static int my_driver_probe(struct platform_device *pdev)
    {
        struct device_node *np = pdev->dev.of_node;
        if (np) {
            pdata = *(struct my_device_pdata *)of_get_matching_platform_data(pdev);
            // 或使用 devm_platform_get_drvdata(pdev) 获取并初始化 pdata
        } else {
            // 对于非 Device Tree 方式,可能从 platfrom_data 中获取
            pdata = *(struct my_device_pdata *)dev_get_platdata(&pdev->dev);
        }
    
        // 现在pdata包含了从设备树中提取的私有数据,可以用于初始化硬件或者其他目的
        ...
    }
    
    1. 为什么能适配多种结构体:这是因为设备树机制允许你将任意大小和格式的数据作为私有数据存储。在编写驱动时,你可以设计相应的结构体去匹配并解析这些数据。不同的设备可能会有不同的私有数据结构,但只要在驱动内部处理得当,就可以正确地初始化各个设备的私有数据。

    需要注意的是,实际代码会根据具体的设备类型、内核版本以及是否采用Device Tree机制有所不同。务必参考对应内核文档和驱动示例进行编写。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 修改了问题 2月19日
  • 创建了问题 2月19日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀