固件制作指南
本文介绍如何将制作好的 bootfs.ext4 / rootfs.ext4 分区镜像连同启动固件打包成可刷写的固件,适用于 Bianbu 2.x(K1) 与 Bianbu 4.0(K3),产出两种形态:
- Titan 固件包:配合 Titan 刷机工具使用;
- SD 卡镜像:可直接写入 SD 卡(genimage 制作)。
两种形态的前置步骤相同,版本差异(固件文件、分区表分支、打包格式)在各步骤中分别标注。ROOTFS 与分区镜像的制作见各版本的 ROOTFS 制作文档(如 Bianbu 3.0 ROOTFS 制作、Bianbu 4.0 ROOTFS 制作)。
准备打包目录
-
安装依赖
apt-get -y install zip wget python3 genimage pigz -
拷贝固件依赖的文件
以 ROOTFS 制作文档中导出的
$TARGET_ROOTFS(rootfs 目录)及其同目录下的bootfs.ext4、rootfs.ext4为准。-
2.x(K1):
export TMP=pack_dirmkdir -p $TMP/factory/cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_emmc.bin $TMP/factorycp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_sd.bin $TMP/factorycp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_spinand.bin $TMP/factorycp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_spinor.bin $TMP/factorycp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/FSBL.bin $TMP/factorycp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/u-boot.itb $TMPcp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/env.bin $TMPcp $TARGET_ROOTFS/usr/lib/riscv64-linux-gnu/opensbi/generic/fw_dynamic.itb $TMPcp bootfs.ext4 rootfs.ext4 $TMP -
4.0(K3):bootinfo 改为通配拷贝(4.0 的 deb 提供
bootinfo_block/spinand/spinor.bin,不再提供bootinfo_emmc/sd.bin),并额外拷贝esos.itb与 K3 板卡的ec.bin:export TMP=pack_dirmkdir -p $TMP/factory/cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/bootinfo_*.bin $TMP/factory/cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/FSBL.bin $TMP/factory/cp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/u-boot.itb $TMPcp $TARGET_ROOTFS/usr/lib/u-boot/spacemit/env.bin $TMPcp $TARGET_ROOTFS/usr/lib/riscv64-linux-gnu/opensbi/generic/fw_dynamic.itb $TMPcp $TARGET_ROOTFS/usr/lib/riscv64-linux-gnu/esos/esos.itb $TMPcp $TARGET_ROOTFS/usr/lib/firmware/k3-pico-itx/ec.bin $TMPcp bootfs.ext4 rootfs.ext4 $TMP
-
-
下载参考分区表与 fastboot 配置(按版本选择分支)
-
2.x(K1,
main分支):wget -P $TMP https://gitee.com/bianbu/image-config/raw/main/fastboot.yamlwget -P $TMP https://gitee.com/bianbu/image-config/raw/main/partition_2M.jsonwget -P $TMP https://gitee.com/bianbu/image-config/raw/main/partition_flash.jsonwget -P $TMP https://gitee.com/bianbu/image-config/raw/main/partition_universal.json -
4.0(K3,
k3-br-v1.0.y分支;分区表包含esos分区,bootinfo引用bootinfo_block.bin):wget -P $TMP https://gitee.com/bianbu/image-config/raw/k3-br-v1.0.y/fastboot.yamlwget -P $TMP https://gitee.com/bianbu/image-config/raw/k3-br-v1.0.y/partition_universal.jsonwget -P $TMP https://gitee.com/bianbu/image-config/raw/k3-br-v1.0.y/partition_flash.jsonwget -P $TMP https://gitee.com/bianbu/image-config/raw/k3-br-v1.0.y/partition_4M.jsonpartition_4M.json适用于 ≥4M 的 SPI NOR(板卡实际 NOR 一般为 8M,刷机工具会按容量向下匹配分区表)。
-
Titan 固件包
-
2.x(K1):打包为 zip
cd $TMPzip -r ../bianbu-custom.zip * -
4.0(K3):打包为 tar.gz(含
md5sums.txt,Titan 工具直接使用包内的fastboot.yaml/partition_flash.json刷写)cd $TMPfind . -type f ! -name md5sums.txt -exec md5sum {} + | sort -k2 > md5sums.txttar -cf - . | pigz > ../Bianbu-LXQt-K3-$(date +%Y%m%d%H%M%S).tar.gz
SDCARD 镜像
下面介绍如何使用 genimage 制作 SDCARD 镜像,打包目录复用上文「准备打包目录」的结果。
-
安装依赖
echo 'tzdata tzdata/Areas select Asia' | debconf-set-selectionsecho 'tzdata tzdata/Zones/Asia select Shanghai' | debconf-set-selectionsDEBIAN_FRONTEND=noninteractive apt-get -y install wget python3 genimage -
下载生成 genimage.cfg 的脚本(按版本选择分支),并生成 genimage.cfg
-
2.x(K1,
bl-v1.0.y分支):wget -P $TMP https://gitee.com/spacemit-buildroot/scripts/raw/bl-v1.0.y/gen_imgcfg.pypython3 $TMP/gen_imgcfg.py -i $TMP/partition_universal.json -n bianbu-custom.sdcard -o $TMP/genimage.cfg -
4.0(K3,
k3-br-v1.0.y分支):wget -P $TMP https://gitee.com/spacemit-buildroot/scripts/raw/k3-br-v1.0.y/gen_imgcfg.pypython3 $TMP/gen_imgcfg.py -i $TMP/partition_universal.json -n sdcard.img -o $TMP/genimage.cfg
-
-
生成 SDCARD 镜像
ROOTPATH_TMP="$(mktemp -d)"GENIMAGE_TMP="$(mktemp -d)"genimage \--config "$TMP/genimage.cfg" \--rootpath "$ROOTPATH_TMP" \--tmppath "$GENIMAGE_TMP" \--inputpath "$TMP" \--outputpath "."当看到以下信息时,说明打包成功。
INFO: hdimage(bianbu-custom): adding partition 'bootinfo' from 'factory/bootinfo_sd.bin' ...INFO: hdimage(bianbu-custom): adding partition 'fsbl' (in MBR) from 'factory/FSBL.bin' ...INFO: hdimage(bianbu-custom): adding partition 'env' (in MBR) from 'env.bin' ...INFO: hdimage(bianbu-custom): adding partition 'opensbi' (in MBR) from 'fw_dynamic.itb' ...INFO: hdimage(bianbu-custom): adding partition 'uboot' (in MBR) from 'u-boot.itb' ...INFO: hdimage(bianbu-custom): adding partition 'bootfs' (in MBR) from 'bootfs.ext4' ...INFO: hdimage(bianbu-custom): adding partition 'rootfs' (in MBR) from 'rootfs.ext4' ...INFO: hdimage(bianbu-custom): adding partition '[MBR]' ...INFO: hdimage(bianbu-custom): adding partition '[GPT header]' ...INFO: hdimage(bianbu-custom): adding partition '[GPT array]' ...INFO: hdimage(bianbu-custom): adding partition '[GPT backup]' ...INFO: hdimage(bianbu-custom): writing GPTINFO: hdimage(bianbu-custom): writing protective MBRINFO: hdimage(bianbu-custom): writing MBRINFO: cmd: "rm -rf "/tmp/tmp.rX4fZ39DKG"/*" (stderr):