swupdate實例


平台: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
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM