I’m having trouble getting a Tx1 DevKit to boot using a
u-boot that I have built. Specific notes are below but the TL;DR; question is: what is the new process in R28.1 to deploy
u-boot after building it?
I have a working build of a custom tx1-based system with custom rootfs, custom kernel build and custom uboot build currently based on L4T R24.2.1. I’m trying to update this to R28.1 and just “swapping in” R28.1 leads to a non-booting system. Using a devkit I’ve narrowed it down to something different about the bootloader deployement.
R28.1 Boot Flow
The documentation for l4T r28.1 says:
U-Boot is the default boot loader for NVIDIA® Tegra® Linux Driver Package.
For more information, see U-Boot Customization.
(i.e. from file:///tmp/nvidia-docs/nvl4t_docs/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fl4t_bootflow_tx1.html%23wwconnect_header)
This does appear to be the case as I see the following in the serial terminal output while booting:
U-Boot 2016.07-g0ce7ca2 (Jul 20 2017 - 00:37:03 -0700)
However the file that is actually flashed to the EBT partition is called
cboot.bin and comes from Linux_for_Tegra/bootloader/t210ref/cboot.bin
This is different than previous BSPs where
u-boot-dtb (ELF file) was patched with a TBOOT header and then deployed to the EBT partition (as filename u-boot-dtb.bin`).
We currently build u-boot ourselves as we have applied a couple of patches to the source which aren’t in the nvidia distributed version. In older releases (R24.1) we would build u-boot from source, then run gen-tboot-image.py on the file to get the image that was flashed to the EBT partition. When we replicate that same process with the R28.1 uboot and a stock L4T driver package and rootfs, we are unable to boot.
We are building from the nvidia branch
tegra-l4t-r28.1) on git://nv-tegra.nvidia.com/3rdparty/u-boot.git currently at commit:
commit 0ce7ca286491e97a34d741bd92a57f2dcdc3033c (tag: tegra-l4t-r28.1, nvidia/l4t/l4t-r28.1, l4t/l4t-r28.1) Author: JC Kuo <email@example.com> Date: Fri Apr 14 17:54:21 2017 +0800 T210: do not enable PLLE and UPHY PLL HW PWRSEQ This commit removes the programming sequence that enables PLLE and UPHY PLL hardware power sequencers. Per TRM, boot software should enable PLLE and UPHY PLLs in software controlled power-on state and should power down PLL before jumping into kernel or the next stage boot software. Bug 1889735 Change-Id: I41b563d613b502abe902393b92ce311720d59ec0 Signed-off-by: JC Kuo <firstname.lastname@example.org> Reviewed-on: http://git-master/r/1462905 (cherry picked from commit f6ce7fbb731949fb94187b735ee76d30ef6256ad on dev-other-v2016.07) Reviewed-on: http://git-master/r/1484083 Reviewed-by: Stephen Warren <email@example.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Tom Warren <firstname.lastname@example.org> Tested-by: Tom Warren <email@example.com>
There must be something different about the uboot configuration and/or boot flow and the method used to generate the bootloader partition image that has changed between 24.1 and 28.1.
Steps to reproduce this problem:
- Start with a fresh 28.1 Driver pack
- Extract the sample root filesystem into rootfs
4. flash with
sudo ./flash.sh jetson-tx1 mmcblk0p1
4. flash with
sudo ./flash.sh -r -L bootloader/t210ref/cboot.bin jetson-tx1 mmcblk0p1
(should be the same as above)
FAILS at flash step:
4. sudo ./flash.sh -L u-boot-dtb.bin jetson-tx1 mmcblk0p1
Error: missing bootloader (/home/skydio/aircam/build/images/LinuxForTegra_R28.1.0_arm64_tx1/u-boot-dtb.bin).
FAILS to boot:
4. sudo ./flash.sh -L bootloader/t210ref/p2371-2180/u-boot-dtb.bin jetson-tx1 mmcblk0p1
[0000.403] Performing RAM repair [0000.406] Updating A64 Warmreset Address to 0xa00002e9 [0000.434] Bootloader DTB Load Address: 0x83000000 [0000.462] Kernel DTB Load Address: 0x83100000 [0000.467] Bootloader is not valid [0000.470] Error in NvTbootLoadBinary: 0x14 ! [0000.474] GPT: Partition NOT found ! [0000.477] Find Partition via GPT Failed [0000.481] Find Partition via PT Failed [0000.485] function NvTbootGetBinaryOffsets: 0x1 error [0000.489] Error in NvTbootLoadBinary: 0x1 ! [0000.493] Error is 1
FAILS to boot:
4. flash with
sudo ./flash.sh -r -L /path/to/my/build/of/u-boot-dtb.bin jetson-tx1 mmcblk0p1
[0000.403] Performing RAM repair [0000.406] Updating A64 Warmreset Address to 0xa00002e9 [0000.434] Bootloader DTB Load Address: 0x83000000 [0000.462] Kernel DTB Load Address: 0x83100000 [0000.467] Bootloader is not valid [0000.470] Error in NvTbootLoadBinary: 0x14 ! [0000.474] GPT: Partition NOT found ! [0000.478] Find Partition via GPT Failed [0000.481] Find Partition via PT Failed [0000.485] function NvTbootGetBinaryOffsets: 0x1 error [0000.490] Error in NvTbootLoadBinary: 0x1 ! [0000.494] Error is 1