Jetson Nano – Enabling Secure Boot

Jetson Nano

この記事では、Jetson NanoのSecure Bootの設定の方法について説明します。

Fuse

Jetson NanoはSecure Bootを有効にするfuseが存在します。fuseは、「bitの0を1に書き換えでき、bitの1を0に書き換えできない」、という特徴があります。電源を切っても書き換えた値は記憶されます。またJetson NanoのfuseにはLock機能が存在し、Lockを1に書き換えるとLock対象のfuseは書き換えできなくなります。詳細は https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3261/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/bootloader_secure_boot.html を参照してください。

Jetson NanoでSecure Bootに関連するfuseは以下の通りです。

secure boot fuse
https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3261/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/bootloader_secure_boot.html

Enabling Secure Boot

Secure Bootを有効にするには、Jetson NanoをRecovery Modeに入れ、fuse書き込みコマンドを実行します。Recovery Modeに入れる方法はこちらの記事を参照してください。fuse書き込みツールは https://developer.nvidia.com/embedded/l4t/r32_release_v7.2/t210/secureboot_r32.7.2_aarch64.tbz2 からダウンロードし、Linux_for_Tegra ディレクトリに展開しください。

これ以降の操作は Linux_for_Tegra ディレクトリで実行します。

Secure Bootに必要なRSA秘密鍵を作成します。Jetson Nanoは2048bitのRSA鍵が必要です。

openssl genrsa -out jetson_rsa_private.pem 2048Code language: Bash (bash)

fuseの書き込みを行います。

この操作を一度行うと常にSecure Bootになります。もとに戻すことはできません。

jetson_rsa_priv.pemを無くすと2度と内部のROMを書き換えることができなくなります。

sudo ./odmfuse.sh -i 0x21 -c PKC -k jetson_rsa_priv.pem -p --disable-jtagCode language: Bash (bash)

-c PKC: Public Key Cryptographyを指定
-p: odm_production_mode fuseに1に書き込み。odm_production_modeはLockの機能を持ち、1を書き込むとpublic_key_hashは書き込み不可になります。
-k jetson_rsa_priv.pem: jetson_rsa_priv.pemのsha256値をpublic_key_hash fuseに書き込み
–disable-jtag: Secure Bootの観点からJTAGは無効化に設定します。

以上の操作によりJetson NanoはSecure Bootが有効になります。

最後にSecure Bootを有効にしたイメージの書き込みを行います。

sudo ./flash.sh -x 0x21 -u jetson_rsa_priv.pem jetson-nano-devkit mmcblk0p1

以上です。