7.1. 微服务器定制化软件包

适配场景

  1. 芯片:BM1684 BM1684X BM1688 CV186AH

  2. SDK版本:

    • BM1688 & CV186AH v1.3以及之后版本(适配只打包功能和打包做包功能)

    • 84&X 3.0.0以及之前版本(适配只打包功能)

    • 84&X 3.0.0之后版本(适配只打包功能和打包做包功能)

  3. 环境需求:

    • 外置存储:

      • 存储分区格式尽量保证ext4,防止特殊分区限制导致做包失败

      • 只打包功能要求外置存储至少是当前emmc使用总量的1.5倍以上

      • 打包做包功能要求外置存储至少是当前emmc使用总量的2.5倍以上

    • 设备需求:

      • 只打包功能要求除去打包设备外需要有一个ubuntu18/20的X86主机

      • 打包做包功能只要求有一个打包做包的设备

7.1.1. 功能一:打包做包功能

本功能84&X和1688/CV186AH平台使用方式完全一致

  1. 使用如下命令下载打包需要使用的工具

pip3 install dfss --upgrade
python3 -m dfss --dflag=socbak

下载的文件是一个socbak.zip文件

  1. 将外置存储插入目标设备,然后执行如下操作。

sudo su
cd /
mkdir socrepack
# 这一步需要根据你的外置存储选择挂载设备路径,但是目标路径必须是/socrepack
mount /dev/sda1 /socrepack
chmod 777 /socrepack
cd /socrepack

然后将之前下载的socbak.zip传输到/socrepack目录下

  1. 执行如下命令进行打包

unzip socbak.zip
cd socbak
export SOC_BAK_ALL_IN_ONE=1
bash socbak.sh

等待一段时间

  1. 执行成功后会生成如下文件

root@sophon:/socrepack/socbak# tree -L 1
.
├── binTools
├── output
├── script
├── socbak.sh
├── socbak_log.log
└── socbak_md5.txt

3 directories, 3 files

其中socbak_log.log文件是执行的信息记录,刷机包在output/sdcard/路径下

7.1.2. 功能二:只打包功能

84&X 3.0.0之后, BM1688/CV186AH V1.3以及之后的版本

  1. 使用如下命令下载打包需要使用的工具。

pip3 install dfss --upgrade
python3 -m dfss --dflag=socbak

下载的文件是一个socbak.zip文件

  1. 将外置存储插入目标设备,然后执行如下操作。

sudo su
cd /
mkdir socrepack
# 这一步需要根据你的外置存储选择挂载设备路径,但是目标路径必须是/socrepack
mount /dev/sda1 /socrepack
chmod 777 /socrepack
cd /socrepack

然后将之前下载的socbak.zip传输到/socrepack目录下

  1. 执行如下命令进行打包。

unzip socbak.zip
cd socbak
bash socBak.sh

等待一段时间

  1. 执行成功后会生成如下文件(这里的是一个示例,实际情况下生成的文件可能会多一些)。

root@sophon:/socrepack/socbak# tree -L 1 .
.
├── binTools
├── boot.tgz
├── data.tgz
├── fip.bin
├── partition32G.xml
├── recovery.tgz
├── rootfs.tgz
├── script
├── socbak.sh
├── socbak_log.log
└── socbak_md5.txt

2 directories, 9 files
  1. 使用 https://developer.sophgo.com/thread/682.html 这个文档《SOC模式交叉编译docekr环境》搭建正确的交叉编译docker环境。

  2. 下载重打包所需文件。注意:此步骤开始BM1688 & CV186AH 与 84&X 不同。

7.1.2.1. BM1688 & CV186AH

BM1688 & CV186AH 需要下载的文件如下:

  1. 建立目录pack,然后将原始刷机包解压到这个目录下

  2. cd到depack.sh文件同目录,然后执行./depack.sh脚本进行解包

  3. 生成的各个分区压缩包会在update目录下生成,此时将socbak生成的所有文件都拷贝到这个目录下

  4. 修改完毕后cd到enpack.sh文件同目录,然后执行./enpack.sh sdcard 或者./enpack.sh tftp 命令进行打包

  5. 生成的新的刷机包在update/sdcard和update/tftp

7.1.2.2. BM1684 & BM1684X

BM1684 & BM1684X 需要下载的文件如下:

  1. bootloader-arm64 : github上的源码,需要手动clone

  2. sdcard.tgz : 微服务器原始卡刷包。

  1. 在bootloader-arm64同级目录下创建install目录, 并在install目录下创建soc_bm1684目录;将sdcard.tgz移动到install/soc_bm1684路径下。

    最终目录结构如下

├── bootloader-arm64
├── install
│   └── soc_bm1684
│       └── sdcard.tgz
  1. cd到与bootloader-arm64同目录

  2. 执行如下命令

source bootloader-arm64/scripts/envsetup.sh
revert_package

拆包结果会在install/soc_bm1684路径,其目录结构如下

└── soc_bm1684
    ├── boot.tgz
    ├── package_update
    ├── rootfs.tgz
    ├── sdcard.tgz
    ├── spi_flash_bm1684.bin
    ├── data.tgz
    ├── opt.tgz
    ├── recovery.tgz
    ├── rootfs_rw.tgz
    ├── spi_flash.bin
    └── spi_flash_bm1684x.bin
  1. 将微服务器上生成的同名文件替换到install/soc_bm1684目录下。

  2. 将微服务器上生成的partition32G.xml替换到bootloader-arm64/scripts/目录下。

  3. 使用build_update sdcard指令更新刷机包,得到的定制刷机包位于install/soc_bm1684/sdcard目录下。