真实面经题目 · 原创解析
platform 与设备树是什么关系,二者有什么区别?
这题考 Linux 设备模型基础,回答要区分 platform 是非可发现设备的总线/驱动框架,设备树是描述硬件资源的数据来源。
真实面经题目 · 原创解析
这题考 Linux 设备模型基础,回答要区分 platform 是非可发现设备的总线/驱动框架,设备树是描述硬件资源的数据来源。
platform 和设备树不是同一层东西。platform bus 是 Linux 设备模型里的一个总线类型,用来管理很多不能像 PCI/USB 那样自枚举的片上外设和板级设备;它有 platform_device、platform_driver、match、probe/remove 这些机制。设备树是一种硬件描述数据,描述某块板上有哪些设备、寄存器地址、中断、时钟、GPIO、pinctrl、供电等资源。启动时内核解析设备树,把匹配条件合适的节点创建成 platform_device 或其他总线设备,platform driver 再通过 compatible 或 name 匹配并 probe。区别是:platform 是运行时设备/驱动模型,设备树是板级硬件描述。没有设备树也可以通过板级代码或 ACPI 创建 platform_device;有设备树的节点也不一定都是 platform 设备,比如总线子节点可能生成 I2C client、SPI device。
很多 SoC 内部外设没有自描述枚举能力,内核需要预先知道它存在。platform bus 提供设备、驱动、资源和 probe 绑定机制。
设备树描述板级事实:地址、中断、时钟、复位、GPIO、供电、引脚状态和子设备关系。它本身不是驱动,也不是总线操作代码。
内核启动时扫描设备树节点,根据 bus 类型创建不同设备对象。根下或 simple-bus 下的外设常变成 platform_device,挂在控制器下的从设备会变成对应子系统设备。
platform driver 在 probe 中用 platform_get_resource、platform_get_irq、devm_clk_get、gpiod_get 等接口拿到设备树描述的资源,而不是自己解析所有属性。
常见来源是设备树 reg、interrupts 等属性解析后的 resource,也可以来自板级代码或 ACPI。
不会。总线控制器、子节点类型、compatible 和内核解析规则不同,可能生成平台设备、I2C 设备、SPI 设备或只作为配置节点。
我会先看 dmesg 和返回码,再查 /sys 下设备、驱动和资源状态,必要时加 trace/ftrace 或最小日志,先证明问题出在设备生成、匹配、资源获取、回调路径还是用户态交互。