cpld升级的完整过程中,分为升级阶段和生效阶段。升级阶段会将cpld.vme文件写到cpld里面,然后等到环境满足某个配置的条件(例如复位BMC、带内下电等)时再执行生效阶段,将valid.vme文件写入,完成生效动作。
这个环节需要你确认下当需要执行生效动作时,需要写入什么内容,将这部分内容拆成vaild文件,然后和cpld文件打包到一起
cpld升级的完整过程中,分为升级阶段和生效阶段。升级阶段会将cpld.vme文件写到cpld里面,然后等到环境满足某个配置的条件(例如复位BMC、带内下电等)时再执行生效阶段,将valid.vme文件写入,完成生效动作。
这个环节需要你确认下当需要执行生效动作时,需要写入什么内容,将这部分内容拆成vaild文件,然后和cpld文件打包到一起
目前已经解决了。实际厂外打包步骤要多一些。后面会出一个具体步骤说明。
好的,后续可以贴一下解决方法
安装bingo
复制 /usr/share/bingo/csr_packet
参考自签名CA创建以及HPM签名指导 生成crldata.crl(该文件就是rootca.crl)放置在csr_packet文件夹中
将脚本内的*.bin修改为*.vme
修改update_image_filelist函数
function update_image_filelist()
{
local sha256val=$(sha256sum devkit.hpm | awk '{print $1}')
cat <<EOF > image.filelist
Manifest Version: 1.0
Create By: openUBMC
Name: cpld_mf.hpm
SHA256-Digest: ${sha256val}
EOF
}
[Basic]
Version=1.0
Revision=14
[Firmware]
FileNum=2
# Firmware0文件实际就是valid.vme文件,这个文件时生效文件,根据华为反馈可以用一个bypass或者check id功能的空vme文件。Firmware0了吗除了UID、MultipleSuppliersMode、CPLDChipNummbers可以根据实际变化,其他的都不需要改动
[Firmware0]
ProductID=0
ComponentID=0
FRUID=0
DllLen=0
Updatefile=libupgrade_0.so
BoardID=65535
BoardIDList=65535
Uid=XXXX
MultipleSuppliersMode=1 # 我们用的是但厂商,一个CPLD。这里用1,还有2与3可行,实际使用会出问题。后面用1就能正常升级
CPLDChipNummbers=1
# Firmware1文件就是实现的cpld.vme文件。这个地方ComponentID需根据[固件ID管理](https://support.huawei.com/enterprise/zh/doc/EDOC1100078642/80b2be7f)配置。目前验证拓展版、风扇板都是5、硬盘背板用24
[Firmware1]
ProductID=0
ComponentID=5
FRUID=0
DllLen=0
Updatefile=libupgrade_5.so # 这里需要注意 libupgrade_ComponentID.so
BoardID=65535
BoardIDList=65535
Uid=XXXX
MultipleSuppliersMode=1
CPLDChipNummbers=1
//===============升级操作记录========================
//Upgrade action type.升级操作类型。
//00h = Backup component(s) 备份部件,如果不需要备份部件,action为0xff
//01h = Prepare component(s) 准备部件,如果不需要准备部件,action为0xff
//02h = Upload firmware image 上传软件镜像
backup_action = 0xff
backup_components = 0
prepare_action = 1
prepare_components = 0x00000021 #prepare_components值为所有upload_components的或
//上传软件镜像1
//版本辅助信息在文件中占用4字节,对应一个4字节长的16进制数,第一节对应这个数的低8位,其余类推。
//firmware_description为字符串
//file_name为这个镜像文件的文件名,这个文件必须和这个配置文件放在同一目录下
//这个镜像文件的文件路径从这个congfig文件的路径获取
//file_number表示这个部件里包含的文件个数
//firmware_description描述软件镜像的字符串,要适合显示给用户。最长21字节
//upload_components是掩码,相应bit代表相应的部件,比如值为8代表部件4,1代表部件1
//版本和IPMC一致
upload_action = 2
upload_components = 0x00000001
firmware_version = 5.16
auxiliary_firmware_revision = 0x00000000
firmware_description = CONFIG
file_number = 1
file_path = /data/conf.tar.gz
file_name = conf.tar.gz
upload_action = 2
upload_components = 0x00000020
firmware_version = 0.00
auxiliary_firmware_revision = 0x00000000
firmware_description = EEPROM
file_number = 1
file_path = /data/eeprom.tar.gz
file_name = eeprom.tar.gz
./packet.sh package . False对CPLD进去打包。hpm_signer -s signer.pem -t ts_signer.pem -T tsa.cnf -i image.filelist -o image.filelist.cms对package中生成的image.filelist进行签名。生成文件image.filelist.cms放入csr_packet文件夹中。./packet.sh rebuild .进行打包。最终生成的devkit.hpm就是完成打包的CPLD程序。