Nano C100の初期設定について解説します。

Nano C100とは

「OKdo Nano C100 開発キット(Developer Kit)」は「NVIDIA Jetson Nano 開発者キット B01」の互換品です。Nano C100は、Jetson Nanoとハードウェア・ソフトウェアともに完全な互換性があります。

Nano C100とJetson Nano B01の違い

Nano C100、Jetson Nano B01ともにサイズや基本的な構成は同じです。NVIDIAのSoCが実装されたシステムオンモジュール(SOM)と拡張インタフェースを搭載したキャリアボードという2枚の基板で構成されています。

Jetson Nano B01のSOM基板は、OS起動用ストレージとしてmicroSDカードスロットが搭載されています。

Nano C100のSOM基板は「NVIDIA Jetson Nanoモジュール」という量産向けモジュールを採用しています。OS起動用ストレージは、microSDカードよりも高速で信頼性に優れた16GB eMMCを搭載しています。
Nano C100はキャリアボードにmicroSDカードスロットを搭載しているので、eMMC/microSDのどちらからでもOSを起動できます。

ハードウェアの違い

  • OS起動用ストレージ:Nano C100はeMMCもしくはmicroSD。Jetson Nano B01はmicroSDのみ。
  • ブートローダー用メモリ:Nano C100はeMMC。Jetson Nano B01はSPIフラッシュ。

ソフトウェアの違い

ブートローダー関連の処理を書き換える必要があるため、Nano C100のOSイメージファイルはOKdoが提供。Jetson Nano B01はNVIDIAが提供。

Nano C100の初期設定

下記ページよりOSイメージファイルをダウンロードし、microSDカードに書き込んでください。
OKdo社提供のOSイメージファイル(Ubuntuベース)

OSイメージファイルを書き込むツールはbalenaEtcherをおすすめします。EtcherはWindows/Linux/Macに対応しており、かんたんな操作でOSイメージファイルを書き込めるフリーソフトです。

書き込み完了したmicroSDカードをNano C100に装着して起動してください。初回起動時はeMMCにブートローダーが自動的に書き込まれます。完了後、再起動してください。

ブートローダー書き込みが完了すると、microSDカード>eMMCの優先順位で起動可能となります。
eMMCから起動する場合でも、初回起動時はこの作業が必要です。

eMMCから起動する場合、デフォルトのユーザー名とパスワードは「nano」です。

参考:ブートローダーのカスタム

eMMCを工場出荷時の状態へ初期化したり、ブートローダーをカスタムする場合の参考情報です。

背景

Nano C100はSOM基板に「NVIDIA Jetson Nanoモジュール」を使用しているため、Jetson Nano B01とは下記の違いがあります。

  • Jetson Nano B01はSPIフラッシュにブートローダーが保存されます。Nano C100はSPIフラッシュを搭載しておらず、eMMCにブートローダーを保存します。
  • Jetson Nano B01のmicroSDカードのバス割当はSDMMC1です。Nano C100のmicroSDカードのバス割当はSDMMC3です。

したがって、Nano C100をmicroSDカードから起動するには、NVIDIAが提供しているOSイメージファイルから下記の点を変更する必要があります。

  • SDMMC3から起動ファイルを読み込むようにU-Bootを修正
  • SDMMCから起動できるようにkernel dtsを上書き
  • U-Bootから/etc/nv_boot_control.confを書き換えて、ブートローダー用ストレージとしてSPIフラッシュのかわりにeMMCを指定する ※1
  • U-Bootから/boot/extlinux/extlinux.confを書き換えて、SDMMC3をrootfsとして指定する ※2

※1
U-Bootではext4ファイルシステムの書き込みに対応できないため、※1の書き換えは、systemd unitをインストールして代用します。

※2
NVIDIA純正のカーネルでは1.8V UHSモードが指定されている点も対応が必要です。U-Bootでは1.8V UHSモードに対応できません。ソフトリセット(OS起動し、ソフトウェアの制御で再起動)した場合、UHSモードの指定が引き続き有効となっているため、U-BootからmicroSDカードを読み込めません。

上記問題に対応するため、古いSDMMCノードを完全に削除し、デバイスツリーを再構築する必要があります。デバイスツリーの上書きではノードを完全に削除できないからです。
また、信号電圧を1.8Vに切り替える設定も無効にします。
これらの設定にともなって、SDMMC3がmmcblk0となるので、※2の書き換えは不要になります。

ビルドとインストール手順

下記コマンドでリポジトリをクローンします。

git clone --recurse-submodules https://github.com/LetsOKdo/c100-bootupd.git

下記ページからNVIDIA提供のJetson Linux R32.7.3関連ソフトをダウンロードします。
Jetson Linux R32.7.3 | NVIDIA Developer
具体的には下記3つのファイルを、さきほどクローンしたプロジェクトと同じフォルダに保存します。

  • Driver Package (BSP): Jetson-210_Linux_R32.7.3_aarch64.tbz2
  • Sample Root Filesystem: Tegra_Linux_Sample-Root-Filesystem_R32.7.3_aarch64.tbz2
  • Driver Package (BSP) Sources: public_sources.tbz2

下記コマンドを実行すると、eMMCとmicroSDカードから起動できるようになります。

# Run the following command to set up Linux for Tegra
# Only need to run once!
./init-jetpack
# Put your C100 in recover mode first
make flash
# Once the flash completes, C100 will reboot and contains a working system in eMMC.
# ################################
# If you want to enable microSD booting, please follow the reset of the guide:
# ################################
# Press Ctrl+C in serial console to interrupt U-Boot, and execute:
#     ums 0 0
# to mount internal eMMC on your computer.
# We assume it is shown as /dev/sdc
sudo mount /dev/sdc1 /mnt
make flash-data
sudo umount /mnt
# In console, press Ctrl+C to interrupt ums command, and execute:
#     reset
# to reboot C100.

Q&A

JetPackのバージョンは何ですか?

OKdoが提供しているNano C100用のイメージファイルは、NVIDIA社がJetson nano向けに提供している最終バージョンであるJetPack 4.6.3相当(JetPack 4.6.1ベース+Jetson Linux R32.7.3)です。
参考情報:
GitHub – LetsOKdo/c100-bootupd: Custom bootloader for OKdo Nano C100 to enable microSD boot
JetPack SDK 4.6.3 | NVIDIA Developer
Jetson Linux Archive | NVIDIA Developer

出典

Nano C100初期設定の詳細はOKdoの下記ページをご確認ください。