uboot中DTS相关处理(1 )

1、boot img中各种img分布及各img加载到内存地址


boot  img
bootimg img szie Mem Addr
boot header bootloader sz (2048B) 读取到指定的数组结构中
kernel kernel sz 0x80008000
Ramdisk Ramdisk sz 0x85500000
Device Tree DT imgsz 0x85400000

上图数据以SPRD SC7731平台为例 ,注意XXX sz需要kernelpage size对齐。


2、uboot中对与DT img的相关处理

          在uboot阶段首先会从bootimg所在的分区中读取DTS的 img文件,然后对读取的到数据进行判断;首先判断头部数据是否符合设定,再进行platfom_id, hardware_id, soc_revision 进行判断,如果与设定一致则认为此DTS(blod)结构与系统匹配,则经被拷贝到DT_addr 指向的内存空间,在启动内核的此地址作为参数被传入到kernel。

 

         根据的上述的platform_id … 等匹配过程可知,在一个dts img文件中可以兼容多个不同系统配置的dts , 在uboot阶段可以将dts中platform_id与设定的platform_id 比较来决定适应哪组 dts文件。

 

         DTS在uboot阶段还有一些重要的数据组合、追加。如 calibrate data、Dram param、device info、boot mode 、boot cmd ...

 

        u-boot启动kernel函数如下:

                              theKernel(0, machine_type, fdt_blob);   //theKernel为指向0x80008000 的地址函数

                                                                                                   // 0 -----> R0、

                                                                                                  // machine_type----->  R1 、 

                                                                                                  //  DT_addr----->  R3 .

你可能感兴趣的:(DTS,kernel)