平台:imx8mm
系統:linux 4.4
如果需要系統了解swupdate,請參考文章:
嵌入式系統更新swupdate分類
一.制作升級包
emmcsetup.lua用來描述update執行前的preinst()和執行后的postinst()
這里主要是
preinst(),如果沒有mmcblk1p2分區就創建一個。
sw-description主要描述升級包的情況
software =
{
version = "1.0.0.1"; //升級包版本號
imx8mmevk = {
hardware-compatibility: ["1.0"]; //匹配硬件
stable = {
copy1 : { //copy1的情況
images: (
{
filename = "fsl-image-validation-imx-imx8mmevk.ext4.gz"; //升級包rootfs的名字,需要是gz的格式
sha256 = "730ca9afd4cba2360f685ff4b6e8f5d00fa44001770d38e8505e3ec5a98bfd13"; //校驗碼
type = "raw";
compressed = true;
device = "/dev/mmcblk1p2"; //刷機的分區
}
);
scripts: (
{
filename = "emmcsetup.lua"; //lua腳本
type = "lua";
sha256 = "9351c163162a680131607fd03e26e8dfb8a9afbed0ab463884d24aa8eaa93a93"
//校驗碼
}
);
};
copy2 : {
images: (
{
filename = "fsl-image-validation-imx-imx8mmevk.ext4.gz";
sha256 = "730ca9afd4cba2360f685ff4b6e8f5d00fa44001770d38e8505e3ec5a98bfd13";
type = "raw";
compressed = true;
device = "/dev/mmcblk1p3";
}
);
scripts: (
{
filename = "emmcsetup.lua";
type = "lua";
sha256 = "9351c163162a680131607fd03e26e8dfb8a9afbed0ab463884d24aa8eaa93a93"
}
);
};
}
}
}
校驗碼由sha256sum生成
示例:sha256sum fsl-image-validation-imx-imx8mmevk.ext4.gz > fsl-image-validation-imx-imx8mmevk.ext4.gz.sha256sum
cpio-package.sh打包升級包腳本
MODE="RSA"
CONTAINER_VER="1.0.0.1"
PRODUCT_NAME="adu-update-image-imx8mm"
//打包的所有文件的名字
FILES="sw-description sw-description.sig fsl-image-validation-imx-imx8mmevk.ext4.gz emmcsetup.lua"
#if you use RSA
if [ x"$MODE" == "xRSA" ]; then
openssl dgst -sha256 -sign openssl/priv.pem sw-description > sw-description.sig //生成校驗文件
else
openssl cms -sign -in sw-description -out sw-description.sig -signer mycert.cert.pem \
-inkey mycert.key.pem -outform DER -nosmimecap -binary
fi
for i in $FILES;do
echo $i;done | cpio -ov -H crc > ${PRODUCT_NAME}_${CONTAINER_VER}.swu //用cpio打包
最后生成adu-update-image-imx8mm_1.0.0.1.swu升級包,拷貝到機器上。
生成私鑰和公鑰
首先,需要生成私鑰
openssl genrsa -aes256 -out priv.pem
這里需要一個密碼。可以從文件中去獲取這個密碼 - 當然,
這個密碼文件必須保護好,防止被入侵。
openssl genrsa -aes256 -passout file:passout -out priv.pem
使用如下命令,從私鑰導出公鑰:
openssl rsa -in priv.pem -out public.pem -outform PEM -pubout
"public.pem" 包含了適用於swupdate的格式的密鑰。
該文件可以通過-k參數在命令行傳遞給swupdate。
二.板子上進行升級
使用fw_printenv設置啟動參數
升級
adu-update-image-imx8mm_1.0.0.1.swu是升級包,public.pem是公鑰, swupdate.log升級過程的log
swupdate -v -i adu-update-image-imx8mm_1.0.0.1.swu -k /adukey/public.pem -e "stable,copy2" &>> /aduc-logs/swupdate.log
切換啟動分區
fw_setenv mmcroot /dev/mmcblk1p3 //切換成mmcblk1p3 這個root分區啟動,然后reboot
