Skip to content

Commit

Permalink
board: add nvidia jetson tx2 support
Browse files Browse the repository at this point in the history
Tested-by: Asaf Kahlon <asafka7@gmail.com>
Signed-off-by: Christian Stewart <christian@paral.in>
  • Loading branch information
paralin committed Nov 18, 2020
1 parent cea1fb2 commit 886d60f
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 0 deletions.
83 changes: 83 additions & 0 deletions board/jetson/tx2/readme.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
NVIDIA Jetson TX2

Intro
=====

This configuration supports the Jetson TX2 devkit.

Building
========

Configure Buildroot
-------------------

For Jetson TX2:

$ make jetsontx2_defconfig

Build the rootfs
----------------

You may now build your rootfs with:

$ make


Flashing
========

Once the build process is finished you will have the target binaries in the
output/images directory, with a copy of linux4tegra.

Flashing to the internal eMMC is done by booting to the official recovery mode,
and flashing the system from there. The default factory-flashed TX2 is suitable.

There are a lot of cases where the TX2 will not boot properly unless all of the
peripherals are fully disconnected, power is disconnected, everything fully
resets, and then the power is introduced back again.

The recovery mode of the Jetson is used to flash. Entering recovery:

- Start with the machine powered off + fully unplugged.
- Plug in the device to power, and connect a HDMI display.
- Connect a micro-USB cable from the host PC to the target board.
- Power on the device by holding the start button until the red light is lit.
- Hold down the RST button and REC button simultaneously.
- Release the RST button while holding down the REC button.
- Wait a few seconds, then release the REC button.

To flash over USB:

```
cd output/images/linux4tegra
sudo bash ./flash.sh \
-I ../rootfs.ext2 \
-K ../Image \
-L ../u-boot-dtb.bin \
-C "ramdisk_size=100000 net.ifnames=0 elevator=deadline" \
-d ../tegra186-quill-p3310-1000-c03-00-base.dtb \
jetson-tx2-devkit mmcblk0p1
```

This will run the `flash.sh` script from L4T, and will setup the kernel, u-boot,
persist + boot-up partition mmcblk0p1. This may overwrite your existing work so
use it for initial setup only.

Bootup Process
==============

The TX2 boots from the internal eMMC, at mmcblk0p1.

A "secure boot" process is used, with multiple bootloaders:

- BootROM -> MB1 (TrustZone)
- MB2/BPMP -> (Non-Trustzone)
- Cboot (uses Little Kernel)
- Uboot
- Kernel

Uboot is flashed to the mmcblk0p1 emmc partition.

Cboot could be compiled from source, and the source is available from the
official sources, however, we do not (yet) compile cboot.

1 change: 1 addition & 0 deletions board/jetsontx2
55 changes: 55 additions & 0 deletions configs/jetsontx2_defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
BR2_aarch64=y
BR2_cortex_a57=y

# enable specific optimizations
BR2_TARGET_OPTIMIZATION="-march=armv8-a+crypto -mcpu=cortex-a57+crypto"

# Toolchain reference: docs.nvidia.com: "Jetson Linux Driver Package Toolchain"
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_BINUTILS_VERSION_2_32_X=y

BR2_SYSTEM_DHCP="eth0"

# Linux headers same as kernel, a 4.9 series
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_9=y
BR2_KERNEL_HEADERS_AS_KERNEL=y

BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,madisongh,linux-tegra-4.9,0be1a57448010ae60505acf4e2153638455cee7c)/linux-tegra-4.9.140-r1.tar.gz"
BR2_LINUX_KERNEL_DEFCONFIG="tegra"

# Build the DTB from the kernel sources
BR2_LINUX_KERNEL_DTS_SUPPORT=y
BR2_LINUX_KERNEL_INTREE_DTS_NAME="_ddot_/_ddot_/_ddot_/_ddot_/nvidia/platform/t18x/quill/kernel-dts/tegra186-quill-p3310-1000-c03-00-base"

BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y

BR2_PACKAGE_LINUX4TEGRA=y
BR2_PACKAGE_LINUX4TEGRA_PLATFORM_T186REF=y

# TODO: NVIDIA_CONTAINER_TOOLKIT requires a go-module integration.
# BR2_PACKAGE_NVIDIA_CONTAINER_TOOLKIT=y

BR2_PACKAGE_LINUX_FIRMWARE=y
BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX=y

# Required tools to create the image
BR2_PACKAGE_HOST_DOSFSTOOLS=y
BR2_PACKAGE_HOST_JQ=y
BR2_PACKAGE_HOST_PARTED=y

# Filesystem / image
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
BR2_TARGET_ROOTFS_EXT2_SIZE="1024M"
# BR2_TARGET_ROOTFS_TAR is not set

# Uboot
BR2_TARGET_UBOOT=y
BR2_TARGET_UBOOT_BOARD_DEFCONFIG="p2771-0000-500"
BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
BR2_TARGET_UBOOT_CUSTOM_TARBALL=y
BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,paralin,u-boot-tegra,e6da093be3cc593ef4294e1922b3391ede9c94da)/u-boot-tegra-l4t-r32.4-v2016.7.tar.gz"
BR2_TARGET_UBOOT_FORMAT_DTB_BIN=y
BR2_TARGET_UBOOT_NEEDS_DTC=y

0 comments on commit 886d60f

Please sign in to comment.