此演示将引导加载程序、设备树、Linux 内核和根文件系统全部放在 SPI 中。
它通过原始读取(sf read)和原始写入(在 uuu 脚本中使用的 sf write)来实现。
sf probe 0;
sf read ${fdt_addr} 0x500000 0x100000;
sf read ${loadaddr} 0x600000 0x1E00000;
sf read ${initrd_addr} 0x2400000 0x600000;
setenv bootargs console=${console},${baudrate} earlycon=${earlycon},${baudrate} rdinit=/linuxrc;
booti ${loadaddr} ${initrd_addr} ${fdt_addr}
|-- 0001-all-in-spi-demo-lf-5.10.72-2.2.0.patch --- 此演示的补丁文件|-- demo_binary| |-- flash.b0.bin --- b0 引导加载程序| |-- flash.bin --- c0 引导加载程序| |-- Image-imx8qxpc0mek.bin --- Linux 内核| |-- imx8qxp-mek.dtb --- 设备树| |-- uramdisk_boot.rootfs.aarch64.img --- RAM 磁盘| |-- uuu.qspi.all.b0.uuu --- b0 的 uuu 脚本| `-- uuu.qspi.all.uuu --- c0 的 uuu 脚本`-- readme.txt --- 此文件
# 使用的 SPI 布局如下:# - --------- --------------------------------------------# | | flash.bin | 环境变量 | dtb | 内核映像 | 根文件系统 |
# - --------------- --------------------------------------
# ^ ^ ^ ^ ^ ^ ^
# | | | | | | |
# 0 4kiB 4MiB 5MiB 6MiB 36MiB 42MiB
0x1000 0x400000 0x500000 0x600000 0x2400000
测试:
硬件:i.MX8QXP MEK
软件:lf-5.10.72-2.2.0 + 0001-all-in-spi-demo-lf-5.10.72-2.2.0.patch
测试日志:
SF:检测到 mt35xu512aba,页面大小为 256 字节,擦除大小为 128 KiB,总计 64 MiB
设备 0 偏移 0x500000,大小 0x100000
SF:1048576 字节 @ 0x500000 读取:正常
设备 0 偏移 0x600000,大小 0x1e00000
SF:31457280 字节 @ 0x600000 读取:正常
设备 0 偏移 0x2400000,大小 0x600000
SF:6291456 字节 @ 0x2400000 读取:正常
[4.787552]imx6q-pcie 5f010000.pcie:无法添加 pcie 端口。[ 4.797467] 释放未使用的内核内存:2944K[ 4.807379] 将 /linuxrc 作为 init 进程运行启动 syslogd:OK启动 klogd:OK运行 sysctl:确定启动网络:OK/bin/sh:无法访问 tty;作业控制已关闭/#