こんにちは、みんな、
ベースセキュアブートでADKPをプログラムする方法を知りたいです
S32K344-WB #HSE#ベースセキュアブート
よろしくお願いします。
こんにちは、みんな、
私はS32K312EVB-Q172ボードを使用しており、 HSE デモ例をテストしたいと考えています。
ファイルS32K3_HSE_DemoExamples_1_0_0.zipにアクセスすることは可能でしょうか?
私はS32 プラットフォーム用の S32 Design Studio をPEMicro デバッガーと一緒に使用しています。
ご協力をよろしくお願いいたします!
よろしくお願いします、
ダビデ
こんにちは@silvia_zandoli2
発生している問題に関連している可能性があるので、次のThreadを確認することをお勧めします。
こんにちは、
ブートローダーが正常に起動し (HSE_SignBootImage OK)、検証に合格すると、システムの LED が短時間青色に点滅します (セキュア ブートが成功したことを示します)。しかし、再起動または2回目のデバッグ時にシステムがクラッシュし、/* 生成されたタグがAPPBLに対して有効であることを確認する*/が合格しません。
#if VERIFY_TAG
srvResponse = HSE_VerifyBootImage(pAppBL);
ASSERT(HSE_SRV_RSP_OK == srvResponse);
問題は上書きにあると思われます。修正方法をご存知ですか?
どうもありがとうございます。
こんにちは@silvia_zandoli2
HSE サービス応答 0x55A5AA33 は HSE_SRV_RSP_OK に対応します。
ただし、HSE_SignBootImage() 関数の呼び出し時に問題が発生する場合は、次のThreadを確認することをお勧めします。発生している問題に関連している可能性があります。
HSE_VerifyBootImage は HSE_SRV_RSP_VERIFY_FAILED を返します
問題が解決しない場合、またはThreadが特定のCASEに対応していない場合は、お知らせください。
S32K3_HSE_DemoExamples_1_0_0、S32K344デバイスを持っています
ADKP は正常にプログラムされています (check_debug_password_programmed_status() が TRUE を返します)。
しかし、関数HSE_SignBootImage()は呼び出し直後に失敗し続け、エラーコード0x55a5aa33を返します。
基本的なセキュアブートのメインではアサートをパスしません
/* 生成されたタグがAPPBLに対して有効であることを確認します */
#if VERIFY_TAG
srvResponse = HSE_VerifyBootImage(pAppBL);
ASSERT(HSE_SRV_RSP_OK == srvResponse);
#endif
S32K344_SecureBootBlinky.bin を生成し、C:\NXP に配置します。SecureBootBlinky と Basic_SecureBoot は C:\NXP\S32K3_HSE_DemoExamples_1_0_0\S32K3_HSE_DemoExamples\Secure_Boot にあります。
ベーシックセキュアブートのリンカーファイル「S32K344_flash.ld」に、
_adkp_key :
{
. = ALIGN(4);
キープ(*(_adkp_key))
. = ALIGN(4);
} > フラッシュ
そのファイルを変更する必要がありますか?あなたに添付します
/*****************************************************************************
*
* Copyright 2020-2022 NXP
* All Rights Reserved
*
*****************************************************************************
*
* このソフトウェアはNXPによって「現状のまま」提供され、明示的または黙示的を問わず、
* 黙示の保証(ただし、これに限定されません) * 商品性および特定目的への適合性については保証されません。 * いかなる場合においても、NXPまたはその貢献者は、いかなる直接的、間接的、偶発的、特別、懲罰的、または結果的な損害に対しても責任を負わないものとします。 * (代替品の調達を含むが、これに限定されません) * サービス、使用、データ、利益の喪失、または事業の中断) * いかなる原因であっても、また契約上の責任理論に基づいても、 * 厳格責任、または不法行為(過失その他を含む)から生じる * いかなる場合においても、このソフトウェアの使用から生じるいかなる損害についても、 * 当該損害の可能性。
*
********************************************************************************/
__STACK_SIZE = 0x00001000;
__HEAP_SIZE = 0x00001000;
/* メモリ領域を構成するリンカー スクリプト。Aggiungi PFLASH_SECURE は、地域の鳩を見て、チアビの批判を受け入れます*/
メモリ
{
ITCM (RWX) : 原点 = 0x00000000、長さ = 0x10000
PFLASH (RX) : 原点 = 0x400000、長さ = 0x3f4000
DFLASH (RX) : 原点 = 0x10000000、長さ = 0x20000
DTCM (RW) : 原点 = 0x20000000、長さ = 0x20000
SRAM0_STDBY (RW) : 原点 = 0x20400000、長さ = 0x8000
SRAM (RW) : 原点 = 0x20408000、長さ = 0x48000
}
/* セクションとシンボル値を配置するためのリンカー スクリプト。一緒に使用する必要があります
* メモリ領域 FLASH および RAM を定義する他のリンカー スクリプトを使用します。
* 次のシンボルを参照します。これらはコード内で定義する必要があります。
* Reset_Handler: リセットハンドラのエントリ
*
* 次のシンボルを定義します。コードでは定義しなくても使用できます。
* __exidx_start
* __exidx_end
* __ecc_table_start __
* __ ecc_table_end __
* __電子テキスト
* __data_start __
* __事前初期化配列開始
* __preinit_array_end
* __init_array_start
* __init_array_end
* __fini_array_start
* __fini_array_end
* __data_end __
* __ bss_start __
* __ bss_end __
* __ end __
* end
* __ヒープ制限
* __StackLimit
* __スタックトップ
* __スタック
*/
ENTRY(リセットハンドラー)
セクション
{
。文章:
{
KEEP(*(.vectors))
*(。文章*)
KEEP(*(.init))
KEEP(*(.fini))
/* .ctors*/
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o).ctors)
*(SORT(.ctors.*))
*(.ctors)
/* .dtors*/
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o).dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
保持(*(.eh_frame*))
} > フラッシュ
.ARM.extab:
{
*(.ARM.extab*.gnu.linkonce.armextab.*)
} > フラッシュ
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx*.gnu.linkonce.armexidx.*)
} > フラッシュ
__exidx_end = .;
.ecc.テーブル:
{
。= 整列(4);
__ecc_table_start__ = .;
QUAD (__data_start __)
QUAD ((__ data_end __ - __ data_start__) /
クアッド (__bss_start __)
QUAD ((__ bss_end __ - __ bss_start__) /
QUAD ( __HeapTop)
QUAD ((__ヒープ制限 - __ヒープトップ) /
QUAD ( __StackLimit)
QUAD ((__スタックトップ - __StackLimit) /
クワッド(原点(ITCM))
クワッド(長さ(ITCM)/
クアッド(原点(DTCM))
クワッド(長さ(DTCM)/
__ecc_table_end__ = .;
} > フラッシュ
.copy.table :
{
。= 整列(4);
__copy_table_start__ = .;
LONG ( __etext)
LONG (__データ開始__)
LONG ((__データ終了__ - __データ開始__) / 4)
/* ここに各追加データセクションを追加します */
/*
LONG ( __etext2)
LONG (__ data2_start __)
LONG ((__ data2_end __ - __ data2_start __) / 4)
*/
__ copy_table_end__ = .;
} > フラッシュ
.zero.table :
{
。= 整列(4);
__zero_table_start __ = .;
/* Add each additional bss section here */
/*
LONG (__ bss2_start __)
LONG ((__ bss2_end __ - __ bss2_start __) / 4)
*/
__ zero_table_end__ = .;
} > フラッシュ
__etext = ALIGN(8);
.boot_header:
{
KEEP(*(.boot_header))
} > Dフラッシュ
.standby_ram:
{
*(.スタンバイ_ram)
} > SRAM0_STDBY
/* ECC初期化シーケンス __data_start __ and __ data_end __ should be aligned on 8 bytes */
.data : AT (__ etext)
{
。= 整列(8);
__data_start__ = .;
*(vテーブル)
*(。データ)
*(。データ。*)
. = ALIGN(4);
/* 事前初期化データ */
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP(*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
. = ALIGN(4);
/* 初期化データ */
PROVIDE_HIDDEN (__init_array_start = .);
KEEP(*(SORT(.init_array.*)))
KEEP(*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
. = ALIGN(4);
/* 有限データ */
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP(*(SORT(.fini_array.*)))
KEEP(*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);
保持(*(.jcr*))
。= 整列(8);
/* 全データ終了 */
__data_end__ = .;
} > SRAM
/* ECC 初期化シーケンスのため __bss_start __ and __ bss_end __ should be aligned on 8 bytes */
.bss :
{
. = ALIGN(8);
__ bss_start __ = .;
*(.bss)
*(.bss.*)
*(COMMON)
. = ALIGN(8);
__ bss_end__ = .;
} > SRAM
/* ECC初期化シーケンスのため__HeapTop and __ HeapLimitは8バイトに揃える必要があります */
。ヒープ(コピー):
{
。= 整列(8);
__HeapTop = .;
__終了__ = .;
_end = .;
PROVIDE(終了 = .);
。= .+ __HEAP_SIZE;
。= 整列(8);
__ヒープ制限 = .;
} > SRAM
/* ECC初期化シーケンスのため__StackLimit and __ StackTopは8バイトに揃える必要があります */
。スタック(ORIGIN(SRAM) + LENGTH(SRAM) - __STACK_SIZE) (コピー) :
{
。= 整列(8);
__StackLimit = .;
. = . + __スタックサイズ;
。= 整列(8);
__StackTop = .;
} > SRAM
PROVIDE(__スタック = __StackTop);
/* データ + ヒープ + スタックが RAM 制限を超えていないか確認します */
ASSERT( __StackLimit >= __ HeapLimit、「領域 RAM がスタックでオーバーフローしました」)
CM7_START_ADDRESS = ORIGIN(PFLASH);
__STDBYRAM_START = ORIGIN(SRAM0_STDBY);
__STDBYRAM_SIZE = 長さ(SRAM0_STDBY);
}
こんにちは@silvia_zandoli2
次のThreadを参照してください。このトピックに関連する情報が含まれており、役立つ可能性があります。
[S32K3] HSE使用時にパスワードでデバッグアクセスを制限する
さらに、汎用 HSE デモ例および/または HSE_DEMOAPP 用の S32K3 MCUで提供されている関数 ProgramADKPService()、Advance_LifeCycle_Service()、および attributeProgrammingService() の実装を確認することをお勧めします。
BR、ヴェインB