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

Linux 设备树解析中区分 Platform 设备与非 Platform 设备

在 Linux 内核解析设备树 (Device Tree) 时,区分 Platform 设备和非 Platform 设备主要依据以下几个标准:

Platform 设备的识别特征

  1. 直接位于根节点下的设备

    • 设备树中直接挂在根节点 / 下的设备通常会被识别为 Platform 设备

    • 例如:/serial@101f0000

  2. 具有 compatible 属性的节点

    • 任何具有 compatible 属性的节点如果没有被其他总线驱动认领,最终会被当作 Platform 设备处理
  3. 没有明确总线父节点的设备

    • 不属于任何特定总线(如 I2C、SPI、PCI 等)的设备
  4. 典型示例

    • 处理器内置外设(UART、GPIO、定时器等)

    • 内存映射设备

    • 中断控制器

非 Platform 设备的识别特征

  1. 位于特定总线下的设备

    • 如 I2C、SPI、PCI 等总线下的设备节点

    • 例如:/i2c@101f8000/eeprom@52

  2. 有特定总线相关属性

    • 如 I2C 设备的 reg 属性表示 I2C 地址

    • SPI 设备的 reg 属性表示片选号

  3. 被特定总线驱动处理

    • 由对应的总线控制器驱动处理并创建相应的设备

内核处理流程

内核通过以下方式区分设备类型:

  1. 设备树扫描

    • 内核首先扫描设备树中的所有节点
  2. 总线类型匹配

    • 对每个节点,内核检查其父节点是否关联了某种总线驱动

    • 如果父节点是 I2C、SPI 等总线,则创建对应的非 Platform 设备

  3. Platform 设备回退

    • 如果节点不属于任何已知总线类型,且具有 compatible 属性

    • 内核会将其注册为 Platform 设备

示例对比

Platform 设备示例

text

复制代码
/ {
    serial@101f0000 {
        compatible = "arm,pl011";
        reg = <0x101f0000 0x1000>;
        interrupts = <0 35 4>;
    };
}

非 Platform 设备 (I2C) 示例

text

复制代码
/ {
    i2c@101f8000 {
        compatible = "arm,versatile-i2c";
        reg = <0x101f8000 0x1000>;
        #address-cells = <1>;
        #size-cells = <0>;
        
        eeprom@52 {
            compatible = "atmel,24c256";
            reg = <0x52>;
        };
    };
}

在第二个示例中,eeprom@52 是 I2C 设备,不会被当作 Platform 设备处理。

相关推荐
bosins26 分钟前
WSL2 启动即崩溃?调整超时参数解决 Docker 阻塞问题
linux·docker·wsl
web守墓人1 小时前
【goed/ui】自定义组件设计思想篇
linux·windows·ui·golang
码农学院1 小时前
企业官网改版后 AI 引用归零的复盘:301 重定向断层让爬虫索引掉线,修复方案与恢复数据
运维·geo优化·ai优化aio
kuroomi1 小时前
Ingress-Nginx与kubernetes 网络
linux·运维·网络·kubernetes
当下新鲜事1 小时前
空调机房冷冻泵与冷却泵技术分析:赛莱默B&G背包式智能变频管道泵的工程应用
运维·物联网·业界资讯
EasyGBS1 小时前
终结训推割裂!EasyGBS×EasyAIS×DLTM,实现AI算法训推一体闭环落地!
服务器·深度学习·安全
daemon.qiang2 小时前
国内虚拟机对接 Freedesktop:Fork xserver、自建 Runner 与提交 MR 实战
linux·ubuntu·centos·gitlab·开源软件
Doris__HE3 小时前
【元脑服务器NF5476G7-NF5476M7技术规格分享】
运维·服务器·网络·数据库·性能优化
2401_869769593 小时前
linux 权限 指令与权限(重启之后)
linux
码农客栈3 小时前
Linux CAN 驱动
linux·驱动开发