情况是这样的,由于我们这边烧录的是uImage.xz
是经过压缩的uimage文件,涉及到解码,boot获取dtb会需要解码,解码不知为何会延时十几秒等待
这是万万不能的,于是就使用了别的方法就把dtb放到kernel的空间多余的地方,这样只要能读到即可
于是我开始了设计方法
可以看到这个dtb的大小是0x91AA
# <- this is for comment / total file size must be less than 4KB
tftp 0x21000000 kernel_202d
nand erase.part KERNEL
nand write.e 0x21000000 KERNEL ${filesize}
nand erase.part RECOVERY
nand write.e 0x21000000 RECOVERY ${filesize}
% <- this is end of file symbol
下载可以看到kernel和RECOVERY的分配空间是0x300000
实际uimage.xz大小是0x254628
由此可知后面的空间就是剩余的,因为uimage.xz可能会修改根据变大变小,我们取空间就不能小于uimage.xz空间还要预留空间,又不能比dtb小,于是我保险起见取[0x280000-0x300000]
于是做了一下修改
# <- this is for comment / total file size must be less than 4KB
tftp 0x21000000 kernel_202d
tftp 0x21280000 infinity2m-spinand-ssc011a-s01a-display.dtb
nand erase.part KERNEL
nand write.e 0x21000000 KERNEL 0x300000
nand erase.part RECOVERY
nand write.e 0x21000000 RECOVERY 0x300000
% <- this is end of file symbol
然后就把dtb写进了内存中,可以验证一下
烧录后读一下内存nand read.e 0x22000000 RECOVERY 0x300000
//读nand 到0x22000000地址上,RECOVERY分区,0x3000000大小