设备树冲突怎么排查

在使用 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)

dmesg

报地址冲突

是否有多个设备使用同一个物理地址范围(

reg = <...>

❗ 中断冲突(interrupts)

中断无法触发、驱动加载失败

中断号是否唯一、是否符合平台的中断映射规则

❗ 时钟冲突(clocks)

驱动 probe 失败

时钟名是否和 clock controller 匹配,是否已启用

❗ 节点重复

dmesg

报 already exists

多个

.dts

文件包含相同路径或 label

📂 3. 检查设备树结构

使用反编译工具查看最终设备树(*.dtb):

dtc -I dtb -O dts -o out.

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

嵌入式面试八股文全集 文章被收录于专栏

这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论
转人工
点赞 回复 分享
发布于 07-24 14:46 上海

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务