5

Я пытаюсь понять следующий фрагмент из файла DTS.DTS file explain - aliases

/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
Может кто-нибудь сообщить пожалуйста?

Спасибо.

ответ

7

В секции 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:

  1. Почему псевдонимы определены только для ethernet0, serial0 ...?

    • Далее по линии разработчик намерен получить доступ к этим узлам в исходном коде ядра. Как только псевдоним определен в DTS, дескриптор к узлу ссылается на, получается просто найти его в разделе aliases, а не искать его во всей DTS.

      Источник: Функция find_node_by_alias() в источнике ядра Linux.

  2. Почему pci0 узел в НЕ под soc8313 узел?

    • На MPC8313, то PCI и DMA блоки сопрягаются через IO-Sequencer (IOS).Следовательно, специальное лечение по сравнению с другими блоками (ethernet, I2C, UART), которые подключаются непосредственно к системной шине.
+0

Большое спасибо TheCodeArtist за спасение меня снова. Теперь я понимаю, что они больше похожи на псевдонимы, которые мы устанавливаем в оболочке unix, чтобы ссылаться на полный путь. mpc8313erdb.dts - это точный файл dts, который я изучаю. Ты мой спаситель. Почему мы определяем псевдонимы только для ethernet0 = &enet0; serial0 = & serial0; serial1 = & serial1; pci0 = &pci0; И pci0 не находится под soc. –

+0

В моем файле dts pic0 установлен в "/ pci @ e0008500"? Что нужно делать? –

+0

Я обновил ответ с подробностями. Хотя я не могу найти точное местоположение, где 'pci0' ссылается на код, я нашел его для' ethernet0' ** [здесь] (http://lxr.free-electrons.com/source/arch/powerpc/boot /cuboot-83xx.c#L27)**. Изучение внутренних функций этой функции поможет вам понять и оценить красоту устройства-дерева. – TheCodeArtist

 Смежные вопросы

  • Нет связанных вопросов^_^