ユーザ用ツール

サイト用ツール


u-bootのカスタマイズ

U-Bootのカスタマイズ

Jetson TX2 NX Moduleで、U-BootのTX2 NX向けバージョンのバグを修正する必要に迫られて、一度、U-Bootを自分でビルドして実際に書き込んで使用したことはあるが、そのときは、詳細な記録を残していなかったので、今回、Jetson Nano Moduleの環境にて、U-Bootのカスタマイズ、というか、具体的に変更する必要のあるネタは今のところないので、とりあえず、自分でビルドしてそれを使ってみるとして、その記録をここに残す。

U-Bootのビルド

32.7.1 Release Notes

https://developer.download.nvidia.com/embedded/L4T/r32_Release_v7.1/Jetson_Linux_Driver_Package_Release_Notes_R32.7.1_GA.pdf?_WGgKwjJxb7q7sje7RDMOPrUef0LWxRhS5EGYVw62YJLB-Cz2BXy08ufELuY_VdN4ZJXQ-H5aD9RvAGPrKKhQIp-CDP6g6y1RJDSryNgSLZNPMoF-bNEX0wX8UsSUl0QmPRijgappDtfxk5K4Ho20r1nAHTk3yJDdb6iVKVGAb-Y2GMcPA9aEEQuq-d_BJ4kNWeYipo&t=eyJscyI6ImdzZW8iLCJsc2QiOiJodHRwczpcL1wvd3d3Lmdvb2dsZS5jb21cLyJ9

に、

Release tag tegra-l4t-r32.7.1

とあるので、これを使うのか。

NVIDIA Jetson Linux Developer Guide 32.7.1 Release のDownloading and Building U-Bootのセクション

https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3271/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/uboot_guide.html#wwpID0E0UL0HA

を参照しつつやってみる。(TX2 NXのときもそうしたはず)

まずは、ダウンロードして展開。

$ git clone -n git://nv-tegra.nvidia.com/3rdparty/u-boot.git
Cloning into 'u-boot'...
remote: Enumerating objects: 691094, done.
remote: Counting objects: 100% (691094/691094), done.
remote: Compressing objects: 100% (108227/108227), done.
remote: Total 691094 (delta 573623), reused 691060 (delta 573589), pack-reused 0
Receiving objects: 100% (691094/691094), 136.85 MiB | 1.46 MiB/s, done.
Resolving deltas: 100% (573623/573623), done.
$ cd u-boot/
$ git checkout -b jetson_nano_module_u-boot_customization tegra-l4t-r32.7.1
Updating files: 100% (16598/16598), done.
Switched to a new branch 'jetson_nano_module_u-boot_customization'
$ git branch
* jetson_nano_module_u-boot_customization
$ ls
Kbuild	     Makefile  board	  configs  dts	     include  scripts
Kconfig      README    cmd	  disk	   env	     lib      test
Licenses     api       common	  doc	   examples  net      tools
MAINTAINERS  arch      config.mk  drivers  fs	     post
$ git checkout-index -a --prefix=exports/
$ ls
Kbuild	     Makefile  board	  configs  dts	     fs       post
Kconfig      README    cmd	  disk	   env	     include  scripts
Licenses     api       common	  doc	   examples  lib      test
MAINTAINERS  arch      config.mk  drivers  exports   net      tools
$ mkdir ~/nvidia/nvidia_sdk/JetPack_4.6.2_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra/sources
$ mv exports ~/nvidia/nvidia_sdk/JetPack_4.6.2_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra/sources/u-boot
$ cd ~/nvidia/nvidia_sdk/JetPack_4.6.2_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra/sources/u-boot
$ ls
Kbuild	     Makefile  board	  configs  dts	     include  scripts
Kconfig      README    cmd	  disk	   env	     lib      test
Licenses     api       common	  doc	   examples  net      tools
MAINTAINERS  arch      config.mk  drivers  fs	     post

次に、ビルド。環境変数を設定して、makeなど。

$ export CROSS_COMPILE=$HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
$ make distclean
$ make p3450-0000_defconfig
$ make

無事にmakeできたっぽい。(っぽいと書くのは、もちろん、単にmakeして、エラーらしきメッセージが出なかっただけだから)

ちなみに、32.6.1のときのTX2 NX向けのバグだったところをみると、

$ grep kernel_addr_r_size include/configs/p3636-0001.h 
	"kernel_addr_r_size=08000000\0" \

と、この32.7.1ではちゃんと修正されていることが確認できた。

まだカスタマイズまではいかず。。。

(2022/10/7)

2022/9/21に非公開領域にて記録していた内容だが、U-Bootのカスタマイズの一例としてこちらに転記。

ひとまず、U-Bootのデフォルトのブート順序を変更してみる。

U-Bootのソース内、include/configs/p3450-0000.h内に定義されている、マクロBOOTTARGETDEVICESの定義を以下のように変更した。

/*#define BOOT_TARGET_DEVICES(func)             \
        func(MMC, mmc, 1) \
        func(MMC, mmc, 0) \
        func(USB, usb, 0) \
        func(NVME, nvme, 0) \
        func(PXE, pxe, na) \
        func(DHCP, dhcp, na)*/
#define BOOT_TARGET_DEVICES(func) \
        func(NVME, nvme, 0) \
        func(MMC, mmc, 1) \
        func(MMC, mmc, 0) \
        func(USB, usb, 0) \
        func(PXE, pxe, na) \
        func(DHCP, dhcp, na)

これでmake。 “Before Flashing”に従って所定の場所にコピーした上で、

$ sudo ./flash.sh -k LNX jetson-nano-devkit-emmc mmcblk0p1

とやるが、初期状態では無理のようで、一旦は、全体的にflash、つまり、

$ sudo ./flash.sh -r jetson-nano-devkit-emmc mmcblk0p1

と実行。 これで、デバッグシリアルから手動でブート順序をSSD優先に変更することなく、そのままデフォルトでSSDからブートできたみたい。OK。

(2023/6/16)

今日は、SPI通信ができなくなったJetson Nanoに対して、U-Bootのバージョンを変更してみることにより、SPIが復活するかどうかをみていく。

というのは、SPI通信が突如できなくなったJetson Nanoに対して、SDK Managerにて初期化してSPIが復活した個体(Jetson Nano #1)と、SDK Managerで初期化してもSPIが復活しなかった個体(Jetson Nano #2)とが発生しているが、Jetson Nano #1と#2とでどちらも同じシステムSDにて起動しているが、その違いが発生している。ということから、は現在のところ、U-Bootのバージョンの違いによってその違いが発生していると推測。

今回、R32.7.3をベースに作業してみているので、以下のページを参照。

https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3273/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/uboot_guide.html#

Downloading and Building U-Bootで、まず、U-bootをダウンロード。

$ git clone -n git://nv-tegra.nvidia.com/3rdparty/u-boot.git
$ git checkout -b jetson_nano_u-boot_customization tegra-l4t-r32.7.1
$ make distclean
$ make p3450-0000_defconfig
$ make
$ cp u-boot{,.bin,.dtb,-dtb.bin} ~/nvidia/nvidia_sdk/JetPack_4.6.3_Linux_JETSON_NANO_TARGETS/Linux_for_Tegra/bootloader/t210ref/p3450-0000/
$ sudo ./flash.sh -k LNX jetson-nano-qspi-sd mmcblk0p1
u-bootのカスタマイズ.txt · 最終更新: 2023/06/16 14:08 by makotoa67