以下是摘录自u-boot-xarm/include/configs/zynq_zc702.h
"qspiboot=echo Copying Linux from QSPI flash to RAM...; \
cp 0xFC100000 0x8000 ${kernel_size}; \
cp 0xFC600000 0x1000000 0x8000; \
echo Copying ramdisk...; \
cp 0xFC800000 0x800000 ${ramdisk_size};\
ping 10.10.70.101;\
go 0x8000\0" \
有人可以解释一下这两行中发生了什么吗:
cp 0xFC100000 0x8000 ${kernel_size}; \
cp 0xFC600000 0x1000000 0x8000; \
这些地址是如何选择的?为什么有这么多地址?
答案1
它在启动 Linux 之前将存储在闪存中的内核和 initrd 复制到 RAM 中。命令 cp 记录在cp——内存复制
源地址是闪存中不保存闪存 u-boot 代码的区域。目标地址是 RAM 中 u-boot 在执行中不用于其自身代码/数据的区域。
答案2
我还没有遇到 QSPI 闪存到 RAM 复制命令的语法定义,但模式似乎是
cp src_addr dst_addr copy_size
第二个副本用于 devicetree ( devicetree.dtb
),它的大小 (0x8000) 恰好与 RAM 中 Linux 内核的起始地址 (0x8000) 相同。