この記事では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.1
Code language: Bash (bash)
u-bootレポジトリにtegra-l4t-r32.7.1というtagが存在することがわかります。このtagをcheckoutします。
git checkout tegra-l4t-r32.7.1
Code 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-gnu
Code 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 -j
Code 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 mmcblk0p1
Code 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が起動しました。
以上です。