1、boot img中各种img分布及各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 .
本文介绍了Bootimg中的各部分(如bootheader、kernel、Ramdisk和DeviceTree)及其内存地址分配,并详细解析了U-Boot如何处理DeviceTree img文件,包括数据匹配、追加关键数据和启动Kernel的过程。
&spm=1001.2101.3001.5002&articleId=45335449&d=1&t=3&u=ef63f70a16e5404a9c7ec418e656ae6f)
2147

被折叠的 条评论
为什么被折叠?



