根据社区论坛中大佬们的经验和华为老师们的分享,将CPLD的打包流程脚本化,可以通过1条命令实现以下操作:
- 配置文件UID、Component_ID、ext、link等参数修改;
- 根据扩展名识别升级路径(Jtag链路:vme、svf格式;I2C链路:bin格式);
- CPLD、valid升级文件重命名;
- 加密和签名;
环境准备
- 安装bingo。打包过程需要使用3个可执行程序:crypto_tool、hpm_signer、hpmimage,安装bingo会附带这三个。
- 准备签名文件。参考自签名CA创建以及HPM签名指导 ,需要rootca.crl、signer.pem、ts_signer.pem、tsa.cnf,这些签名文件需要存放在一个文件夹下,比如:/root/ca/
- python执行脚本。脚本见附件
脚本使用
脚本目录格式
hpm_packet
├── conf
│ ├── afteraction.sh
│ ├── beforeaction.sh
│ ├── firstboot.sh
│ ├── image.filelist
│ ├── CfgFileList.conf
│ └── update.cfg
├── build.py
└── hpm_devkit.config
参数介绍
build.py 为主入口,支持的传入参数如下图所示:
- -f :待打包的cpld固件,支持vme、svf、bin三种格式 (当前脚本不支持同时打包多个固件)。
- -v :valid文件,文件后缀需要与cpld固件后缀相同,如果cpld为bin格式 (I2C升级),则可以不填该参数。
- -o :设置输出 hpm 包文件名。
- -u :设置固件UID信息,需要20位纯数字。
- -i :设置component_id,一般扩展板、风扇板为5,其他背板为24。
- -p :打包工作目录,存放要打包的文件的路径,默认为脚本所在路径。
- -s :签名文件所在路径,默认为/root/ca/。
- -e/-n :-e表述需要机密;-n表示不需要加密。
- –sign/–no-sign :–sign表示需要进行签名;–no-sign表示不需要签名。
执行方法
Jtag升级
将 CPLD 和 valid 文件拷贝到 hpm_packet 路径下 (可以不需要设置 -p 参数)。uid 假设为00000001010302044492。执行命令:
python3 build.py -f exu_v07.svf -v valid_refresh.svf -u 00000001010302044492 -i 5 -o exu_v07.hpm -n
脚本会识别 exu_v07.svf 和 valid_refresh.svf 两个文件,并重命名为 cpld.svf 和 valid.svf。
根据扩展名判断升级链路,svf 和 vme 格式走 Jtag 升级。
根据传入参数修改 update.cfg 文件的配置信息,包括 UID=00000001010302044492, ComponentID=5, ext=svf, UpdateLink=''等。
其余流程与bingo中的packet.sh一致。
I2C升级
将 CPLD 文件拷贝到 hpm_packet 路径下 (可以不需要设置 -p 参数)。uid 假设为00000001010302044493。执行命令:
python3 build.py -f sw_v01.bin -u 00000001010302044493 -i 24 -o sw_v01.hpm -n
脚本会识别 sw_v01.bin 文件,并重命名为 cpld01.bin。
根据扩展名判断升级链路,bin 格式走 I2C 升级。
根据传入参数修改 update.cfg 文件的配置信息,包括 UID=00000001010302044493, ComponentID=24, ext=bin, UpdateLink='1’等。
其余流程与bingo中的packet.sh一致。
PS:可执行程序会生成中间文件,可以忽略。
打包脚本
hpm_packet.zip (10.5 KB)


