# flashtool-scripts **Repository Path**: hanhai-ide/flashtool-scripts ## Basic Information - **Project Name**: flashtool-scripts - **Description**: 来自黑芝麻智能科技(bstai)瀚海(hanhai)IDE的烧录脚本 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-26 - **Last Updated**: 2025-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 小系统烧录打包工具 [TOC] ## 前置条件 ### 1 需要有编译好的临时文件目录 此脚本基于CI已经编译好的临时文件目录(images),目录格式: ``` bash $ tree images images/ ├── ADS-Platform-Tools_v0.1.1.zip ├── backup.img ├── backup.img.sign ├── boot.img ├── boot.img.sign ├── bstos_version ├── BST-SAFETY-release-0-1-9.bin ├── BST-SAFETY-release-0-1-9.bin.sign ├── cache.img ├── cache.img.sign ├── core-image-bstos-a1000.ext4 ├── core-image-bstos.img ├── core-image-bstos.img.sign ├── dynamic_pr_test.ko ├── flash_all_from_bootrom.sh ├── flash_all_from_bootrom_usb.sh ├── otp_disable │   ├── BST-SBL-release-2-0-0.bin │   └── BST-SBL-release-2-0-0.bin.sign ├── otp_enable │   ├── BST-SBL-release-2-0-0.bin │   └── BST-SBL-release-2-0-0.bin.sign ├── panic_module.ko ├── partition.img ├── partition.img.sign ├── persistence.img ├── persistence.img.sign ├── README.txt ├── recovery.img ├── recovery.img.sign ├── TC397-firmware-fad_v0.9.8.zip ├── tc397_v00.00.09.05_202107200956.bin ├── u-boot-full.img ├── u-boot-full.img.sign ├── u-boot-tools.img └── vmlinux ``` ### 2 必须和REPO SYNC协同工作 ```bash $ repo init -u http://bstcd.stuffs.biz/lizq/images-scripts-manifest.git ... Downloading manifest from http://bstcd.stuffs.biz/lizq/images-scripts-manifest.git ... repo has been initialized in /workspace/lizq/images-test $ repo sync Fetching: 100% (6/6), done in 4.870s Garbage collecting: 100% (6/6), done in 0.029s repo sync has finished successfully. lizq@devbot:/workspace/lizq/images-test$ ls dl scripts ``` **images-scripts-manifest.git** 中default.xml,若您为外部用户,请自行创建images-scripts-manifest ``` ``` ### 3 脚本执行环境 - 安装*android-tools-fsutils* - 包含simg2img命令 - 安装*7zip-full* - 包含7z命令 - Python环境为Python3,需要安装requests库 > ubuntu22的机器,python环境需要安装: pip3 install requests pycryptodome ## 使用方法 > 注意:脚本运行环境依赖仓库文件,故需要先用repo的方式,将所需全部文件下载完成后,再在目录内执行脚本。 可以使用python3 make-image.py或者直接make-image.py,可以在repo sync执行目录内执行,或在script目录内执行,其他执行路径无法正常工作。详细参数见下面的帮助信息。 ``` bash usage: make-image.py [-h] [--input-dir INPUT_DIR] [--script-dir SCRIPT_DIR] [--output-dir OUTPUT_DIR] [--verbose] [--no-clean-staging] [--version VERSION] [--type {dev,release}] [--suffix SUFFIX] script to generate images for flashTool optional arguments: -h, --help show this help message and exit --input-dir INPUT_DIR, -i INPUT_DIR raw images input dir --script-dir SCRIPT_DIR, -s SCRIPT_DIR script input dir --output-dir OUTPUT_DIR, -o OUTPUT_DIR images output dir --verbose, -v verbose mode --no-clean-staging not clean staging dir before build --version VERSION version of image --type {dev,release}, -t {dev,release} type of image --suffix SUFFIX suffix of image name, eg: IMG-...-$suffix.zip ``` > Note: *--input-dir/-i*,*--script-dir/-s*,* --version*是正常打包镜像时的必选参数。*type*指定镜像包是dev还是release,dev类型镜像使用的opt_disable的BSL镜像。 ### 参数说明 #### --input-dir | -i 指定构建系统构建完成,经CI脚本拷贝后形成的镜像目录,**必选参数**。里面存放了各种类型的镜像文件,但是需要注意的是,sbl镜像需要放置到otp_disable和otp_enable目录下(以后或许会更改,脚本修改的时候也会修改该文档)。目录结构示例如下: ```bash images/ otp_disable/ 06-Jul-2022 03:26 - BST-SBL-RELEASE-A1000B-4G-2-6-2-ECC-PARITY..> 06-Jul-2022 03:24 1M otp_enable/ 06-Jul-2022 03:26 - BST-SBL-RELEASE-A1000B-4G-2-6-2.bin 06-Jul-2022 03:24 1M ADS-Platform-Tools_v1.1.2.zip 06-Jul-2022 03:19 590M BST-SAFETY-RELEASE-A1000B-4-0-4.bin 06-Jul-2022 03:24 1M BST-SAFETY-RELEASE-A1000B-4-0-4.bin.sign 06-Jul-2022 03:25 1318 README.txt 06-Jul-2022 03:24 36 RUBOOT-A1000B-1M.bin 06-Jul-2022 03:24 1M SBL-DEBUG-A1000B.bin 06-Jul-2022 03:24 96K TC397-firmware-a1000b_fad_v0.12.4.zip 06-Jul-2022 03:18 26M atf-a1000b.bin 06-Jul-2022 03:24 462K atf-a1000b.bin.sign 06-Jul-2022 03:24 1318 ... ``` #### --scripts-dir | -s 指定对应镜像的烧录脚本和描述文件目录,**必选参数**。打包脚本通过解析镜像目录内各个镜像子目录内的描述文件,和--input-dir中指定的镜像目录中的文件进行匹配,匹配完成后会放到暂存目录,最终打包到镜像中。目录结构示例: ```bash flash-scripts/ atf/ 06-Jul-2022 03:24 - atf.sh 06-Jul-2022 03:24 776 description.json 06-Jul-2022 03:24 1058 backup/ 06-Jul-2022 03:24 - cache/ 06-Jul-2022 03:24 - hyp/ 06-Jul-2022 03:24 - kernel/ 06-Jul-2022 03:24 - partition/ 06-Jul-2022 03:24 - persistence/ 06-Jul-2022 03:24 - recovery/ 06-Jul-2022 03:24 - recovery-tools/ 06-Jul-2022 03:24 - rootfs/ 06-Jul-2022 03:24 - ruboot/ 06-Jul-2022 03:28 - safety/ 06-Jul-2022 03:28 - sbl/ 06-Jul-2022 03:28 - sbl_debug/ 06-Jul-2022 03:28 - uboot/ 06-Jul-2022 03:28 - # 新增参数配置选项(烧录工具烧录时,在界面选择配置参数,烧录时会设置到单板) # 需要将git仓库parameter-configs中的内容按照如下目录结构准备 parameter-configs ecc config.json scripts ecc.sh hyp config.json scripts hyp.sh ... README.md ``` #### --output-dir | -o 指定打包后镜像的存放目录,**必选参数**。 #### --verbose | -v 详细模式,打印脚本执行过程中更多的提示信息。 #### --no-clean-staging 构建之前不清除暂存目录。之前如果有其他文件,可能会遗留在生成的镜像包里。 #### --version 指定生成的镜像报文件名中的版本号部分。 #### --type | -t 指定使用-i指定的镜像目录内,使用otp_enable还是otp_disable目录下的sbl镜像文件(以后或许会更改,脚本修改的时候也会修改该文档)。-t dev使用otp_disable目录下的sbl镜像文件,-t release使用otp_enable目录下的镜像文件。 更新:针对包含ddrdtb的d版本,-t dev使用ecc_open对应的dtb和签名,-t release使用ecc_close对应的dtb和签名。 #### --suffix 指定生成的镜像包文件名中的后缀部分,前面部分为固定的*IMGS-${Name}-${version}-${suffix}.zip*。 ``` file_name = 'IMGS-' + _images_conf[NAME_KEY] + '-' + \ _images_conf[VERSION_KEY] + '-' + suffix + '.zip' ``` ### 快速使用 ```bash $ repo init -u http://bstcd.stuffs.biz/lizq/images-scripts-manifest.git $ repo sync $ ./scripts/make-image.py -i ../images/images/ -s ../images/flash-scripts --version 2.1.2 2021-12-16 16:15:40,006 - __main__ - INFO - input-dir: /workspace/lizq/images/images 2021-12-16 16:15:40,006 - __main__ - INFO - output-dir: /workspace/lizq/images-test/output 2021-12-16 16:15:40,006 - __main__ - INFO - Cleanning /workspace/lizq/images-test/output 2021-12-16 16:15:40,008 - __main__ - INFO - Cleanning staging 2021-12-16 16:15:40,010 - __main__ - INFO - Generating directories and files... ... 2021-12-16 16:15:54,295 - __main__ - INFO - Generating zip package:BST-HS-Linux-2.1.2.zip to /workspace/lizq/images-test/output lizq@devbot:/workspace/lizq/images-test$ ls /workspace/lizq/images-test/output/ BST-HS-Linux-2.1.2.zip ``` ## 工作目录介绍 ```bash lizq@devbot:/workspace/lizq/images-test$ tree . -L 1 . ├── dl ├── output ├── scripts └── staging ``` 脚本工作过程中会有如下目录: - dl - repo拉取的除脚本外所有的文件和目录 - output - 存放最终生成的镜像包(未指定输出目录时才会存在) - staging - 暂存生成镜像包所需的所有文件 - scripts - repo拉取的镜像打包脚本存放目录 ## 镜像包目录介绍 脚本生成的`-.zip`存放在--output-dir目录指定的目录,如果未指定,则为当前目录的output目录。下面对zip包中的目录做个详细说明。 ### 目录列表 下面是镜像包中的目录列表: ``` ├── Images │   ├── atf │   │   └── atf-a1000.bin │   │   ├── atf-a1000.bin.sign │   ├── Backup │   │   ├── backup.img │   │   ├── backup.img.sign │   ├── ... ├── meta.ini ├── description.json ├── parameters.json └── project.json // meta.ini是加密过的zip包,解开后是如下文件: ├── Bin │   ├── adb.exe │   ├── AdbWinApi.dll │   ├── AdbWinUsbApi.dll │   ├── fastboot.exe │   ├── RUBOOT-A1000-1M.bin │   ├── SBL-DEBUG-A1000.bin │   └── simg2img.exe ├── Config │   └── config.json ├── Executor │   ├── adb-check.json │   ├── ... │   ├── setenv.json │   ├── template │   │   ├── bootloader.json │   │   ├── os.json │   │   ├── partition.json │   │   ├── safety.json │   │   ├── sbl.json │   │   └── uboot.json │   └── try │   ├── ... ├── flashtool │   ├── bin │   ├── ... ├── Images-scripts │   ├── atf │   │   └── atf.sh │   ├── ... │   └── uboot │   ├── bureFunction.sh │   ├── bureMain.sh │   └── env_parameters.json └── Recovery-min ├── bsta1000-apa.dtb ├── ... ├── bsta1000-pat.dtb ├── Image.itb ├── recovery.gz └── uEnv.txt ``` ### 目录与文件说明 #### 镜像包根目录说明 - Images - 存放根据输入目录,和git仓库中各个类型镜像的配置和脚本所生成的最终目录 - description.json - 存放描述各个类型的镜像参数 - parameters.json - 存放参数 - project.json - 存放版本信息 - meta.ini - 加密过的压缩包 #### meta.ini文件说明 - Bin - 存放烧录工具使用的文件,如本机工具和救砖跳板文件 - Executor - 存放烧录工具除镜像烧录以外的流程需要的脚本 - flashtool - 存放烧录工具使用的文件 - Config - 存放烧录工具使用的配置 ### 镜像目录生成说明 1. Images中的目录,对应description.json中的Key对应的值,并且用MatchCase对应的值去输入目录去匹配,匹配成功进入下一步。 2. 根据SupportBoard中的内容到project.json中去匹配,匹配成功进入下一步 3. 根据SubBoards内容更新project.json中的DBFiles和Files字段,并拷贝对应镜像和脚本到暂存目录 3. 根据暂存目录生成对应的meta.ini,再打包整个staging目录为最终镜像包 上面三个步骤全部完成后,会生成只支持烧录project.json中指定的单板镜像,会过滤掉多余的镜像文件。 ```json // 原始project.json { ... "BoardsInfo": [ { "BoardName": "FAD", "SOCName": "A1000", "HWVersion": "1.0", "SubBoards": [ { "Name": "FADA", "DTB": "bsta1000-fada.dtb", "DBFiles": [], "Files": [] } ] } ] } // 最终的project.json { ... "BoardsInfo": [ { "BoardName": "FAD", "SOCName": "A1000", "HWVersion": "1.0", "SubBoards": [ { "Name": "FADA", "DTB": "bsta1000-fada.dtb", "DBFiles": [ { "Key": "sbl_debug", "SubType": "4fa31998-93f2-11ec-a829-00155de3b8a2" }, { "Key": "ruboot", "SubType": "562476c6-93f3-11ec-95cd-00155de3b8a2" } ], "Files": [ { "Key": "safety", "SubType": "9af299e4-9098-11ec-ab58-b75feee2ed84" }, { "Key": "rootfs", "SubType": "562476b2-93f3-11ec-95cc-00155de3b8a2" }, ... ] } ] } ] } ``` ### 工程文件编写说明 工程文件(project.json)的具体编写说明见[“外部工程文件说明”](http://bstcd.stuffs.biz/P2107-Linux-2.0/documentation/tree/master/06.%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/Toolchain/%E6%89%B9%E9%87%8F%E3%80%81VScode%E7%83%A7%E5%BD%95%E5%B7%A5%E5%85%B7#%E5%A4%96%E9%83%A8%E5%B7%A5%E7%A8%8B%E6%96%87%E4%BB%B6%E8%AF%B4%E6%98%8E)。 ### 脚本文件编写说明 描述文件,参数文件的具体编写说明见[“外部烧录脚本目录说明”](http://bstcd.stuffs.biz/P2107-Linux-2.0/documentation/tree/master/06.%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/Toolchain/%E6%89%B9%E9%87%8F%E3%80%81VScode%E7%83%A7%E5%BD%95%E5%B7%A5%E5%85%B7#%E5%A4%96%E9%83%A8%E7%83%A7%E5%BD%95%E8%84%9A%E6%9C%AC%E7%9B%AE%E5%BD%95%E8%AF%B4%E6%98%8E)。 ### 其他说明 #### 源文件说明 - 镜像文件由输入目录中匹配到MatchCase的文件提供。 - 脚本文件由输入目录中各个镜像名称对应的目录里的文件提供。 - 项目文件project.json由模板,修改生成 - 参数文件parameters.json由仓库默认和各个镜像脚本目录中的参数文件拼接而成 - 描述文件description.json由各个镜像脚本目录中的描述文件拼接而成 - 其他文件为烧录工具强依赖文件,由仓库提供 ## 打包脚本工作流程 大部分流程见下图: ![镜像打包脚本工作流程图](./pics/镜像打包脚本工作流程.png)