CPLD场外打包疑问

cpld升级的完整过程中,分为升级阶段和生效阶段。升级阶段会将cpld.vme文件写到cpld里面,然后等到环境满足某个配置的条件(例如复位BMC、带内下电等)时再执行生效阶段,将valid.vme文件写入,完成生效动作。

这个环节需要你确认下当需要执行生效动作时,需要写入什么内容,将这部分内容拆成vaild文件,然后和cpld文件打包到一起

目前已经解决了。实际厂外打包步骤要多一些。后面会出一个具体步骤说明。

好的,后续可以贴一下解决方法

  1. 参考CPLD场外vme文件打包进行环境准备
  • 安装bingo
    
  • 复制 /usr/share/bingo/csr_packet
    
  • 参考自签名CA创建以及HPM签名指导 生成crldata.crl(该文件就是rootca.crl)放置在csr_packet文件夹中
    
  1. 需要修改package.sh文件中内容:
  • 将脚本内的*.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
}
  1. 修改update.cfg文件。可以直接在csr_packet文件夹中的update.cfg进行修改:
    这里以拓展版CPLD部件升级操作为例,以#表示注释,实际写入不需要注释
[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
  1. 修改hpm_devkit.config文件。调整文件中prepare_components值,确保prepare_components值为所有upload_components的或
//===============升级操作记录========================
//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
  1. 完成上述文件修改后,就可以进行CPLD打包操作了。打包分为三步:分别是package、签名、rebuild。
  • 对cpld程序进行package:通过命令./packet.sh package . False对CPLD进去打包。
  • 对文件进行签名。参考自签名CA创建以及HPM签名指导。通过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文件夹中。
  • 完成签名并将签名image.filelist.cms放入csr_packet文件夹后,执行./packet.sh rebuild .进行打包。最终生成的devkit.hpm就是完成打包的CPLD程序。
2 个赞