Описание файла DTS - псевдонимы

Я пытаюсь понять следующий фрагмент из файла 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
Кто-нибудь может кратко рассказать, пожалуйста ?

Спасибо.


person New to Rails    schedule 19.07.2013    source источник


Ответы (1)


В разделе aliases DTS мы видим записи формата

property = &label;

Каждая запись состоит из:
a. property - здесь определено новое свойство.
b. &label - Полный путь DTS к node, на который ссылается label.

По сути, он присваивает a значение b. Отныне к длинному имени узла, идентифицированного label, можно будет получить доступ с помощью сокращенного имени property.

Обратите внимание, что правая часть этого назначения использует labels, а НЕ - сокращенные имена отдельных узлов. Точно так же, как 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

см. соответствующие этикетки (RHS)

Например, для свойства ethernet0 теперь установлено значение "/soc8313@e0000000/ethernet@24000", т. Е. Узел, определенный на строка, в которой определена метка enet0.


ОБНОВЛЕНИЕ:

  1. Почему псевдонимы определены ТОЛЬКО для ethernet0, serial0 ...?

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

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

  2. Почему узел pci0 находится в НЕ под узлом soc8313?

    • 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.
person TheCodeArtist    schedule 19.07.2013
comment
Большое спасибо TheCodeArtist за то, что снова меня спасли. Теперь я понимаю, что они больше похожи на псевдонимы, которые мы установили в оболочке unix для обозначения полного пути. mpc8313erdb.dts - это именно тот файл dts, который я исследую. Ты мой спаситель. Почему мы определяем псевдонимы только для ethernet0 = serial0 = serial1 = pci0 = И pci0 не находится в soc. - person New to Rails; 19.07.2013
comment
В моем файле dts для pic0 установлено значение / pci @ e0008500? Зачем это нужно делать? - person New to Rails; 19.07.2013
comment
Я обновил ответ подробностями. Хотя я не могу найти точное место, где pci0 упоминается в коде, я нашел его для ethernet0 здесь. Изучение внутреннего устройства этой функции должно помочь вам понять и оценить красоту дерева устройств. - person TheCodeArtist; 19.07.2013
comment
Святая корова .. TheCodeArtist ты просто все знаешь. Большое спасибо. - person New to Rails; 19.07.2013
comment
Как вы нашли функцию с использованием псевдонимов? find_node_by_alias () и узел, на который ссылается ethernet0? Grepped ethernet0? Не могли бы вы поделиться? Я бы хотел знать. А где взять пояснения к файлу DTS. Я пытаюсь реконструировать весь файл. Я имею в виду devicetree.org/Device_Tree_Usage и power.org/documentation/epapr-version-1-1 Не могли бы вы поделиться своими ресурсами? - person New to Rails; 19.07.2013
comment
Ага, вы абсолютно правы - grep-ing ethernet0 внутри arch/powerpc и следование цепочке вызовов функций полностью вниз. Вот серия статей, объясняющих основы устройства-дерева. - person TheCodeArtist; 19.07.2013
comment
Большое спасибо, друг. Ты великолепен. Спасибо, что поделились техникой и ссылкой. - person New to Rails; 20.07.2013