In the aliases
section of a DTS, we see entries of the format
property = &label;
Each of the entries consists of :
a. property
-- A new property defined here.
b. &label
-- Complete DTS path to the node
referenced by the label
.
It basically assigns the value of b to a. Henceforth, the long-name to the node identified by the label
can be accessed using the shorthand property
.
Note that the RHS of this assignment is using label
s and NOT the short-names of the individual nodes. Just like a label
in C code refers to an instruction on the line where it is defined, a label
in DTS refers to the individual node (using its complete long path) that is defined on that line.
For example, considering the following DTS,
lxr.free-electrons.com/source/arch/powerpc/boot/dts/mpc8313erdb.dts
whose aliases
section consists of the following :
20 aliases {
21 ethernet0 = &enet0;
22 ethernet1 = &enet1;
23 serial0 = &serial0;
24 serial1 = &serial1;
25 pci0 = &pci0;
26 };
The newly defined properties (LHS)
ethernet0
ethernet1
serial0
serial1
pci0
refer to the corresponding labels (RHS)
For example, the property ethernet0
is now set to "/soc8313@e0000000/ethernet@24000"
i.e. the node defined on the line where the label enet0
is defined.
UPDATE :
Why are aliases defined ONLY for
ethernet0
,serial0
... ?Further down the line, the developer intends to access these nodes in the kernel source code. Once an alias is defined in the DTS, a handle to the node it is referring to is obtained by simply searching for it in the
aliases
section rather than searching for it in the entire DTS.Source: The function find_node_by_alias() in the Linux kernel source.
Why
pci0
node in NOT under thesoc8313
node?- On MPC8313, the PCI and DMA blocks are interfaced via the IO-Sequencer(IOS). Hence the special treatment as compared to the other blocks (ethernet, I2C, UART) that are connected directly to the system bus.