Linux kernel 幻影内核找不到正确的地址

Linux kernel 幻影内核找不到正确的地址,linux-kernel,device-tree,Linux Kernel,Device Tree,我在引导时遇到了一个内核问题,尤其是一个驱动程序。 他寻找的节点的幻影不是我在反编译的dts文件中看到的那个 以下是引导日志: [ 28.110920] From list_name:avdd-supply [ 28.110953] /soc/i2c@75b5000/pcm1864@4b: could not find phandle addr:0x3eb [ 28.116603] 7-004b supply avdd not found, using dummy regulator

我在引导时遇到了一个内核问题,尤其是一个驱动程序。 他寻找的节点的幻影不是我在反编译的dts文件中看到的那个

以下是引导日志:

[   28.110920] From list_name:avdd-supply
[   28.110953] /soc/i2c@75b5000/pcm1864@4b: could not find phandle addr:0x3eb
[   28.116603] 7-004b supply avdd not found, using dummy regulator
[   28.124287] From list_name:dvdd-supply
[   28.129168] /soc/i2c@75b5000/pcm1864@4b: could not find phandle addr:0x3ec
[   28.135623] 7-004b supply dvdd not found, using dummy regulator
[   28.143282] From list_name:iovdd-supply
[   28.148178] /soc/i2c@75b5000/pcm1864@4b: could not find phandle addr:0x3ed
[   28.154621] 7-004b supply iovdd not found, using dummy regulator
完整路径是正确的,例如
/soc/i2c@75b5000/pcm1864@4b
。他在寻找财产的幻影:
avdd supply
在第一行,他在寻找
0x3eb
我猜是物理地址

当我反编译DTBO文件时,我看到另一个幻影值,让我在这里完全打印它:

    pcm1864@4b {
        compatible = "ti,pcm1864";
        reg = <0x4b>;
        avdd-supply = <0x22>;
        dvdd-supply = <0x23>;
        iovdd-supply = <0x24>;
        phandle = <0x1e>;
    };
pcm1864@4b {
compatible=“ti,pcm1864”;
reg=;
avdd供应=;
DVD供应=;
iovdd电源=;
幻影=;
};
例如,您可以看到第一个幻影是
0x22

那么为什么内核在
0x3eb
而不是
0x22
查找节点呢


感谢您的帮助

0x22
很有价值。在对面的幻影上是设备树中的一个指针,看起来应该像
foobar=
。好的,根据该值表示树中设备节点的绝对ID。但您不太可能找到显式定义幻影或在引用幻影时指定u32值的现代设备树源文件。您指的是DTBO(覆盖设备树Blob)文件还是DTB(设备树Blob)文件?覆盖Blob中的幻影是相对的,当覆盖加载到活动设备树中时,将固定为绝对幻影。@0andriy是的,当然,0x22 0x23 0x24是指向其他节点的指针。但是内核没有正确地查找它们。@IanAbbott这是一个完整的DTBO(是覆盖)部分,引导加载程序应该使用0x22、0x23、0x24值正确地修复。我想。。。你是说我在DTBO文件中看到的幻影不是决赛?当引导加载器修复时,它不会接受这些值?引导加载器在将覆盖合并到基础树时,需要向覆盖中的所有幻影添加偏移量。偏移量基于基础树中的当前最大幻影值,因此合并树中的所有幻影都是唯一的。它还需要将偏移量添加到覆盖中的任何本地幻影参考值(例如
avdd supply
属性值),并解析从覆盖到基础树的任何外部幻影参考。覆盖中有特殊节点
\uuuuu local\u fixups\uuuuu
\uuuu fixups\uuuu
,基础树中有特殊节点
\uuuuu symbols\uuuuu
,用于解析交叉引用。