tegrarcm(1) | NVIDIA Tegra Firmware Download Tool | tegrarcm(1) |
tegrarcm - Tegra firmware download utility
tegrarcm [ options ]
This program is used to send code to a Tegra device in recovery mode. It supports both unlocked devices, and those locked with a PKC (private key). It is not capable of flashing firmware to a device, but can be used to download firmware that is then capable of flashing. For example in ChromeOS tegrarcm is used to download a special build of U-Boot to the target Tegra device with a payload that it then flashes to the boot memory device.
Devices with PKC enabled may be handled in two different ways:
Both of these steps require use of the --signed-msgs-file option to indicate where to write/read the signed messages. This option provides a base filename, to which various extensions will be appended, to form the final filenames for the various signed data/messages.
This method is more complex, but allows separation of the download and signing processes. For example, a highly secure signing machine could generate the signed messages and pass them to a factory system for download to the Tegra device.
By default, tegrarcm operates on the first USB applicable device it finds. In a system that contains multiple Tegra devices, the user may wish to specify which device tegrarcm should operate upon. The --usb-port-path option allows this, and in a manner that is most immune to the set of attached USB devices varying.
Note that the USB port path is associated with a physical USB port on a particular hub. This value will vary if you physically re-organize your USB connections. This feature is still useful even if your USB topology changes, providing you have some other mechanism to differentiate attached devices. For example, you could use a wrapper script around tegrarcm that identifies the appropriate device by other means, then automatically calculates the USB port path using the procedures below, and passes the value to tegrarcm.
To determine the USB port path of a device, you must plug it in and find the current USB bus and USB device number of the device, then map that to the USB port path. Simply run lsusb to find the current USB bus and device number. If you have multiple NVIDIA devices attached, you may need to unplug and replug the Tegra device to ensure you know which is which (all while not changing the state of any other USB devices so you don't confuse yourself).
$ lsusb [...] Bus 003 Device 039: ID 0955:7721 NVidia Corp. Bus 003 Device 045: ID 0955:7140 NVidia Corp. [...]
Then, to determine the USB port path, do one of:
$ udevadm info /dev/bus/usb/003/045 P: /devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10.4 N: bus/usb/003/045 E: BUSNUM=003 E: DEVNUM=045 E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-10/3-10.4
$ cat /sys/bus/usb/devices/3-10.4/busnum 3 $ cat /sys/bus/usb/devices/3-10.4/devnum 45
Alternatively, you may already have udev rules that create a device node symlink for the device (after some specific identification algorithm). In that case, you can search the udev output for MAJOR/MINOR values, or /sys/bus/usb/devices/* directories for "dev" files, that match the device node the symlink points to.
Once the port path is known, this value will not vary unless your USB connections are physically changed, so you can use it over and over without repeating the steps above.
1) To download U-Boot to Seaboard, with no PKC enabled:
$ sudo tegrarcm --bct seaboard.bct --bootloader u-boot.bin --loadaddr 0x108000 bct file: seaboard.bct bootloader file: u-boot.bin load addr 0x108000 entry addr 0x108000 device id: 0x7820 uid: 0x33c20c0413fb217 RCM version: 2.1 downloading miniloader to target... miniloader downloaded successfully Chip UID: 0x33c20c0413fb217 Chip ID: 0x20 Chip ID Major Version: 0x1 Chip ID Minor Version: 0x4 Chip SKU: 0x18 (t25) Boot ROM Version: 0x1 Boot Device: 0x3 (SPI) Operating Mode: 0x3 (developer mode) Device Config Strap: 0x0 Device Config Fuse: 0x0 SDRAM Config Strap: 0x0 sending file: seaboard.bct - 4080/4080 bytes sent seaboard.bct sent successfully sending file: u-boot.bin - 268314/268314 bytes sent u-boot.bin sent successfully
2) To read the BCT from a system:
$ sudo tegrarcm --bct ventana.bct readbct bct file: ventana.bct device id: 0x7820 reading BCT from system, writing to ventana.bct...done!
3) To download U-Boot to Jetson TK1, with PKC enabled, in one step:
$ sudo tegrarcm --bct=jetson-tk1.bct --bootloader=u-boot.bin --loadaddr=0x83d88000 --pkc=rsa_priv.der bct file: jetson-tk1-bct.bct bootloader file: u-boot.bin load addr 0x83d88000 entry addr 0x83d88000 device id: 0x7140 uid: 0x640010017410b1000000000016020540 RCM version: 64.1 downloading miniloader to target at address 0x4000e000 (136920 bytes)... miniloader downloaded successfully Chip UID: 0x000000017410b1000000000016020540 Chip ID: 0x40 Chip ID Major Version: 0x1 Chip ID Minor Version: 0x1 Chip SKU: 0x81 (t124) Boot ROM Version: 0x1 Boot Device: 0x2 (EMMC) Operating Mode: 0x6 (odm secure mode with PKC) Device Config Strap: 0x0 Device Config Fuse: 0x0 SDRAM Config Strap: 0x3 sending file: jetson-tk1-bct.bct - 8192/8192 bytes sent jetson-tk1-bct.bct sent successfully sending file: u-boot.bin | 440004/440004 bytes sent u-boot.bin sent successfully
4) To generate signed messages that will allow later downloading of U-Boot to Jetson TK1 with PKC enabled:
$ sudo tegrarcm --gen-signed-msgs --signed-msgs-file rel_1001.bin --bootloader=u-boot.bin --loadaddr 0x83d88000 --soc 124 --pkc rsa_priv.der bootloader file: u-boot.bin load addr 0x83d88000 entry addr 0x83d88000 Create file rel_1001.bin.qry... Create file rel_1001.bin.ml... Create file rel_1001.bin.bl...
5) To download previously-generated signed messages to Jetson TK1 with PKC enabled:
$ sudo tegrarcm --download-signed-msgs --signed-msgs-file rel_1001.bin --bct=jetson-tk1-bct.bct --bootloader=u-boot.bin --loadaddr 0x83d88000 bct file: jetson-tk1-bct.bct bootloader file: u-boot.bin load addr 0x83d88000 entry addr 0x83d88000 device id: 0x7140 uid: 0x640010017410b1000000000016020540 download signed query version rcm from file rel_1001.bin.qry RCM version: 64.1 download signed miniloader rcm from file rel_1001.bin.ml downloading miniloader to target at address 0x4000e000 (137572 bytes)... miniloader downloaded successfully Chip UID: 0x000000017410b1000000000016020540 Chip ID: 0x40 Chip ID Major Version: 0x1 Chip ID Minor Version: 0x1 Chip SKU: 0x81 (t124) Boot ROM Version: 0x1 Boot Device: 0x2 (EMMC) Operating Mode: 0x6 (odm secure mode with PKC) Device Config Strap: 0x0 Device Config Fuse: 0x0 SDRAM Config Strap: 0x3 sending file: jetson-tk1-bct.bct - 8192/8192 bytes sent jetson-tk1-bct.bct sent successfully sending file: rel_1001.bin.bl - 256/256 bytes sent rel_1001.bin.bl sent successfully sending file: u-boot.bin | 440004/440004 bytes sent u-boot.bin sent successfully
If any error occurs a non zero exit status is returned.
cbootimage(1),
Allen Martin, <amartin@nvidia.com>
29 November 2012 | tegrarcm-1.8 |