SuperAPI AI 工具集

platform-device-model

通用与其它

查看项目

更新于 10-16 01:18

技能介绍

用途:解释 Linux 驱动模型中平台总线(及类似总线)的机制,包括 struct device、device_driver、probe/remove、资源获取、sysfs 与延迟探测,是设备树与驱动代码之间的衔接层。

适用场景:实现或调试 platform_driver 生命周期;通过 sysfs 暴露驱动状态;理解 uevent/udev 设备节点创建;也可作为编写字符设备驱动前的准备。

主要能力与用法:

  1. 对象层次:bus_type(platform、amba、pci、i2c、spi)下挂 struct device(硬件实例)与 struct device_driver(驱动逻辑),后者提供 probe(dev)/remove(dev)。平台设备常来自设备树(of_platform)或旧式板级文件。
  2. 驱动骨架:在 probe 中用 platform_get_resource 获取 IORESOURCE_MEM,再用 devm_ioremap_resource 映射;用 platform_set_drvdata 保存私有数据;remove 中依赖 devm_* 自动清理;通过 platform_driver 结构注册 probe/remove 与 driver.name、of_match_table,最后用 module_platform_driver 注册。建议优先使用 devm_* 辅助函数实现自动回退。
  3. 设备属性:用 device_property_read_u32 读取 DT/ACPI 属性,用 device_property_present 判断属性是否存在。
  4. sysfs:定义 device_attribute 与 show 函数(如 sysfs_emit),用 DEVICE_ATTR_RO 声明,在 probe 中通过 device_create_file 创建。
  5. 延迟探测:当时钟、稳压器或总线未就绪时返回 -EPROBE_DEFER,核心会稍后重试。
  6. 调试:可查看 /sys/bus/platform/devices/、/sys/bus/platform/drivers/、/sys/kernel/debug/devices_deferred(需启用 debugfs),并用 udevadm monitor 观察。

常见问题:probe 返回 -EBUSY 多为资源被重复占用;无 /dev 节点通常是字符设备未注册;一直延迟探测说明依赖的供应方驱动缺失;remove 崩溃常因手动释放与 devm 混用;名称不匹配需注意 .name 与 compatible,OF 使用 of_match_table。

限制:资料未提供具体内核版本、完整示例代码或平台差异说明,实际使用需结合目标内核与硬件环境验证。