设备树冲突怎么排查
在使用 Linux 设备树(Device Tree) 加载驱动或外设时出现冲突,一般表现为:
- 内核日志提示资源冲突(如地址或中断冲突)
- 设备注册失败(probe 被跳过或返回错误)
- 驱动没有加载成功(
dmesg
中无设备信息)
下面是详细的排查步骤与常见问题:
🛠️ 1. 查看内核日志(最重要)
dmesg | grep -i "error" dmesg | grep -i "of:" dmesg | grep -i "resource"
你会看到如:
[ 0.512345] OF: amba_device_add() failed: address already in use [ 0.512678] of_irq_parse_pci: irq already used
这些日志能直观告诉你哪个节点、哪个资源发生冲突。
🔍 2. 常见冲突类型及排查方式
❗ 地址冲突(reg) |
报地址冲突 |
是否有多个设备使用同一个物理地址范围(
) |
❗ 中断冲突(interrupts) |
中断无法触发、驱动加载失败 |
中断号是否唯一、是否符合平台的中断映射规则 |
❗ 时钟冲突(clocks) |
驱动 probe 失败 |
时钟名是否和 clock controller 匹配,是否已启用 |
❗ 节点重复 |
报 already exists |
多个
文件包含相同路径或 label |
📂 3. 检查设备树结构
使用反编译工具查看最终设备树(*.dtb):
dtc -I dtb -O dts -o out.
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。