Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

Nvidia Jetson TX2 – build u-boot

以下要先準備的事項:

  1. 下載 driver:L4T Driver Package [BSP]
  2. 下載 source code:L4T Driver Package [BSP] Sources

網址: https://developer.nvidia.com/embedded/linux-tegra

wget https://developer.nvidia.com/embedded/dlc/r32-3-1_Release_v1.0/t186ref_release_aarch64/Tegra186_Linux_R32.3.1_aarch64.tbz2wget https://developer.nvidia.com/embedded/dlc/r32-3-1_Release_v1.0/Sources/T186/public_sources.tbz2tar xf Tegra186_Linux_R32.3.1_aarch64.tbz2
tar xf public_sources.tbz2

source code 的 tar 包,解壓縮後會位在 Linux_for_Tegra/source/public/

https://forums.developer.nvidia.com/t/problem-flashing-u-boot-on-to-tx2-emmc/111601下載 toolchain:

wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz

將 toolchain 解壓縮在 opt/linaro 裡面

sudo mkdir /opt/linaro
sudo tar -C /opt/linaro -xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz

安裝可能會用到的套件

sudo apt update
sudo apt install flex device-tree-compiler

解壓縮原始碼

cd Linux_for_Tegra/source/
mkdir u-boot_src
tar -C u-boot_src/ -xf public/u-boot_src.tbz2
cd u-boot_src/u-boot/

設定toolchain的環境變數

export CROSS_COMPILE=/opt/linaro/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

重新編譯

make distclean
make p2771-0000-500_defconfig
make

將產生的u-boot.bin 檔 copy 到 flash.sh 將會讀取的目錄

cp u-boot.bin ../../../bootloader/t186ref/p2771–0000/500/

將TX2板子連接電腦並進入recovery mode,並連接 serial console 以監看 log

再使用flash.sh寫入 TX2 板子

cd ../../../
sudo ./flash.sh -r -k kernel jetson-tx2 mmcblk0p1

驗證:

將 source code 做些修改

vim common/board_info.c

在 int show_board_info(void) 這個 function 中加入一行

printf(“HELLO THERE~~~~~~~~~~~~~~~~\n”);

存檔,重新編譯並flash一次

查看 serial console 若有看到加入的文字

表示 flash 進去的u-boot.bin 確實是自行編譯過的。

然後,官方在以下網址指出:(Flashing U-Boot Only)

Tegra Linux Driver

Edit description

docs.nvidia.com

由此可知 u-boot 是跟 kernel 在同一個partition,所以在燒寫的時候應該是kernel 和 u-boot 是一起的。但是照著文件下 -k LNX 參數會有錯誤發生,看了以下連結才知道要下 -r -k kernel

problem flashing u-boot on to TX2 eMMC

After building my own version of u-boot according the procedure in…

forums.developer.nvidia.com

此外,眼尖的話在操作過程會發現source目錄下有一些 script 檔,這些都是可以使用的,像是

nv_src_build.sh

會把全部的 source code 都 build 完。解壓縮後的 u-boot source 也會看到

nvbuild.sh

設定好它需要的環境變數後就可以直接一鍵執行編譯 u-boot 。