linux 解析设备树文件时,怎么区分是属于Platform 设备和非Platform 设备2

在Linux内核中,设备树(Device Tree,DT)是一种描述硬件系统资源的结构化数据。解析设备树文件时,如何区分设备是属于platform设备还是非platform设备,主要取决于设备的驱动框架和注册方式。以下是区分方法和相关原理:


1. Platform设备的特点

Platform设备(platform_device)是一种与系统总线无关的设备类型,通常用于嵌入式系统中。它们没有严格依赖于特定的硬件总线(如PCI、USB等),而是通过设备树或其他方式直接描述。

判断设备是否属于Platform设备
  • 匹配的驱动框架:如果该设备被绑定到platform_driver,那么它就是一个Platform设备。
  • 设备树描述方式
    • 在设备树中,Platform设备通常通过compatible属性与其驱动匹配。
    • 设备树节点的属性中没有特定的总线信息(如PCI、I2C、SPI等),或者写的是simple-bus
    • 设备绑定的驱动通常通过platform_driver注册。
  • 内核代码解析
    在设备树解析时,of_platform_populate()函数会扫描设备树中的节点,并将其注册为platform_device
代码检查

可以通过以下方式确认设备是否是Platform设备:

  • 检查内核中驱动的注册代码是否使用了platform_driver_register()
  • 检查设备的compatible属性是否与platform_driverof_match_table匹配。
  • 查阅设备树的相关节点是否是通过simple-bus或直接挂载在根节点下的。

2. 非Platform设备的特点

非Platform设备是指依赖于特定硬件总线的设备,例如:

  • PCI设备
  • I2C设备
  • SPI设备
  • USB设备
判断设备是否属于非Platform设备
  • 匹配的驱动框架:该设备会绑定到特定总线的驱动框架,例如:
    • PCI设备绑定到pci_driver
    • I2C设备绑定到i2c_driver
    • SPI设备绑定到spi_driver
  • 设备树描述方式
    • 非Platform设备的设备树节点通常包含特定总线的信息。例如:
      • PCI设备会有reg属性,描述PCI配置空间地址。
      • I2C设备会有i2c父节点和从设备地址。
      • SPI设备会有spi父节点和从设备信息。
    • 设备通常通过总线的of_xxx_populate()函数解析并注册。
  • 内核代码解析
    • 根据设备树中描述的总线类型,内核会调用对应总线的解析函数(如of_i2c_register_devices()of_spi_register_master()等)。
    • 设备会注册为对应总线的设备类型(如i2c_devicespi_device等)。
设备树中典型特征
  • I2C设备:挂载在i2c总线节点下,包含reg属性表示从设备地址。
  • SPI设备:挂载在spi总线节点下,包含reg属性或cs-gpios表示片选信息。
  • PCI设备:挂载在pci节点下,包含reg属性表示PCI地址信息。

3. 设备树解析流程

Linux内核解析设备树的流程如下:

  1. 挂载设备树根节点(of_root),并迭代扫描各节点。
  2. 根据节点的compatible属性,匹配适配的驱动程序。
  3. 如果节点没有特定总线信息,则通常注册为platform_device
  4. 如果节点包含特定总线信息,则注册为对应总线类型的设备。

4. 总结

  • Platform设备
    • 与硬件总线无关。
    • 通常通过compatible属性匹配驱动。
    • 使用platform_deviceplatform_driver框架。
  • 非Platform设备
    • 依赖于具体的硬件总线(PCI、I2C、SPI等)。
    • 需要在设备树中明确标注总线信息。
    • 使用特定总线的设备和驱动框架(如i2c_devicespi_device等)。

通过检查设备树文件中节点的结构以及驱动框架的注册方式,可以准确区分设备是属于Platform设备还是非Platform设备。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值