编译 U-Boot

U-Boot 配置决定系统从 TF 卡还是 SPI NAND 读取内核和根文件系统参数。切换启动方式前应先清理旧配置。

检查工具链

export PATH=/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
arm-linux-gnueabihf-gcc -v

编译 SPI NAND 版本

cd ~/v3s-workspace/uboot
make distclean
make strongpi_v3s_nandflash_defconfig
make -j"$(nproc)"

该版本从 NAND 固定偏移读取设备树和内核,并将根文件系统挂载为 ubi0:rootfs

编译 TF 卡版本

cd ~/v3s-workspace/uboot
make distclean
make strongpi_v3s_tfcard_defconfig
make -j"$(nproc)"

该版本从 TF 卡第一个 FAT32 分区读取:

zImage
sun8i-v3s-strongpi.dtb

根文件系统位于 TF 卡第二个 ext4 分区。

编译产物

ls -lh u-boot-sunxi-with-spl.bin u-boot.img u-boot.dtb
文件 用途
u-boot-sunxi-with-spl.bin 包含 SPL,写入 TF 卡 8KiB 偏移或通过 xfel 写入 NAND SPL 区域
u-boot.img NAND 中的 U-Boot 主体
u-boot.dtb U-Boot 自身使用的设备树

Linux 启动使用的 sun8i-v3s-strongpi-spinand.dtb 来自 Linux 内核源码,不是这里的 u-boot.dtb

常见错误

缺少 Python 2:

/usr/bin/env: 'python': No such file or directory

确认 python --version 输出 Python 2.x。

缺少 SWIG、DTC 或 GnuTLS 开发库时执行:

sudo apt install swig device-tree-compiler libgnutls28-dev