引入设备树的原因:
Linux3.1之前的版本,对于一般的ARM平台的设备,板级信息一般存放在/arch/arm/mach-**目录下。这些代码存在大量重复。避免各个厂商代码的重复,加速linux内核的bsp的开发。编译一个镜像可以支持多个不同设备,只需要编译对应的设备树并打包就可以。
设备树:一种描述板子硬件信息的数据结构,设备树源文件存放在/arch/arm/boot/dts/***.dts目录下。设备树最终编译生成dtb文件,通过BootLoader从emmc中和内核一块加载到内存。设备树存放的地址由BootLoader保存在R2寄存器中传递给内核(Linux3.1版本之前保存的是参数列表的地址)。
设备树源文件:
包含信息CPU、总线、串口、物理内存、GPIO、控制器信息等等(类似我们之前的板级信息mach--XX);
BootLoader传递设备树给内核:
没有设备树:【Linux3.1之前参数列表的大小较小】
bootm <uImage_addr>
有设备树:
bootm <uImage_addr> <initrd_addr> <dtb_addr>
dtb文件存放地址:
【注】uboot在跳转到内核之前,自己将自己拷贝到内存高地址。设备树25K通常放在zimage之后。
设备树详细语法知识:参考链接
https://blog.csdn.net/radianceblau/article/details/70800076
https://blog.csdn.net/qq_16777851/article/details/87202588