В секции DTS aliases
, мы видим записи формата
property = &label;
Каждая запись состоит из:
а. property
- Новый Недвижимость определяется здесь.
b. &label
- Полный путь DTS к node
, на который ссылается label
.
В основном он присваивает значение b до a. Отныне длинное имя узла, идентифицированное label
, можно получить, используя стенографию property
.
Обратите внимание, что RHS этого назначения использует label
s и NOT краткие имена отдельных узлов. Точно так же, как label
в коде C относится к команде в строке, где она определена, label
в DTS относится к отдельному узлу (с использованием его полного длинного пути), который определен в этой строке.
Например, принимая во внимание следующие 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
относится к соответствующим меткам (РИТЫ)
Например, свойство ethernet0
теперь установлено в "/[email protected]/[email protected]"
т.е. узла, определенного на the line where the label enet0
is defined.
UPDATE:
Почему псевдонимы определены только для ethernet0
, serial0
...?
Далее по линии разработчик намерен получить доступ к этим узлам в исходном коде ядра. Как только псевдоним определен в DTS, дескриптор к узлу ссылается на, получается просто найти его в разделе aliases
, а не искать его во всей DTS.
Источник: Функция find_node_by_alias() в источнике ядра Linux.
Почему pci0
узел в НЕ под soc8313
узел?
- На MPC8313, то PCI и DMA блоки сопрягаются через IO-Sequencer (IOS).Следовательно, специальное лечение по сравнению с другими блоками (ethernet, I2C, UART), которые подключаются непосредственно к системной шине.
Большое спасибо TheCodeArtist за спасение меня снова. Теперь я понимаю, что они больше похожи на псевдонимы, которые мы устанавливаем в оболочке unix, чтобы ссылаться на полный путь. mpc8313erdb.dts - это точный файл dts, который я изучаю. Ты мой спаситель. Почему мы определяем псевдонимы только для ethernet0 = &enet0; serial0 = & serial0; serial1 = & serial1; pci0 = &pci0; И pci0 не находится под soc. –
В моем файле dts pic0 установлен в "/ pci @ e0008500"? Что нужно делать? –
Я обновил ответ с подробностями. Хотя я не могу найти точное местоположение, где 'pci0' ссылается на код, я нашел его для' ethernet0' ** [здесь] (http://lxr.free-electrons.com/source/arch/powerpc/boot /cuboot-83xx.c#L27)**. Изучение внутренних функций этой функции поможет вам понять и оценить красоту устройства-дерева. – TheCodeArtist