Jetson Nano – How to customize u-boot

Jetson Nano

この記事ではu-bootをカスタマイズする方法について説明します。u-bootのソースコードを取得し、u-bootをビルドし、ビルドしたu-bootをJetson Nanoに書き込む方法について解説します。u-bootについてはこちらの記事を参照してください。

u-boot source code

以下の作業はLinux_for_Tegraで行います。Linux_for_Tegraディレクトリはこちらの記事を参照してください。

Linux_for_Tegraディレクトリにsource_sync.shというスクリプトがあります。これはソースコードをダウンロードするスクリプトで、u-bootはnv-tegra.nvidia.com/3rdparty/u-boot.gitレポジトリからダウンロードしていることがわかります。

$ git clone https://nv-tegra.nvidia.com/3rdparty/u-boot.git
$ cd u-boot
$ git tag | grep 32.7
tegra-l4t-r32.7.1Code language: Bash (bash)

u-bootレポジトリにtegra-l4t-r32.7.1というtagが存在することがわかります。このtagをcheckoutします。

git checkout tegra-l4t-r32.7.1Code language: Bash (bash)

これでu-bootのソースコードが取得できました。

build u-boot

u-bootをビルドするためにarm用のgccをインストールする必要があります。gccはhttps://developer.nvidia.com/embedded/linux-tegra-r3272にあるhttps://developer.nvidia.com/embedded/dlc/l4t-gcc-7-3-1-toolchain-64-bitから取得できます。ダウンロードしたgcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xzを今回は/optの下に展開します。

$ sudo tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
$ ls /opt
gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnuCode language: Bash (bash)

u-bootをビルドしてみます。

export CROSS_COMPILE=/opt/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
make distclean
make p3541-0000_defconfig
make -jCode language: Bash (bash)

update u-boot

ビルドしたu-bootをJetson Nanoに書き込みます。パラメータにjetson-nano-devkitではなく、jetson-nano-qspiを指定します。こちらこちらの記事でも説明しましたが、u-bootはon board flashに保存されるため、on board flashのQSPI-NORを書き換えれば十分でSD Cardの書き換えは不要です。もちろんjetson-nano-devkitを指定して、on board flashとSD Cardの両方を書き換えても問題ありません。

cp u-boot{,.bin,.dtb,-dtb.bin} ../bootloader/t210ref/p3450-0000/
cd ..
sudo ./flash.sh -x 0x21 jetson-nano-qspi mmcblk0p1Code language: Bash (bash)

Jetson NanoのUARTの出力を確認してみます。UARTの接続方法はこちらの記事を参照してください。

U-Boot 2020.04 (Sep 24 2022 - 17:06:08 +0900)

SoC: tegra210
...Code language: CSS (css)

先程ビルドしたu-bootが起動しました。

以上です。