Linux内核如何匹配compatible="ti,omap4-cm"的设备树节点?
解惑:OMAP4设备树中
ti,omap4-cm的匹配逻辑 OMAP4的时钟管理模块(CM)硬件上分为两个独立子模块:CM1(负责全局、Core等域的时钟/电源管理)和CM2(负责MPU域的时钟/电源管理),内核驱动也对应拆分为两个实例。针对你遇到的问题,ti,omap4-cm的匹配逻辑主要有以下几种可能:
1. TI定制内核的兼容补丁
你使用的是ti-linux-5.10.168,这是TI维护的定制内核分支,大概率包含上游Linux没有的兼容处理:
- 检查
arch/arm/mach-omap2/cm_common.c或arch/arm/mach-omap4/目录下的代码,可能存在对ti,omap4-cm的兼容映射——比如在OF匹配表中添加"ti,omap4-cm"作为ti,omap4-cm1/ti,omap4-cm2的别名,或者在设备树解析阶段将ti,omap4-cm节点重定向到对应子模块的驱动。
2. 设备树兼容链的隐式匹配
如果DT节点的compatible是数组形式(而非单一字符串),例如:
compatible = "ti,omap4-cm", "ti,omap4-cm1";
内核OF匹配机制会优先匹配更精确的ti,omap4-cm1,ti,omap4-cm仅作为旧版兼容字符串保留。若你看到的DT只写了单一ti,omap4-cm,可能是TI定制DT省略了后续兼容项,但内核驱动通过补丁添加了对该字符串的直接匹配。
3. 平台设备的手动绑定
OMAP4早期内核实现中,部分平台设备通过mach代码手动注册,而非完全依赖OF匹配。检查arch/arm/mach-omap4/omap4.c中的omap4_init_early()或omap4_init_late()函数,是否存在解析ti,omap4-cm节点并与cm_driver绑定的逻辑。
快速验证方法
在内核源码中全局搜索该兼容字符串,定位匹配逻辑:
grep -r "ti,omap4-cm" arch/arm/mach-omap2/ arch/arm/mach-omap4/ drivers/clk/ti/
同时检查对应DT文件,确认compatible是否为数组形式,是否包含ti,omap4-cm1/ti,omap4-cm2作为后续项。
内容的提问来源于stack exchange,提问作者Hao Zhang
相关产品推荐
相关产品推荐

