40 lines
1.3 KiB
Bash
Executable File
40 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
bus=14
|
|
address=0x53
|
|
offset=0x08
|
|
biosversion=$(busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/bios_active xyz.openbmc_project.Software.Version Version)
|
|
ret=$?
|
|
if [ $ret != 0 ]; then
|
|
echo "Failed to get BIOS version from dbus"
|
|
exit 1
|
|
fi
|
|
biosversion=$(echo "$biosversion" |cut -d "\"" -f2)
|
|
echo "BIOS version got from dbus:$biosversion"
|
|
if [ "$biosversion" == "null" ]; then
|
|
echo "BIOS version is null, skip"
|
|
else
|
|
tmp=$(i2ctransfer -y -f $bus w2@$address $offset 0x00 r32)
|
|
for str in $tmp;do
|
|
if [[ $str != 0x00 ]]; then
|
|
str=$(printf "%d" "$str")
|
|
version=$(echo "$str" | awk '{printf("%c", $str)}')
|
|
version_str="$version_str$version"
|
|
fi
|
|
done
|
|
echo "BIOS version got from epprom:$version_str"
|
|
if [ "$biosversion" != "$version_str" ]; then
|
|
for ((j=0;j < 32;j++));do
|
|
hexArr[$j]=0
|
|
done
|
|
for ((i=0;i < 14;i++));do
|
|
ver=${biosversion:$i:1}
|
|
hexArr[$i]=$(printf "%d" "'$ver")
|
|
done
|
|
i2ctransfer -y -f $bus w34@$address $offset 0x00 "${hexArr[@]}"
|
|
echo "Write BIOS version to epprom:${biosversion}"
|
|
else
|
|
echo "BIOS version same, skip writing BIOS version"
|
|
fi
|
|
fi
|
|
|