|
进入ARM64位后,device tree就被作为一个强制的选项加入到内核当中,工作的很大一部分时间也都花在了修改device tree上
所以在使用基于ARM64的硬件设备开发时,很有必要对device tree有所了解,这里将简单介绍驱动是如何使用device tree的
Device Tree是用于描述硬件信息的,所以DeviceTree里的内容基本上是来源于芯片手册(datasheet)
下面先举例简单说明部分内容的来源(下面内容是基于HiKey开发板来编写的,原理都能通用)
下面的内容是来源于hikey所使用的device tree文件(hi6220-hikey.dts)
uart@f8015000 {
compatible = "arm,pl011", "arm,primecell";
reg = <0x0 0xf8015000 0x0 0x1000>;
interrupts = <0x0 0x24 0x4>;
clocks = <0xe 0x28>;
clock-names = "apb_pclk";
status = "ok";
};
可以看到这是一个描述板卡上串口信息的内容,格式如下
node_name@register_address {
compatible = "compatible_name";
};
node_name只是一个标识,@后面寄存器地址
register_address 可以在芯片hi6220手册找到,入下图描述
reg = <> 这里面也是用于描述UART控制器的寄存器的起始地址及其长度
interrupts 表示中断信息
clocks 描述它的时钟源
这些信息在开发板上也可以通过proc下的节点来看到
所有的device tree里的信息都在/proc/device-tree下
root@hikey:/proc/device-tree/smb/uart@f8015000 # ls -l
-r--r--r-- root root 9 1970-01-01 00:02 clock-names
-r--r--r-- root root 8 1970-01-01 00:02 clocks
-r--r--r-- root root 24 1970-01-01 00:02 compatible
-r--r--r-- root root 12 1970-01-01 00:02 interrupts
-r--r--r-- root root 5 1970-01-01 00:02 name
-r--r--r-- root root 16 1970-01-01 00:02 reg
-r--r--r-- root root 3 1970-01-01 00:02 status
其中name,compatible是文本类接口给的可以用cat来查看的
如果想要查看其它信息,比如clocks,需要使用查看二进制的工具查看(这里就用到上一篇文章的busybox了)
root@hikey:/proc/device-tree/smb/uart@f8015000 # busybox hexdump clocks
0000000 0000 0e00 0000 2800
0000008
可以看到值和上面device tree里描述的一致
查看reg信息
root@hikey:/proc/device-tree/smb/uart@f8015000 # busybox hexdump reg
0000000 0000 0000 01f8 0050 0000 0000 0000 0010
0000010
这样就方便开发的时候检查是否有修改正确device tree文件以便调试
其它设备的信息都和上面的例子一样
这里先简答介绍一下,后续将从零开始写一个device tree来用于hi6220,以便详细的了解device tree的编写以及HiKey开发板硬件的信息,未完待续 |
|