4.21. Nvidia Tegra

4.21.1. Building

All currently supported Tegra boards are integrated in a single multi-image build (Multi Image Support). Building is as easy as typing:

make ARCH=arm tegra_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-v7-compiler-

NOTE: replace the arm-v7-compiler- with your ARM v7 cross compiler.

Tegra images are specific to the bootsource. The build will generate images for all combinations of bootsources and supported boards. You can find the completed images in the images/ subdirectory.

The naming scheme consists of the triplet tegracodename-boardname-bootsource

4.21.2. Kickstarting a board using USB

The tool needed to transfer and start a bootloader image to any Tegra board using the USB boot mode is called TegraRCM. Most likely this isn’t available from your distributions repositories. You can get and install it by running the following commands:

git clone https://github.com/NVIDIA/tegrarcm.git
cd tegrarcm
sudo make install

Connect the board to your host via the USB OTG port. The next step is to bring the device into USB boot mode. On developer boards this could normally be done by holding down a force recovery button (or setting some jumper) while resetting the board. On other devices you are on your own finding out how to achieve this.

The tegrarcm tool has 3 basic options:

--bct        : the BCT file needed for basic hardware init,
               this can be found in the respective board directory
--bootloader : the actual barebox image
               use the -usbloader image
--loadaddr   : start address of the barebox image
               use 0x00108000 for Tegra20 aka Tegra2 devices
               use 0x80108000 for all other Tegra devices

An example command line for the NVIDIA Beaver board looks like this:

tegrarcm --bct arch/arm/boards/nvidia-beaver/beaver-2gb-emmc.bct \
         --bootloader images/barebox-tegra30-nvidia-beaver-usbloader.img \
         --loadaddr 0x80108000

You should now see barebox coming up on the serial console.

4.21.3. Writing barebox to the primary boot device

NOTE: this may change in the near future to work with the standard barebox update mechanism (Updating barebox).

Copy the image corresponding to the primary boot device for your board to a SD-card and plug it into your board.

Within the barebox shell use the standard mount and cp commands to copy the image to the boot device.

On the NVIDIA Beaver board this looks like this:

barebox@NVIDIA Tegra30 Beaver evaluation board:/ mount -a
mci0: detected SD card version 2.0
mci0: registered disk0
mci1: detected MMC card version 4.65
mci1: registered disk1.boot0
mci1: registered disk1.boot1
mci1: registered disk1
ext4 ext40: EXT2 rev 1, inode_size 128
ext4 ext41: EXT2 rev 1, inode_size 256
ext4 ext42: EXT2 rev 1, inode_size 256
none on / type ramfs
none on /dev type devfs
/dev/disk0.0 on /mnt/disk0.0 type ext4
/dev/disk0.1 on /mnt/disk0.1 type ext4
/dev/disk1.1 on /mnt/disk1.1 type ext4
barebox@NVIDIA Tegra30 Beaver evaluation board:/ cp /mnt/disk0.0/barebox-tegra30-nvidia-beaver-emmc.img /dev/disk1.boot0

That’s it: barebox should come up after resetting the board.