5

DTS ファイルから次のスニペットを理解しようとしています。

/dts-v1/;

/ {
    model = "MPC8313ERDB";
    compatible = "MPC8313ERDB", "MPC831xRDB", "MPC83xxRDB";
    #address-cells = <1>;
    #size-cells = <1>;

    aliases {
        ethernet0 = &enet0;
        serial0 = &serial0;
        serial1 = &serial1;
        pci0 = &pci0;
    };

エイリアス部分は何をしますか?
私の理解は次のとおりです。
ethernet0 には、enet0 を使用できます。
しかし、なぜ serial0=&serial0 なのですか?
そしてserial1 = &serial1
誰でも簡単に説明できますか?

ありがとう。

4

1 に答える 1

10

aliasesDTSのセクションには、フォーマットのエントリが表示されます

property = &label;

各エントリは次のもので構成されます
。--ここで定義されpropertyた新しいプロパティ。
b. &label--によって参照されるへの完全な DTS パスnodelabel

基本的にbの値をaに代入します。以降、 によって識別されるノードの長い名前にはlabel、短縮形 を使用してアクセスできますproperty

この割り当ての RHS は、個々のノードの短縮名ではなく、s を使用していることに注意しくださいlabel。C コードの a が定義されている行の命令を参照するように、DTS の a は、その行で定義されている個々のノード (完全な長いパスを使用) を参照します。labellabel

たとえば、次の DTS を考えます。
lxr.free-electrons.com/source/arch/powerpc/boot/dts/mpc8313erdb.dts

そのaliasesセクションは次のもので構成されています:

 20         aliases {
 21                 ethernet0 = &enet0;
 22                 ethernet1 = &enet1;
 23                 serial0 = &serial0;
 24                 serial1 = &serial1;
 25                 pci0 = &pci0;
 26         };

新しく定義されたプロパティ (LHS)

  • ethernet0
  • ethernet1
  • serial0
  • serial1
  • pci0

対応するラベルを参照してください (RHS)

たとえば、プロパティethernet0は現在、ラベルが定義"/soc8313@e0000000/ethernet@24000"されている行で定義されているノードに設定されています。enet0


更新

  1. ethernet0エイリアスが, serial0...に対してのみ定義されるのはなぜですか?

    • さらに、開発者は、カーネル ソース コード内のこれらのノードにアクセスする予定です。エイリアスが DTS で定義されると、それが参照しているノードへのハンドルはaliases、DTS 全体で検索するのではなく、セクションで検索するだけで取得されます。

      ソース: Linux カーネル ソースの関数find_node_by_alias() 。

  2. ノードの下にpci0ノードがないのはなぜsoc8313ですか?

    • MPC8313 では、PCIおよびDMAブロックは IO-Sequencer (IOS) を介してインターフェースされます。したがって、システム バスに直接接続されている他のブロック (イーサネット、I2C、UART) と比較して、特別な処理が行われます。
于 2013-07-19T10:23:47.607 に答える