phandle用作设备树节点名称时的含义是什么?

Irr*_*Irr 3 arm linux-device-driver linux-kernel device-tree

此代码段来自RIoTBoard的设备树(/arch/arm/boot/dts/imx6dl-riotboard.dts

&hdmi {
         ddc-i2c-bus = <&i2c2>;
         status = "okay";
};
Run Code Online (Sandbox Code Playgroud)

我已经遍历了devicetree.org和linux内核的documentation / devicetree文件夹中的设备树文档,但是当用作节点名称时,我无法找到任何有关phandle含义的描述。

rem*_*les 6

我认为问题更多的是关于&hdmi示例的部分,&特别是使用节点名称的引用。设备树内&文件有两种含义:一种用于数组中的项目,另一种用于数组外部的项目。

  • 在数组中,&引用将扩展为 phandle。

  • 在数组之外,&引用将扩展到您所引用的节点的路径。

更多信息请点击这里:

https://elinux.org/Device_Tree_Mysteries#Labels

https://elinux.org/Device_Tree_Mysteries#Label_as_a_phandle_vs_Label_as_a_path


小智 6

我用一个例子来回答:

label:node {
  #address-cell = <1>;
  #size-cells = <0>;
}

&label {
  proporties = <2>;
};
Run Code Online (Sandbox Code Playgroud)

方法:

label:node {
  #address-cell = <1>;
  #size-cells = <0>;
  proporties = <2>;
}
Run Code Online (Sandbox Code Playgroud)


a.s*_*abh 5

您可以将phandle理解为该节点的某种指针,该指针指向保存在同一文件或另一个文件中的该节点的定义。我可以从下面的链接中以AM33xx SoC时钟文件为例来说明虚拟概念:

http://lxr.free-electrons.com/source/arch/arm/boot/dts/am33xx-clocks.dtsi

以下是看门狗的功能时钟:

wdt1_fck: wdt1_fck {
             #clock-cells = <0>;
             compatible = "ti,mux-clock";
             clocks = <&clk_rc32k_ck>, <&clkdiv32k_ick>;
             reg = <0x0538>;
};
Run Code Online (Sandbox Code Playgroud)

现在wdt1_fck具有两个父时钟源:clk_rc32k_ck和clkdiv32k_ick

这些是句柄,或者您可以说出它们的时钟定义的指针:

clk_rc32k_ck: clk_rc32k_ck {
             #clock-cells = <0>;
             compatible = "fixed-clock";
             clock-frequency = <32000>;
};

clkdiv32k_ick: clkdiv32k_ick {
             #clock-cells = <0>;
             compatible = "ti,gate-clock";
             clocks = <&clkdiv32k_ck>;
             ti,bit-shift = <1>;
             reg = <0x014c>;
};
Run Code Online (Sandbox Code Playgroud)

因此,基本上phandle可以在整个文件中使用节点的定义。