升级固件包报错 提示文件长度为0

1,该函数是如何获取到固件包的长度的?

2,升级报错信息

get_file_length函数实现逻辑就是使用stat函数获取st_size;
1、建议确定升级包内升级文件大小
2、查看对应时间点的其他日志如framework.log,查看是否有错误日志

1,我们的hpm包是由模组PAE提供,升级包内升级文件大小是不是只能由模组PAE帮忙确认了?

2,升级过程开始到升级报错,framework.log没有任何新增输出。

这个问题是单台出现的吗,这个包在其他设备进行过升级吗,有这个问题吗?并且问题在这台是必现的吗。升级包也可以同步找技术支撑确定一下是否正确

其他升级包没这个问题,跟设备关系不大。问题是必现的。

hpm包有300多k,打包机制上来讲是第一个包头+vme升级文件+第二个包头+vme升级文件这样排列的吗?可能是缺失了某个包头后的vme文件导致的问题?

可以在这个函数则增加sleep,保证触发升级时,代码在这里停住,然后将入参的路径在日志中打印一下,在报错时,查看对应路径的文件

模组PAE新提供了一个版本,可以升级成功了。

不过有个疑问,update.cfg文件里边只有一个Firmware1有效配置,但是代码从hpm包里边解压出来有三个vme文件cpld01.vme、cpld02.vme、cpld03.vme。 理论上要有三个Firmware配置,不同的Firmware支持的UID不同才对,根据UID选择不同的vme文件升级。

~ # cat /dev/shm/upgrade/3162790497/update.cfg

#
#: V1.01 ʱ013.12
#Version ʽ,
#FileNum ʮ
#ProductID ʮ 0
#ComponentID ʮ
#ComponentIDEx ʮ
#FRUID ʮ
#BoardID ʮ Ϊ535ֱ
#BoardIDList ʮ Ϊ535ֱ

#MultipleSuppliersMode 1ΪӦʽ; 2Ϊʽ; BMCĬӦʽ;Ĭ3ӦʽӦʽֻ·1
#CPLDChipNummbers ӦLDBMCĬ2Ƭ
#ѹar -czvf config.tar.gz beforeaction.sh afteraction.sh rootaction.sh CfgFileList.conf update.cfg

# BC82AMSA 0302041496

BC82AMSAB 0302041498

BC82AMSDD 0302066286

BC82AMSAC 0302059020

BC82AMSD 0302066283

BC82AMSDB 0302066284

BC82AMSDC 0302066285

[Basic]
Version=1.0

[Firmware]
FileNum=2

[Firmware0]
ProductID=0
ComponentID=0
FRUID=0
DllLen=0
Updatefile=libupgrade_0.so
BoardID=65535
BoardIDList=65535
Uid=00000001020302041496,00000001020302041498,00000001020302066286,00000001020302059020,00000001020302066283,00000001020302066284,00000001020302066285,00000001020302064399,00000001020302065624,00000001020302071127,00000001020302071129

MultipleSuppliersMode=1
CPLDChipNummbers=1

[Firmware1]
ProductID=0
ComponentID=24
ComponentIDEx=1
FRUID=0
DllLen=0
Updatefile=libupgrade_24.so
BoardID=65535
BoardIDList=65535
Uid=00000001020302041496,00000001020302041498,00000001020302066286,00000001020302059020,00000001020302066283,00000001020302066284,00000001020302066285,00000001020302064399,00000001020302065624,00000001020302071127,00000001020302071129
MultipleSuppliersMode=1
CPLDChipNummbers=1~ #

包没问题,如果uid之间可以共包就可以按照这种打包格式,这样我们就会将能匹配上的固件都升级了

了解。不过从这个hpm包解出来的信息看,有3个不同的vme(cpld01.vme、cpld02.vme、cpld03.vme),是不是在update.cfg理论应该要有3个firmware的定义?

也不需要,这个代表支持多厂商的固件包,在代码中可以看到会获取deviceid转换后会进行匹配,也就是选择对应厂商的升级包再做升级。所以三个固件用一个firmware也是可以的

这个device id和uid或者system id是一个概念吗? device id是从哪里获取的?

deviceid描述不太对, 应该是chipid,这个在代码中可以搜索关键词GetChipIdcode,这个接口会在升级时去获取,返回的信息就是cpld的厂商id

看了下代码,明白了,多谢!