2013-12-11 3 views
0

Прочитал Device Tree Usage и дошел до раздела, описывающего атрибут ключа ranges для узла.Понимание механизма дерева устройств

external-bus { 
     #address-cells = <2> 
     #size-cells = <1>; 
     ranges = <0 0 0x10100000 0x10000  // Chipselect 1, Ethernet 
        1 0 0x10160000 0x10000  // Chipselect 2, i2c controller 
        2 0 0x30000000 0x1000000>; // Chipselect 3, NOR Flash 

     [email protected],0 { 
      compatible = "smc,smc91c111"; 
      reg = <0 0 0x1000>; 
      interrupts = < 5 2 >; 
     }; 

     [email protected],0 { 
      compatible = "acme,a1234-i2c-bus"; 
      #address-cells = <1>; 
      #size-cells = <0>; 
      reg = <1 0 0x1000>; 
      interrupts = < 6 2 >; 
      [email protected] { 
       compatible = "maxim,ds1338"; 
       reg = <58>; 
       interrupts = < 7 3 >; 
      }; 
     }; 

     [email protected],0 { 
      compatible = "samsung,k8f1315ebm", "cfi-flash"; 
      reg = <2 0 0x4000000>; 
     }; 
    }; 
  1. В чем разница между ranges и reg?
  2. Каковы размеры диапазонов, как анализатор определяет, что на нем написано?
  3. Одна недостающая часть еще не поняла? Не может содержать .h файлов вместо значений жесткого кодирования в файле .dts?

ответ

2

Свойство «диапазон» отображает один или несколько адресов (второе число слева от диапазона) в текущем узле, узел «внешней шины», адресам в родительском узле (возможно, в ЦП) адресное пространство (третье число в диапазоне). Четвертое число - это длина диапазона. Автобусы могут иметь собственную идею адресов на своей внешней стороне, к которой подключены периферийные устройства, поэтому водителям, которые управляют периферийными устройствами на шине, необходимо знать эти диапазоны, чтобы читать или записывать с устройств.

Свойство «reg» указывает адрес, по которому устройство находится в диапазоне адресов узла (в этом случае «внешняя шина»), в котором определено устройство. Таким образом, в этом случае [email protected],0 находится по адресу 0 во внешнем диапазоне шин и продолжается до адреса 0x04000000. Это соответствует диапазону адресов от 0x30000000 до 0x34000000 в адресном пространстве родительского (CPU).

Я предполагаю, что спецификатор длины третьего диапазона, 2 0 0x30000000 0x1000000>; // Chipselect 3, NOR Flash должен быть фактически 0x04000000, а не 0x1000000.

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