This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] [参考译文] 【常见问题解答】AM64、AM243:如何优化 SBL 中的身份验证时间以实现快速引导?

Guru**** 2952510 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1621275/faq-am64-am243-how-to-optimize-authentication-time-in-sbl-to-achieve-fast-boot

器件型号: AM6442

是否有办法优化 AM64 和 AM243 器件的身份验证时间、因为该时间当前过大并会影响总体启动时间?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    高身份验证时间是由使用身份验证类型 1 引起的、与身份验证类型 2 相比、此时间较慢。 切换到身份验证类型 2 将显著减少 SBL 引导时间。

    身份验证类型 2 的要求:

    使用身份验证类型 2 时、SYSFW 会使用一些内存临时加载应用映像以进行身份验证(通常由 gAppimage 缓冲区表示)。 在 SDK 示例中、DDR 用于此目的。 如果您的定制设备没有 DDR(如 am243-LP 设备)或任何可适应应用映像的额外存储器、则由于存储器限制、可能无法使用身份验证类型 2。 但是、如果您的应用足够小、能够适应 MSRAM、那么也可以对这些器件使用身份验证类型 2。

    要切换到身份验证类型 2、必须执行以下步骤:

    步骤 1:将多核/Linux 应用映像的身份验证类型更改为 2:

    若要对任何 appimage 使用身份验证类型 2、您必须修改该示例的 makefile 中的签名命令、并将--authtype 参数从 1 更改为 2、为了便于参考、您可以检查以下补丁中的 hello_world 示例:

    diff --git a/examples/hello_world/am64x-evm/r5fss0-0_nortos/ti-arm-clang/makefile b/examples/hello_world/am64x-evm/r5fss0-0_nortos/ti-arm-clang/makefile
    index 2f8ad35e..977f7eaa 100644
    --- a/examples/hello_world/am64x-evm/r5fss0-0_nortos/ti-arm-clang/makefile
    +++ b/examples/hello_world/am64x-evm/r5fss0-0_nortos/ti-arm-clang/makefile
    @@ -312,10 +312,10 @@ ifeq ($(DEVICE_TYPE), HS)
     # Sign the appimage using appimage signing script
     ifeq ($(ENC_ENABLED),no)
            @echo Boot image signing: Encryption is disabled.
    -       $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS)
    +       $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 2 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS)
     else
            @echo Boot image signing: Encryption is enabled.
    -       $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS)
    +       $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 2 --key $(APP_SIGNING_KEY) --enc y --enckey $(APP_ENCRYPTION_KEY) --output $(BOOTIMAGE_NAME_HS)
            $(RM) $(BOOTIMAGE_NAME)-enc
     endif
            $(RM) $(BOOTIMAGE_NAME)
    @@ -323,7 +323,7 @@ endif
            @echo  .
     else
     # Sign the appimage for HS-FS using appimage signing script
    -       $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 1 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS)
    +       $(PYTHON) $(APP_IMAGE_SIGN_CMD) --bin $(BOOTIMAGE_NAME) --authtype 2 --key $(APP_SIGNING_KEY) --output $(BOOTIMAGE_NAME_HS_FS)
            $(RM) $(BOOTIMAGE_NAME)
            @echo  Boot image: am64x:r5fss0-0:nortos:ti-arm-clang $(BOOTIMAGE_PATH)/$(BOOTIMAGE_NAME_HS_FS) Done !!!
            @echo  .

    您必须对您的应用程序进行类似的更改。

    步骤 2:重新构建应用程序映像

    更改身份验证类型后、使用新的身份验证类型设置重建您的 appimage。

    步骤 3:为 AuthType 2 应用引导加载程序补丁

    diff --git a/source/drivers/bootloader/bootloader.c b/source/drivers/bootloader/bootloader.c
    index 8f222f42..b4217760 100644
    --- a/source/drivers/bootloader/bootloader.c
    +++ b/source/drivers/bootloader/bootloader.c
    @@ -727,7 +727,7 @@ int32_t Bootloader_verifyMulticoreImage(Bootloader_Handle handle)
     #ifdef  BOOTLOADER_SCRATCH_MEM_SUPPORT
                         if(config->enableScratchMem == BOOTLOADER_SCRATCH_MEM_ENABLE){
                             /* At this point the image is in RAM, change bootmedia from OSPI to memory */
    -                        gMemBootloaderArgs.appImageBaseAddr = (uint32_t)(config->scratchMemPtr) + certLen;
    +                        gMemBootloaderArgs.appImageBaseAddr = (uint32_t)(config->scratchMemPtr);    //For authtype 2, SYSFW removes certificate and wri
    te only the image back to scratchMemPtr
                             gMemBootloaderArgs.curOffset = 0U;
     
                             config->fxns = &gBootloaderMemFxns;

    步骤 4:重新编译库和 SBL

    应用 bootloader.c 补丁后、必须重新编译库和 SBL。  

    请参阅以下链接来重新构建库: https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/11_02_00_24/exports/docs/api_guide_am64x/MAKEFILE_BUILD_PAGE.html#autotoc_md614 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    测试结果:

    多核应用映像的大小:228KB (ipc_rpmsg_echo_linux)

    Linux 应用程序映像的大小:988kB

    Auth 类型 1 的默认引导时间:

    DMSC Firmware Version 11.0.7--v11.00.07 (Fancy Rat)
    DMSC Firmware revision 0xb
    DMSC ABI revision 4.0
    
    KPI_DATA: [BOOTLOADER_PROFILE] Boot Media       : undefined 
    KPI_DATA: [BOOTLOADER_PROFILE] Boot Image Size  : 0 KB 
    KPI_DATA: [BOOTLOADER_PROFILE] Cores present    : 
    KPI_DATA: [BOOTLOADER PROFILE] System_init                      :      25676us 
    KPI_DATA: [BOOTLOADER PROFILE] Drivers_open                     :       1636us 
    KPI_DATA: [BOOTLOADER PROFILE] Board_driversOpen                :     115879us 
    KPI_DATA: [BOOTLOADER PROFILE] App_loadLinuxImages              :     238094us                                                                
    KPI_DATA: [BOOTLOADER PROFILE] App_loadImages                   :      75741us                                                                
    KPI_DATA: [BOOTLOADER_PROFILE] SBL Total Time Taken             :     457028us

    具有 Auth 类型 2 的引导时间:

    DMSC Firmware Version 11.0.7--v11.00.07 (Fancy Rat)
    DMSC Firmware revision 0xb
    DMSC ABI revision 4.0
    
    KPI_DATA: [BOOTLOADER_PROFILE] Boot Media       : undefined                                                                                   
    KPI_DATA: [BOOTLOADER_PROFILE] Boot Image Size  : 0 KB                                                                                        
    KPI_DATA: [BOOTLOADER_PROFILE] Cores present    :                                                                                             
    KPI_DATA: [BOOTLOADER PROFILE] System_init                      :      25670us                                                                
    KPI_DATA: [BOOTLOADER PROFILE] Drivers_open                     :       1636us                                                                
    KPI_DATA: [BOOTLOADER PROFILE] Board_driversOpen                :     115680us                                                                
    KPI_DATA: [BOOTLOADER PROFILE] App_loadLinuxImages              :      44313us                                                                
    KPI_DATA: [BOOTLOADER PROFILE] App_loadImages                   :      31293us                                                                
    KPI_DATA: [BOOTLOADER_PROFILE] SBL Total Time Taken             :     218594us