.. _SD.FlashingSupport: .. include:: /content/swdocs.rsts .. spelling:: args autologin Automount automount bct bctfile boardid bp bup cfgfile dev dir dtbfile emmc extlinux flashapp gtk hasn hostname Massflash mmcblk mts nfs nfsroot nv odmdata oem PKC PPT ppt preboot pswd SBK scp sn sparsed sparseupdate systemimg tegra tegraboot tegraid ubuntu ums usb wa wb Flashing Support !!!!!!!!!!!!!!!! Use ``flash.sh`` to flash a Jetson device with Bootloader and the kernel, and optionally, flash the root file system to an internal or external storage device. Use ``l4t_initrd_flash.sh`` to flash internal or external media connected to a Jetson device. This script uses the recovery initial ramdisk to do the flashing, and can flash internal and external media using the same procedure. Because this script uses the kernel for flashing, it is generally faster than ``flash.sh``. See `Flashing with Initrd <#flashing-with-initrd>`__ for more details. Before You Begin @@@@@@@@@@@@@@@@ The following directories must be present: - ``bootloader``: Bootloader plus flashing tools, such as TegraFlash, CFG, and BCT - ``kernel``: A kernel image ``/Image``, DTB files, and kernel modules - ``rootfs``: The root file system that you downloaded This directory starts empty. You populate it with the sample file system. - nv_tegra: User space binaries and sample applications Additionally, before running these commands, you must connect your host computer to the Jetson device's recovery port with a USB cable. .. _SD.FlashingSupport-BasicFlashingScriptUsage: Basic Flashing Script Usage @@@@@@@@@@@@@@@@@@@@@@@@@@@ Display the current usage information for ``flash.sh`` by running ``flash.sh –h``, using the script included in the release. The basic usage is:: $ sudo ./flash.sh [options] Where: - ``options`` is one or more command line options. All of the options are optional. See `Flashing Script Usage <#flashing-script-usage>`__ for information about the options. - ```` specifies the configuration to be applied to the device to be flashed. Values are listed in the *Jetson Modules and Configurations* table in :ref:`Quick Start `. ``flash.sh`` gets the configuration from a configuration file named ``.conf``. - ```` specifies the type of device to be flashed. Use the value ``mmcblk0p1`` to flash a local storage device (eMMC or SD card, depending on platform), as distinguished from an NFS server, for example. Basic Flashing Procedures @@@@@@@@@@@@@@@@@@@@@@@@@ This section describes some common procedures for flashing one or more target devices. Installing the Flash Requirements ################################# 1. Run the following command:: $ sudo tools/l4t_flash_prerequisites.sh Flashing the Target Device ########################## 1. Put the target device into Force Recovery Mode. 1. Power on the carrier board and hold down the RECOVERY button. 2. Press the RESET button. 2. Run the ``flash.sh`` script that is in the top-level directory of BSP for this release. The command line must specify the target board (e.g. ``jetson-agx-xavier-devkit``) for the root file system:: $ sudo ./flash.sh Where: - ```` specifies the configuration of the target device, as described by the *Jetson Modules and Configurations* table in :ref:`Quick Start `. - ```` specifies the device on which the root file system is located, as described in `Basic Flashing Script Usage <#basic-flashing-script-usage>`__. For examples, run the script like this:: $ sudo ./flash.sh mmcblk0p1 To flash using a convenient script ################################## NVIDIA provides a convenient flashing script which automatically detects the Jetson device’s type of carrier board:: $ sudo ./nvsdkmanager_flash.sh [--storage ] Where ``--storage`` is supported on Jetson Xavier NX series and Jetson AGX Xavier series only. It can be ``nvme0n1p1`` for flashing to an external NVMe SSD, or ``sda1`` for flashing to an external USB storage drive. On Jetson Xavier NX series, flashing with the ``--storage`` option flashes only QSPI and external NVMe or USB storage; it does not flash the internal eMMC/SD storage. To flash the target device to mount a rootfs specified by UUID ############################################################## - For an internal storage device (e.g. eMMC or an SD card), enter the command:: $ sudo ./flash.sh internal This command stores the UUID used for the root file system partition in the file ``bootloader/l4t-rootfs-uuid.txt``. You may specify your own UUID by writing the UUID to this file before executing the command above. - For an external stage device (e.g. an NVMe or USB device), enter the command:: $ sudo ./flash.sh external This command stores the UUID used for the root file system partition in the file ``bootloader/l4t-rootfs-uuid.txt_ext``. You may specify your own UUID by writing the UUID to this file before executing the command above. To flash the target device to mount a rootfs specified by partition device name ############################################################################### - For a partition on a USB storage device connected to the Jetson device, enter this command:: $ sudo ./flash.sh sda - For a partition on an NVMe storage device connected to the Jetson device, enter this command:: $ sudo ./flash.sh nvme0n1p Where: - ```` specifies the configuration of the target device, as described in the table of device names in the topic :ref:`Quick Start `. - ```` is a number specifying the ``APP`` partition’s position on the storage device, e.g. ``sda1`` for a USB device, or ``nvme0n1p1`` for an NVMe storage device. To clone a Jetson device and flash ################################## 1. Copy ``system.img`` from the file system partition you want to flash from. Enter the command:: $ sudo ./flash.sh -r -k APP -G mmcblk0p1 Where: - ```` determines the names of the copies. - ```` specifies the configuration of the target device. This step creates two copies of ```` in the ```` directory: a sparsed image (smaller than the original) named ````, and an exact copy named ``.raw``. For example, if ```` is ``original.img``, ``flash.sh`` creates a sparsed image named ``original.img`` and an exact copy named ``original.img.raw``. 2. Copy ``.img`` to the ``/bootloader/system.img`` directory, where ```` is the directory in which the Jetson Linux BSP is installed. Enter the command:: $ sudo cp .img bootloader/system.img 3. Flash the image to the target board. - If the target board has already been flashed, reflash the clone image to the ``APP`` partition. Enter the command:: $ sudo ./flash.sh -r -k APP mmcblk0p1 - If the target board has never been flashed, flash all of the board’s partitions. Enter the command: $ sudo ./flash.sh -r mmcblk0p1 .. note:: If root file system of the source device for clone is resized during ``oem-config``, the eMMC configuration file of destination device must be updated accordingly. For example, with ``jetson-agx-orin-devkit``, root file system (``APP``) is the final partition before ``secondary_gpt``. If the ``APP`` is resized to maximum allowed size, the ``allocation_attribute`` of ``APP`` partition in ``Linux_for_Tegra/bootloader/t186ref/cfg/flash_t234_qspi_sdmmc.xml`` must be updated from 0x8 to 0x808. To back up and restore a Jetson device ###################################### NVIDIA provides tools for creating a backup image of a Jetson device and restoring the Jetson from a backup image. Backing up a Jetson device differs from cloning one (see `To clone a Jetson device and flash`_) because a backup image includes every partition in the device’s internal eMMC and QSPI memory, while a clone contains only the ``APP`` file system partition. The tools for backing up and restoring a Jetson device are in this directory in the BSD:: /Linux_for_Tegra/tools/backup-restore/ Instructions for backing up and restoring a device are in the file ``README_backup_restore.txt`` in the same directory. To RCM boot to NFS ################## .. note:: To create a bootable NFS root file system, you must first: - Perform the process described in `Step 1: Set Up the Root File System ` - Perform the process described in `Configuring NFS Root on the Linux Host ` 1. Put the device into reset/recovery mode. - Power on the carrier board and hold down the RECOVERY button. - Press the RESET button. 2. Enter the command:: $ sudo./flash.sh -N : --rcm-boot eth0 Where: - ```` is the IP address of the host system - ```` is the path to the NFS rootfs - ```` is the configuration of the target device as specified by the *Jetson Modules and Configurations* table in :ref:`Quick Start `. Flashing Script Usage @@@@@@@@@@@@@@@@@@@@@ This section complements `Basic Flashing Script Usage <#basic-flashing-script-usage>`__ by providing detailed information about ``flash.sh`` command line options and other aspects of ``flash.sh`` usage. =========================== ======================================================= Command line option Description =========================== ======================================================= -c Pathname of a flash partition table configuration file. --------------------------- ------------------------------------------------------- -d Pathname of a device tree file. --------------------------- ------------------------------------------------------- -f Name of the flash application to be used. Flash applications are stored in the bootloader directory. The default flash application is ``bootloader/tegraflash.py``. --------------------------- ------------------------------------------------------- -h Prints descriptions of the command line syntax and command line options. --------------------------- ------------------------------------------------------- -k Partition name or number specified in ``flash.xml`` or ``flash.cfg``. --------------------------- ------------------------------------------------------- -m Name of the MTS preboot file to be used, such as ``mts_preboot``. --------------------------- ------------------------------------------------------- -n Static NFS network assignments: ````. --------------------------- ------------------------------------------------------- -o ODM data. --------------------------- ------------------------------------------------------- -p Total eMMC hardware boot partition size. --------------------------- ------------------------------------------------------- -r Skips building ``system.img``; reuse the existing one. --------------------------- ------------------------------------------------------- -t Pathname of a tegraboot binary, such as ``nvtboot.bin``. --------------------------- ------------------------------------------------------- -u Pathname of a file containing the PKC key used for an ODM fused board. --------------------------- ------------------------------------------------------- -v Pathname of a file containing the Secure Boot Key (SBK) used for an ODM fused board. --------------------------- ------------------------------------------------------- -w Pathname of a warm boot binary, such as ``nvtbootwb0.bin``. --------------------------- ------------------------------------------------------- -x Processor chip ID. The default value is: - |NVIDIA(r)| |Jetson AGX Orin(tm)|: 0x23 - |NVIDIA(r)| |Jetson Xavier(tm) NX| series and |NVIDIA(r)| |Jetson AGX Xavier(tm)| series: 0x19 --------------------------- ------------------------------------------------------- -z Serial number of the target board. --------------------------- ------------------------------------------------------- -B Board ID. --------------------------- ------------------------------------------------------- -C Kernel command line arguments. If this option is specified, it overrides the default values defined for ``flash.sh``. If two or more arguments are specified, they must be enclosed in quotation marks and separated by spaces. Kernel command line arguments are documented in the file ``kernel-4.9/Documentation/kernel-parameters.txt``. In the case of NFS booting, use this option to set NFS boot-related arguments if the ``-I`` option is omitted. --------------------------- ------------------------------------------------------- -F Pathname of a flash server, such as ``nvtboot_recovery_cpu.bin``. --------------------------- ------------------------------------------------------- -G Reads the boot partition and saves the image to the specified file. --------------------------- ------------------------------------------------------- -I Pathname of the initrd file. The default value is null. --------------------------- ------------------------------------------------------- -K Pathname of a kernel image file such as ``zImage`` or ``Image``. --------------------------- ------------------------------------------------------- -L Pathname of a boot loader, such as ``nvtboot_t194.bin``. --------------------------- ------------------------------------------------------- -M Pathname of an MTS boot file, such as ``mts_si``. --------------------------- ------------------------------------------------------- -N NFS root address, such as ``:­/my/exported/nfs/rootfs``. --------------------------- ------------------------------------------------------- -R Pathname of the sample rootfs directory. --------------------------- ------------------------------------------------------- -S Size of the rootfs in bytes. Valid only for an internal root device. KB/MB/GB suffixes represent units of 1000, 1000\ :sup:`2`, and 1000\ :sup:`3`. The suffixes ``KiB``/``MiB``/``GiB`` represent of multipliers of 1024, 1024\ :sup:`2`, and 1024\ :sup:`3`. For example, ``2GiB`` represents 2\ |times|\ 1024\ :sup:`3` bytes. --------------------------- ------------------------------------------------------- --bup Generates Bootloader update payload (BUP). --------------------------- ------------------------------------------------------- --clean-up Cleans up the BUP buffer when the script is flashing a multi-spec BUP. --------------------------- ------------------------------------------------------- --multi-spec Enables support for building a multi-spec BUP. --------------------------- ------------------------------------------------------- --no-flash Performs all steps except physically flashing the board. The script creates a ``system.img`` file. --------------------------- ------------------------------------------------------- --no-systemimg Prevents creation or re-creation of ``system.img``. --------------------------- ------------------------------------------------------- --sparseupdate Only flash partitions that have changed. Currently supports only SPI flash memory. --------------------------- ------------------------------------------------------- --usb-instance USB instance to connect to; ```` a USB port path (for examples 3-14). To find the , read section `How to find usb-instance <#how-to-find-usb-instance>`__ --------------------------- ------------------------------------------------------- --user_key Pathname of a file that contains a user key that can be used to encrypt and decrypt kernel, kernel-dtb, and initrd binary images. If ``user_key`` is specified, then the ``-v`` option must also be specified. --------------------------- ------------------------------------------------------- --sparseupdate only flash partitions that have changed. Currently only SPI flash memory is supported. =========================== ======================================================= How to find usb-instance ######################## The flash.sh script supports a usb-instance to flash a specific Jetson on a host that has multiple Jetson in recovery mode. This section provides information about how you can find out which usb-instance to use. 1. Place all devices into recovery mode. 1. Run the following command:: $ grep /sys/bus/usb/devices/*/idProduct where ``idProduct`` is the ID for usb id for recovery mode of the device. For example, 7023 for Jetson AGX Orin and 7019 for Jetson AGX Xavier. The result will be something like the following:: /sys/bus/usb/devices/1-1.1/idProduct:7019 1-1.1 is the usb-instance number you want to use to specify which device you want to flash Flashing to a USB Drive @@@@@@@@@@@@@@@@@@@@@@@ Jetson devices can be booted from a mass storage class USB device with bulk-only protocol, such as a flash drive. Hot plugging is not supported; the flash drive must be attached before the Jetson device is booted. You can manually set up a flash drive for booting as explained in `To set up a flash drive manually for booting <#to-set-up-a-flash-drive-manually-for-booting>`__. All Jetson devices can boot from internal storage using a boot partition and can mount an external USB drive as the root file system. NVIDIA provides a way to simplify flashing to a USB drive that is connected to a Jetson device. For details, see `To set up a USB drive as a boot device or root file system using flash with initrd <#to-set-up-a-usb-drive-as-a-boot-device-or-root-file-system-using-flash-with-initrd>`__. .. note:: Jetson AGX Xavier series devices use boot firmware that is stored only on internal eMMC memory, and the ``esp`` partition on internal eMMC memory is also required. As a result, this type of device can boot from a USB or an NVMe drive **only** if the drive's internal eMMC has been flashed. To set up a flash drive manually for booting ############################################ 1. Confirm that the device can boot successfully from eMMC. If it cannot, correct the problem by flashing to eMMC first. 2. Connect the flash drive to the host computer. 3. Check the flash drive’s device name (e.g. ``/dev/sdb``):: $ sudo lsblk -p -d | grep sd 4. Run the command:: $ sudo ./tools/kernel_flash/l4t_initrd_flash.sh [ -S ] -c --external-device sda1 --direct external Where - ```` is the device name that your host computer assigned to the flash drive. - ```` is the USB partition layout, and there is an example in ``Linux_for_Tegra/tools/kernel_flash/flash_l4t_external.xml``. - ```` is the type of Jetson device to be flashed. See the *Jetson Modules and Configurations* table in :ref:`Quick Start `. - You can also specify ```` as the size of the APP partition. This value is different from the total size of the external storage device, which is defined by the **num_sectors** field in ````. If you change the **num_sectors** field in ````, you have to specify a new ```` so that it is a few GiB smaller then the total size of the external storage device to fit the APP and other partitions. - If you run the command without a device in recovery mode plugged in, you will have to specify it. For example, if the host computer assigns the flash drive device name ``sdb``, the command for Jetson AGX Orin is:: $ sudo BOARDID=3701 BOARDSKU=0000 FAB=TS4 ./tools/kernel_flash/l4t_initrd_flash.sh -c tools/kernel_flash/flash_l4t_external.xml --external-device sda1 --direct sdb jetson-agx-orin-devkit external By default, ``Linux_for_Tegra/tools/kernel_flash/flash_l4t_external.xml`` only supports a 64GiB SD card and above. If you want to flash a 32GiB SD card, you will need to modify the **num_sectors** field in ``Linux_for_Tegra/tools/kernel_flash/flash_l4t_external.xml`` so that **num_sectors** * 512 = 32GiB. The command to run is:: $ sudo BOARDID=3701 BOARDSKU=0000 FAB=TS4 ./tools/kernel_flash/l4t_initrd_flash.sh -c tools/kernel_flash/flash_l4t_external.xml -S 20GiB --external-device sda1 --direct sdb jetson-agx-orin-devkit external You have to specify ```` to 20GiB to be smaller then the SD card size. .. note:: For more information, read Workflow 11 in the README_initrd_flash.txt file, which is in the ``Linux_for_Tegra/tools/kernel_flash`` directory. 5. Plug the flash drive into the target device and power it on or reboot it. 6. If your device still boots from its internal storage, you may need to modify the UEFI's boot-order using ``efibootmgr`` or UEFI GUI. To set up a flash drive manually for using as root file system ############################################################## 1. Prepare the flash drive similarly to `To set up a flash drive manually for booting <#to-set-up-a-flash-drive-manually-for-booting>`__. 2. Flash the Jetson device to mount the external flash drive:: $ sudo ./flash.sh sda1 To prepare files to boot from a flash drive with Secure Boot ############################################################ When the ``Secureboot`` package is installed, the kernel file ``/boot/Image`` must be signed, and the signature file must be saved as ``/boot/Image.sig``. If you use ``flash.sh`` to flash a device with Secure Boot installed, the script automatically creates and stores the signature file. If you create a signature file manually, you must also save it manually. For more information, see the topic :ref:`Secure Boot `. .. todo:: There used to be a reference to "SD.Security.SecureBoot-SigningAndEncryptingKernelKernelDtbInitrdAndExtlinuxConfFiles" here, but we gutted SecureBoot.rst and have a placeholder there now. Restore this reference when SecureBoot.rst is fleshed out. To set up a USB drive as a boot device or root file system using flash with initrd ################################################################################## By flashing with initrd you can flash to an external USB device attached to a Jetson device. For more information, see `Flashing to an External Storage Device <#flashing-to-an-external-storage-device>`__. Flashing to an NVMe Drive @@@@@@@@@@@@@@@@@@@@@@@@@ Jetson devices can be booted from an NVMe drive. Hot-plugging is not supported; the NVMe drive must be attached before the Jetson device is booted. You can manually set up an NVMe drive for booting by following the steps in `To set up an NVMe drive manually for booting <#to-set-up-an-nvme-drive-manually-for-booting>`__. All Jetson devices can boot from internal storage using a boot partition and mount an external NVMe drive as the root file system. NVIDIA provides a way to simplify flashing to an NVMe drive that is connected to a Jetson device. For details, see `To set up an NVMe drive as a boot device or root file system using flash with initrd <#to-set-up-an-nvme-drive-as-a-boot-device-or-root-file-system-using-flash-with-initrd>`__. .. note:: Jetson AGX Xavier series devices use boot firmware that is stored only on internal eMMC memory, and the ``esp`` partition on internal eMMC memory is also required. As a result, this type of device can boot from a USB or an NVMe drive **only** if the drive's internal eMMC has been flashed. To set up an NVMe drive manually for booting ############################################ 1. Confirm that the device can boot successfully from eMMC. If it cannot, correct the problem by flashing to eMMC first. 2. Connect the flash drive to the host computer. 3. Check the NVMe drive’s device name (e.g. ``/dev/nvme0n1``):: $ lsblk -d -p | grep nvme | cut -d\ -f 1 Note that there must be two spaces after the ``-d\``. 4. Run the command:: $ sudo ./tools/kernel_flash/l4t_initrd_flash.sh [ -S ] -c --external-device nvme0n1p1 --direct external Where - ```` is the device name that your host computer assigns to the NVMe drive. - ```` is the NVMe SSD partition layout, and there is an example in ``Linux_for_Tegra/tools/kernel_flash/flash_l4t_external.xml``. - ```` is the type of Jetson device to be flashed. See the *Jetson Modules and Configurations* table in :ref:`Quick Start `. - You can also specify ```` as the size of the APP partition. This value is different from the total size of the external storage device, which is defined by the **num_sectors** field in ````. If you change the **num_sectors** field in ````, you have to specify a new ```` so that it is a few GiB smaller then the total size of the external storage device to fit the APP and other partitions. - If you run the command without a device in recovery mode plugged in, you will have to specify it. For example, if the host computer assigns the flash drive device name ``nvme1n1p1``, the command for Jetson AGX Orin is:: $ sudo BOARDID=3701 BOARDSKU=0000 FAB=TS4 ./tools/kernel_flash/l4t_initrd_flash.sh -c tools/kernel_flash/flash_l4t_external.xml --external-device nvme0n1p1 --direct nvme1n1p1 jetson-agx-orin-devkit external .. note:: For more information, read Workflow 11 in the README_initrd_flash.txt file, which is in the ``Linux_for_Tegra/tools/kernel_flash`` directory. 5. Plug the flash drive into the target device and power it on or reboot it. 6. If your device still boots from its internal storage, you might need to modify the UEFI's boot-order using ``efibootmgr`` or the UEFI GUI. To set up an NVMe drive manually for using as root file system ############################################################## 1. Prepare the NVMe device similarly to `To set up a NVMe drive manually for booting <#To set up a NVMe drive manually for booting>`__. 2. Flash your Jetson to mount the external NVMe drive:: $ sudo ./flash.sh nvme0n1p1 To prepare files to boot from an NVMe drive with Secure Boot ############################################################ See `To prepare files to boot from a flash drive with Secure Boot <#to-prepare-files-to-boot-from-a-flash-drive-with-secureboot>`__. To set up an NVMe drive as a boot device or root file system using flash with initrd #################################################################################### By flashing with initrd you can flash to an external NVMe SSD attached to a Jetson device. For more information, see `Flashing to an External Storage Device <#flashing-to-an-external-storage-device>`__. Flashing to an SD Card @@@@@@@@@@@@@@@@@@@@@@ **Applies to**: Jetson Xavier NX development module only This section describes procedures for flashing and utilizing an SD card for a Jetson Xavier NX series module (P3668-0000 or P3668-0003). P3668-0000 is used only as a component of Jetson Xavier NX Developer Kit. Prerequisites ############# - Download Etcher for Linux. Etcher is the tool you use to copy an image to an SD card. It is available from the `Balena Etcher home page `__. Download Etcher for Linux x64 (64-bit) (AppImage). Make the downloaded file executable. .. note:: NVIDIA recommends using Etcher to copy an image to an SD card because it is an easy and foolproof method. If you prefer, you can perform this operation with the Linux ``dd`` command. If you use this method, you need not download Etcher. To generate an image to be flashed to an SD card ################################################ **Applies to**: Jetson Xavier NX series only 1. If you have not already done so, expand the archive ``linux_for_tegra.tbz2``. 2. Go to the directory ``Linux_for_Tegra/tools``. 3. Enter the command:: $ ./jetson-disk-image-creator.sh -o -b Where: - ```` is a filename; the script saves the raw image with this name. - ```` specifies the type of Jetson device that the SD card is to be flashed for. You can find the appropriate value of ```` in the *Jetson Modules and Configurations* table in :ref:`Quick Start `. This command generates a raw image with partitions per the SPI-SD profile for a Jetson Xavier NX development module. For example, to create a raw image file named ``sd-blob.img`` for use on a Jetson Xavier NX development module:: $ ./jetson-disk-image-creator.sh -o sd-blob.img -b jetson-xavier-nx-devkit -r 100 The ``jetson-disk-image-creator.sh`` script supports use of a modified rootfs. Thus, you can create an SD card image with a specified rootfs directory:: $ ROOTFS_DIR= ./jetson-disk-image-creator.sh -o -b -r To flash the image to an SD card with Etcher ############################################ 1. Insert the SD card into an SD card slot or an external SD card reader on your host system. 2. Launch Etcher and select the SD blob image file created by ``jetson-disk-image-creator.sh``. 3. Select the SD card to be flashed. 4. Click Flash to write the SD blob image to the SD card. To flash the image to an SD card with dd ######################################## - Enter the command:: $ sudo dd if= of=/dev/mmcblk bs=1M oflag=direct Where: - ```` is the name (with pathname, if necessary) of the blob image file created by ``jetson-disk-image-creator.sh``. - ```` is the SD card block number detected by your Linux host, i.e. 0 or 1. For example, to copy an image blob file named ``sd-blob.img`` from the working directory to SD card block number 1:: $ sudo dd if=sd-blob.img of=/dev/mmcblk1 bs=1M oflag=direct To resize the root partition to fill available SD card space ############################################################ The root partition is always created at the end of the boot device. This allows you to change its size without moving other partitions. You change the size of the boot partition with the ``resize2fs`` tool, which is run by ``oem-config`` the first time a newly copied image blob file is booted from an SD card. When a freshly initialized SD card is first booted it runs ``oem-config``, one of whose functions is to set the APP partition’s size. It does the following things: 1. Moves the backup GPT header to the end of the disk 2. Deletes and re-creates the root partition 3. Informs the kernel and OS of the change in the partition table and root partition size 4. Resizes the file system on the root partition to fit the expected partition table and root partition size To upgrade JetPack 4.x to JetPack 5.x on Jetson Xavier NX (P3668-0000) ######################################################################## **Applies to**: Jetson Xavier NX (P3668-0000) only. To upgrade Jetson Xavier NX Developer Kit from JetPack 4.x to JetPack 5.x, complete the following steps: 1. Download JetPack 5.x QSPI image on Jetson Xavier NX Developer Kit from `JetPack Product Page `__. 2. Write the QSPI image into the QSPI device by entering the following commands:: $ sudo flash_eraseall /dev/mtd0 $ tar -xvf Jetson_Xavier_NX_QSPI_35.1.tbz2 jetson-xavier-nx-devkit.spi.img $ sudo flashcp jetson-xavier-nx-devkit.spi.img /dev/mtd0 3. Power off the Jetson device and unplug the SD card. 4. Write the SD card with the JetPack 5.x SD card image by completing the steps in `Write Image to the microSD Card `__. 5. Plug the SD card back to the Jetson device and power it on. To manually generate JetPack 5.x QSPI image, complete the following steps: 1. Download JetPack 5.x BSP package and extract it. 2. Go to the ``Linux_for_Tegra`` directory, and enter the following commands:: $ cd Linux_for_Tegra $ sudo BOARDID=3668 FAB=300 BOARDSKU=0000 BOARDREV=1 FUSELEVEL=fuselevel_production CHIPREV=2 ./tools/l4t_generate_jetson_xavier_nx_qspi_images.sh -b jetson-xavier-nx-devkit The QSPI image will be generated at ``Linux_for_Tegra/bootloader/jetson-xavier-nx-devkit.spi.img``. .. warning:: An unexpected reset or a power loss during updating QSPI image might break the device. If these issues occur, you have to reflash the device. Refer to the steps in the `Basic Flashing Procedures <#basic-flashing-procedures>`__. .. note:: After you upgrade to JetPack 5.x, the only way to roll back to JetPack 4.x is to complete a reflash. Flashing to an External Storage Device @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ The ``initrd`` flashing tool supports flashing to an external storage device. For an overview of this tool, see `Flashing with initrd <#flashing-with-initrd>`__. To flash an external device, you must create an external partition layout. For information about this, see :ref:`External Storage Device Partition ` in the topic :ref:`Boot Architecture `. The devices that Jetson Linux supports as external storage devices are those which appear in the Linux file system as SCSI devices (device name ``/dev/sd*``) and NVMe devices (``/dev/nvme*n*``) in the Linux “dev” file system. NVIDIA provides the necessary tools and instructions as part of the Linux BSP package; they may be found in the directory ``Linux_for_Tegra/tools/kernel_flash``. For more detailed instructions, see workflows 3, 4, and 5 in the file ``README_initrd_flash.txt`` in that directory. Flashing a Specific Partition @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ You can flash a specific partition instead of flashing the whole device by using the command line option ``-k``. To flash a specific partition ############################# - Enter the command:: $ sudo ./flash.sh -k [--image ] Where: - ```` is the name of the partition to be flashed. Possible values depend on the target device. For specific filenames, see the :ref:`table of partition configuration files ` in the topic :ref:`Partition Configuration `. - ```` is the name of the image file. If omitted, ``flash.sh`` chooses the image file that was used to flash whole device. - ```` is the configuration of the target device as specified in the *Jetson Modules and Configurations* table in :ref:`Quick Start `. - ```` specifies the device on which the root file system is located, as described in `Basic Flashing Script Usage <#basic-flashing-script-usage>`__. Examples ######## To flash the kernel on Jetson AGX Xavier series using the default file ``/kernel/Image``, where ```` is the directory that contains the Jetson Linux distribution:: $ sudo ./flash.sh -k kernel jetson-xavier mmcblk0p1 To flash MB1_BCT on Jetson AGX Xavier series using a predefined list of configuration files:: $ sudo ./flash.sh -k MB1_BCT jetson-xavier mmcblk0p1 To flash A_MB1_BCT on Jetson AGX Orin series using a predefined list of configuration files:: $ sudo ./flash.sh -k A_MB1_BCT jetson-xavier mmcblk0p1 Flashing for NFS as Root @@@@@@@@@@@@@@@@@@@@@@@@ You can flash the device to use a network file system (NFS) as the root file system. .. note:: To create a bootable NFS root file system, you must first: - Perform the process described in `Step 1: Set Up the Root File System ` - Perform the process described in `Configuring NFS Root on the Linux Host ` To flash for a network file system as root file system ###################################################### 1. Put the device into Recovery Mode. Power the carrier board on; press and hold down the RECOVERY button, then press the RESET button. 2. Enter the command:: $ sudo ./flash.sh -N : eth0 Where: - ```` is the IP address of the host system. - ```` is the path to the NFS root file system. - ```` is the configuration of the target device as specified in the *Jetson Modules and Configurations* table in :ref:`Quick Start `. The command flashes Bootloader and a file system image with a ``/boot`` directory only to use the network file system at ``:/`` as the root file system at boot time. .. _SD.FlashingSupport-FlashingWithInitrd: Flashing with initrd @@@@@@@@@@@@@@@@@@@@ You can flash with initrd (initial RAM disk) to both internal media and external media connected to a Jetson device. The procedure uses initrd and USB device mode. Tools and instructions for flashing with initrd may be found in the directory ``/Linux_for_Tegra/‌tools/‌kernel_flash/``. For more detailed information, see ``README_initrd_flash.txt`` in the same directory. ``README_initrd_flash.txt`` contains examples several workflows that flash with initrd: - Flashing internal storage devices - Flashing external storage devices such as NVMe SSD and USB drives - Enabling A/B rootfs on external storage devices - Enabling disk encryption on external storage devices - Flashing individual partitions - Flashing fused Jetson devices. - Flashing a Massflash blob to normal and fused Jetson devices - Generating separate images for external and internal storage devices, then flashing the combined images .. note:: Jetson AGX Xavier series devices use boot firmware that is stored only on internal eMMC memory, and the ``esp`` partition on internal eMMC memory is also required. As a result, this type of device can boot from a USB or an NVMe drive **only** if the drive's internal eMMC has been flashed. Requirements ############ 1. Initrd flash requires a high-quality USB-C / micro-USB cable. (A low-quality cable may make the flashing process fail.) 2. The host uses NetworkManager, not any other network management application, to configure the network for flashing. 3. Automount must temporarily be disabled for the new external storage device during flashing. The tool uses USB mass storage during flashing. On most Debian-based distributions of Linux, you can accomplish this with the command:: $ systemctl stop udisks2.service 4. To install the correct dependencies, run the following script:: $ sudo tools/l4t_flash_prerequisites.sh # For Debian-based Linux 5. To flash, the tool uses NFS and SSH through ``IPv6`` address space ``fc00:1:1::/48`` to flash. .. note:: - Ensure that your operating system and your firewall allows using the ``IPv6`` address space. - The tool has been validated with Ubuntu 18.04 and later." Flashing with initrd #################### 1. Put the Jetson device in Recovery Mode. 2. Enter these commands on the host:: $ cd Linux_for_Tegra $ sudo ./tools/kernel_flash/l4t_initrd_flash.sh Where: - ```` is the value of the environment variable ``BOARD`` for the target device. See the *Jetson Modules and Configurations* table in `Quick Start `__. - ```` specifies the device on which the root file system is located, as described in `Basic Flashing Script Usage <#basic-flashing-script-usage>`__. Bringing Up the Jetson Module for the initrd Flash Tool ####################################################### - Initrd flash is validated to work with the NVIDIA developer kit. For this tool to work on your custom carrier board with Jetson's modules, ensure that a USB device mode has been enabled for your custom carrier board. - There are many cases where you want to customize the BSP. In some cases, it might cause the BSP fail to initrd flash the device. For these cases initrd flash support a separation of flashing environment and the content that is flashed: 1. Copy the original Linux_for_Tegra folder and call it Linux_for_Tegra_original. 2. Modify the BSP in the Linux_for_Tegra_modified folder. 3. Run the initrd flash command with the --no-flash option on the Linux_for_Tegra folder with the modified BSP. For example:: $ cd Linux_for_Tegra_modified $ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --no-flash --external-device nvme0n1p1 -c ./tools/kernel_flash/flash_l4t_external.xml --showlogs jetson-xavier-nx-devkit-emmc nvme0n1p1 4. If necessary, remove the existing Linux_for_Tegra_original/tools/kernel_flash/images folder and copy the images in Linux_for_Tegra/tools/kernel_flash/images to the Linux_for_Tegra_original/tools/kernel_flash directory. 5. In the Linux_for_Tegra_original directory, run flash with the --use-backup-image option. For example:: $ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --use-backup-image --external-device nvme0n1p1 -c ./tools/kernel_flash/flash_l4t_external.xml --showlogs jetson-xavier-nx-devkit-emmc nvme0n1p1 Flashing to Multiple Jetson Devices @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .. note:: ``Massflash`` tool has been deprecated, so use initrd flash instead. As part of the tool in `Flashing with initrd <#flashing-with-initrd>`__, NVIDIA provides a tool and instructions to efficiently flash Jetson devices in a factory environment. To flash to multiple Jetson devices with this tool: 1. Generate ``massflash`` package using the ``--no-flash`` and ``--massflash `` and ``--network usb0`` options, where is the highest possible number of devices that will be concurrently flashed. The online mode and offline mode are supported. In the following example, the offline mode is used to create a flashing environment that can concurrently flash five devices:: $ sudo BOARDID= FAB= BOARDSKU= BOARDREV= ./tools/kernel_flash/l4t_initrd_flash.sh --no-flash --network usb0 --massflash 5 jetson-xavier-nx-devkit-emmc mmcblk0p1 (For the value of BOARDID, FAB, BOARDSKU and BOARDREV, please refer to `Devices Supported By This Document `__ and `Flashing with initrd <#flashing-with-initrd>`__) 2. Connect the five Jetson devices to the flashing hosts. 3. Ensure that the devices have the identical hardware revision. 4. Place all of the connected Jetson devices into RCM mode. 5. Run the following command:: $ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --flash-only --network usb0 --massflash 5 (Optionally add --showlogs to show all of the log) .. note:: the actual number of connected devices can be less than the maximum number of devices the package can support. When you use this tool, here are some tips to remember: - The tool provides the ``--keep`` option to keep the flash environment, and the ``--reuse`` options to reuse the flash environment that makes ``massflash`` run faster: Massflash the first time:: $ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --flash-only --network usb0 --massflash 5 --keep Massflash the second time:: $ sudo ./tools/kernel_flash/l4t_initrd_flash.sh --flash-only --network usb0 --massflash 5 --reuse - Use ``ionice`` to make the flash process the highest I/O priority in the system:: $ sudo ionice -c 1 -n 0 ./tools/kernel_flash/l4t_initrd_flash.sh --network usb0 --flash-only --massflash 5 Enlarging an Internal Memory Partition for Root File System @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Use the ``flash.sh`` option ``-S `` to change the partition size. To flash for a larger partition ############################### - Execute the following command:: $ sudo ./flash.sh -S Where: - ```` is the desired size for the partition, such as ``8589934592`` (or ``8GiB``) for 8\ |GB|. The default size of ``APP`` is defined in the variable ``ROOTFSSIZE`` in the file ``.conf``. - ```` is the configuration of the target device as specified in the *Jetson Modules and Configurations* table in :ref:`Quick Start `. - ```` specifies the device on which the root file system is located, as described in `Basic Flashing Script Usage <#basic-flashing-script-usage>`__. Determining the Success of a Driver Update @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ After updating drivers on a target board, verify that the update completed successfully. You can determine the success or failure of a driver update by using the following commands. To determine the success of a driver update ########################################### - Execute this command on a booted target device:: $ sha1sum –c /etc/nv_tegra_release If the driver update succeeded, the command displays **OK** after the file name. A typical success message looks like this:: /usr/lib/xorg/modules/drivers/nvidia_drv.so: OK The driver update fails if the file is missing. A typical error message looks like this:: sha1sum: /usr/lib/xorg/modules/drivers/nvidia_drv.so: No such file or directory /usr/lib/xorg/modules/drivers/nvidia_drv.so: FAILED open or read The driver update also fails if the new file is different from the existing file, producing an error such as:: /usr/lib/xorg/modules/drivers/nvidia_drv.so: FAILED Reconfiguring a Jetson Device with oem-config @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ A target device that is flashed by SDK Manager runs the ``oem-config`` tool automatically the first time it boots after it is flashed. You can use this tool to change some parts of the device’s configuration. ``oem-config`` is useful for custom-configuring production devices. In a typical use case, you flash a default configuration and clone it to many production devices. The purchaser of each device can use ``oem-config`` to set their own username and password, language, time zone, and so on. On a **headed** target device (one equipped with a display), ``oem-config`` runs as a GUI application. On a **headless** target device (one without a display), it runs as a character interface application which communicates through the flashing port with a terminal program running on the host. After the target device runs ``oem-config`` on first boot, it disables the tool so that it will not run on subsequent boots. If you install your own package and flash the target device manually (outside SDK Manager), you must re-enable ``oem-config`` manually if you want it to run on the first subsequent boot. Again, the target device disables ``oem-config`` after running it once. To re-enable oem-config manually on a flash drive ################################################# 1. Select a source device of the same type as the target device(s), on which all necessary packages have been installed. 2. Install these packages on the source device to enable ``oem-config`` for the next reboot: ``ubiquity``, ``oem-config``, and ``oem-config-gtk``. Enter this command:: $ sudo apt-get install --no-install-recommends ubiquity oem-config oem-config-gtk 3. Remove the package nvidia-l4f-oem-config:: $ sudo dpkg --purge nvidia-l4t-oem-config 4. Clone the source device's ``APP`` partition to ``backup.img`` and ``backup.img.raw``. For details, see `To clone a Jetson device and flash <#to-clone-a-jetson-device-and-flash>`__. 5. Mount ``backup.img.raw`` (an ext4 image file) on the host at a mount point of your choice. 6. Apply any required Jetson-specific binaries to the image file. The ``nv-oem-config`` setup files are included in ``apply_binaries.sh``. To run this script, enter:: $ cd Linux_for_Tegra $ sudo ./apply_binaries.sh -r Where ```` represents the ``backup.img.raw`` mount point. 7. Set ``nv-oem-config.target`` as the ``default.target``:: $ cd $root/etc/systemd/system $ sudo rm default.target $ sudo ln -s /lib/systemd/system/nv-oem-config.target default.target 8. Unmount the device mounted in step 5:: $ umount $root 9. Make a sparse version of the updated image file ``backup.img.raw`` and name it ``system.img``:: $ cd Linux_for_Tegra/bootloader/ $ sudo ./mksparse -v –fillpattern=0 /path/to/backup.img.raw system.img 10. Flash ``system.img`` to the target device(s). For details, see `To clone a Jetson device and flash <#to-clone-a-jetson-device-and-flash>`__. To re-enable oem-config manually on an SD card ############################################## 1. Select a source device of the same type as the target device(s) on which all necessary packages have been installed. 2. Enter this command to install the following packages on the source device to enable ``oem-config`` for the next reboot: ubiquity, ``oem-config``, and oem-config-gtk:: $ sudo apt-get install --no-install-recommends ubiquity oem-config oem-config-gtk 3. Remove the package ``nvidia-l4f-oem-config``:: $ sudo dpkg --purge nvidia-l4t-oem-config 4. Power off the source device and remove the SD card from it, then insert it into in the host system. 5. Mount partition #1 of the SD card (an ext4 file system) on the host, using a mount point of your choice. 6. Apply any required Jetson-specific binaries to partition #1 of the SD card. The appropriate files are listed in ``nv-oem-config``, and are applied by ``apply_binaries.sh``. Enter these commands to run the script:: $ cd Linux_for_Tegra $ sudo ./apply_binaries.sh -r Where ```` represents the partition #1 of the SD card mount point. 7. Set ``nv-oem-config.target`` as the default.target:: $ cd $root/etc/systemd/system $ sudo rm default.target $ sudo ln -s /lib/systemd/system/nv-oem-config.target default.target 8. Run ``jetson-disk-image-creator.sh`` to create a new SD card image with a modified rootfs:: $ cd Linux_for_Tegra/tools $ sudo ROOTFS_DIR= ./jetson-disk-image-creator.sh -o sd-blob.img -b jetson-nano-devkit -r 100 Where ```` represents partition #1 of the SD card on its mount point.For details, see `To generate an image to be flashed to an SD card <#to-generate-an-image-to-be-flashed-to-an-sd-card>`__. 9. Enter this command to unmount the device mounted in step 5:: $ umount $root 10. Flash ``sd-blob.img`` to the new SD card. For details, see `Flashing to an SD Card <#flashing-to-an-sd-card>`__. About Communication Through the Debugging Port ############################################## The terminal program on the host computer customarily communicates with ``oem-config`` through the host computer’s ``tty`` device and the Jetson device's flashing port (i.e. the USB port that is used for flashing). See :ref:`Assumptions ` in the topic :ref:`Quick Start `.) Some Jetson developer kits also have a UART port on a 40-pin header. You can edit the ``oem-config`` configuration file to make ``oem-config`` use this port instead. You must make this change before you flash images on the target device. To configure oem-config to use a 40-pin header UART port $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 1. Open the configuration file ``/etc/nv-oem-config.conf.t194`` on the host computer and find the line that defines the property:: nv-oem-config-uart-port=ttyGS0 2. Change the value of this property from ``ttyGS0`` to ``ttyTHS0``. 3. Save and close the configuration file. 4. Proceed to flash the target device as described elsewhere in this topic. Headless Mode Flow in oem-config ################################ Before the target system boots for the first time, you must start a terminal program on the host computer. You may use ``putty``, ``screen``, or any other program that communicates through the host computer’s ``tty`` device and supports the UTF-8 character set. .. note:: NVIDIA does not recommend using minicom for this application because it has some issues dealing with UTF-8. When the target device boots for the first time after flashing and finds no display device, it runs ``oem-config`` in headless mode. Use the following procedure to reconfigure the target device. To reconfigure the target device with oem-config $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 1. ``oem-config`` displays a welcome screen. To advance to the next screen, press Tab, then Enter. .. figure:: FlashingSupport/OemConfigWelcome.png :figwidth: 650 px 2. ``oem-config`` displays the license that governs its use. Read the license, then accept it by pressing Tab, then Enter. .. figure:: FlashingSupport/OemConfigLicense.png :figwidth: 650 px 3. ``oem-config`` displays a screen that lists languages. Use the up and down-arrow keys to select the language you want to use for the installation process. Then press the left and right-arrow keys to select “OK,” and press Enter. .. figure:: FlashingSupport/OemConfigLanguages.png :figwidth: 650 px .. note:: To go back from any screen to the preceding one, select “Cancel” and press Enter. You can go back more than one screen by doing this more than once. 4. ``oem-config`` displays a screen that lists locations in which the language you selected is used. Select your location; then select “OK” and press Enter. .. figure:: FlashingSupport/OemConfigTimeLocations.png :figwidth: 650 px 5. ``oem-config`` displays a screen that lists keyboard layouts. Select your keyboard’s layout, then select “OK” and press Enter. .. figure:: FlashingSupport/OemConfigKeyboards.png :figwidth: 650 px 6. ``oem-config`` displays a screen that lists time zones that exist in the location you select. Select your time zone, then select “OK” and press Enter. .. figure:: FlashingSupport/OemConfigTimeZones.png :figwidth: 650 px If your time zone is not listed, select “Cancel” as many times as necessary to go back to the screen that lists locations, and choose a different location. 7. ``oem-config`` asks whether you want to set the system clock to Universal coordinated Time (UTC, or Greenwich Mean Time). Linux expects the system clock to be set to UTC, so NVIDIA recommends that you select “Yes” and press Enter. .. figure:: FlashingSupport/OemConfigSetUtc.png :figwidth: 650 px 8. ``oem-config`` asks you to enter your name. Enter your full name (for example, ``John Smith``), select **OK**, and press Enter. .. figure:: FlashingSupport/OemConfigFullName.png :figwidth: 650 px 9. ``oem-config`` asks you to enter a username for your user account. ``oem-config`` creates a user account with this name. Select “OK” and press Enter. .. figure:: FlashingSupport/OemConfigUserName.png :figwidth: 650 px NVIDIA suggests using your first name, in lower case letters only. Use this account instead of the root account for anything other than administrative activities. 10. ``oem-config`` asks you to enter a password for your user account. Enter a password, then select “OK” and press Enter. NVIDIA recommends that you choose a strong password, for example, one that is more than eight characters long and contains at least one each of upper and lower case letters, numerals, and other characters. If you enter a weak password, ``oem-config`` asks you to confirm that you want to use it. .. figure:: FlashingSupport/OemConfigPassword.png :figwidth: 650 px 11. ``oem-config`` asks you to enter your password again to confirm that you entered it correctly. If you enter the same password both times, it sets the password and goes on to the next step. If not, it prompts you to enter a password again. .. figure:: FlashingSupport/OemConfigPasswordAgain.png :figwidth: 650 px 12. ``oem-config`` prompts you to create and enable a 4\ |nbsp|\ GB swap file. It first displays a message which summarizes the advantages and disadvantages of doing so: .. figure:: FlashingSupport/OemConfigSwapFile.png :figwidth: 650 px Read the message and decide whether to create a swap file. Then press Enter to advance to the next screen: .. figure:: FlashingSupport/OemConfigSwapFileCreate.png :figwidth: 400px To create and enable a swap file, select “Yes” and press Enter. To skip this step, select “No” and press Enter. .. note:: As the “Create Swap File” screen explains, NVIDIA recommends that you create and enable a swap file if you plan to use your Jetson device for artificial intelligence (AI) and deep learning applications. Note that having a swap file may shorten the life of your SD card, due to increased writes to the medium. If you do not create a swap file in ``oem-config``, you can later create one manually as described in `To create and enable a swap file manually <#to-create-and-enable-a-swap-file-manually>`__. 13. ``oem-config`` prompts you to specify the desired size of the APP partition in megabytes. To request the maximum possible size, leave the field empty or enter 0 (zero). .. figure:: FlashingSupport/OemCongAppSize.png :figwidth: 650 px To request the maximum possible size, leave the field empty or enter ``0`` (zero). .. note:: This is only for Jetson AGX Orin and Jetson Xavier NX. For the other Jetson devices, you can of course enlarge the ``APP`` partition statically with flash option ``-S``. 14. ``oem-config`` displays a list of interfaces which it can use as the primary network interface during installation. If you are using Ethernet as the primary network interface, make sure that the Ethernet cable is connected. Then select the ``eth0: Ethernet`` option, select “OK,” and press Enter. .. figure:: FlashingSupport/OemConfigNetworkInterface.png :figwidth: 650 px .. note:: Due to a known wireless network configuration bug in ``oem-config``, you must either enter the SSID manually instead of selecting it from the list, or wait until after initial setup is complete, then use the ``nmcli`` command to configure wireless networking. For more details, see the ubuntu.com documentation page `Configure WiFi Connections `__. 15. ``oem-config`` prompts you to enter your host computer’s host name. If you don’t know the host’s name, ask your network administrator. If you are setting up a dedicated network, you may choose any name. Enter the host name, then select “OK,” and press Enter. .. figure:: FlashingSupport/OemConfigHostName.png :figwidth: 650 px 16. ``oem-config`` prompts you to install Chromium Browser right now. Internet connection is required for installation, and it will take several minutes to install. .. figure:: FlashingSupport/OemConfigChromium.png :figwidth: 650 px Read the message and decide whether to install Chromium Browser. Then press Enter to advance to the next screen: .. figure:: FlashingSupport/OemConfigChromiumInstall.png To install Chromium Browser, select “Yes” and press Enter. To skip this step, select “No” and press Enter. 17. ``oem-config`` reconfigures the system with the selections you have made, then proceeds to the system’s log-in prompt. To create and enable a swap file manually $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ This procedure is an alternative to step 12 of `To reconfigure the target device with oem-config <#to-reconfigure-the-target-device-with-oem-config>`__. You may perform it at any time after you run oem-config. 1. To create the swap file, enter the commands:: $ sudo fallocate -l 4G /swapfile $ sudo chmod 600 /swapfile $ sudo mkswap /swapfile $ sudo swapon /swapfile 2. To automount the swap file on boot, open ``/etc/fstab`` in a text editor, add this line, and save:: /swapfile swap swap defaults 0 0 .. note:: The fields in this line may be separated by any combination and number of tabs and spaces. NVIDIA recommends spacing the fields to align with the fields in the file’s other lines. .. _SD.FlashingSupport-SkippingOemConfig: Skipping oem-config ################### If you don't want to run ``oem-config`` to set up your system, you can make the first-time boot process skip it by running the host script ``l4t_create_default_user.sh`` before you flash. The boot process runs ``oem-config`` if no default user is defined; ``l4t_create_default_user.sh`` creates a default user, and thus prevents ``oem-config`` from running. The script’s usage is:: $ l4t_create_default_user.sh [-u ] [-p ] [-n ] [-a] [-h] This table describes the command line options: +-------------------------+-------------------------------------------+ | **Command line option** | **Description** | +=========================+===========================================+ | -u | Creates a default user with the specified | | | username. If omitted, the script creates | | --username | a default user named ``nvidia``. | +-------------------------+-------------------------------------------+ | -p | Creates the default user with the | | | specified password. If omitted, the script| | --password | generates a random password. | +-------------------------+-------------------------------------------+ | -n | Creates the default user with the | | | specified host name. If omitted, the | | --hostname | script uses the host name | + | ``tegra-ubuntu.`` | +-------------------------+-------------------------------------------+ | -a | Configures Jetson Linux to log in to the | | | default user automatically when booted. | | --autologin | If omitted, the user must log in | | | manually. | +-------------------------+-------------------------------------------+ | --accept-license | Accepts the EULA for NVIDIA software. If | | | omitted, the script prompts you to accept | | | the EULA. | +-------------------------+-------------------------------------------+ | -h | Prints a description of the script’s | | | usage. | | --help | | +-------------------------+-------------------------------------------+ Examples $$$$$$$$ - Create a user named ``nvidia`` with the password ``NDZjMWM4`` and the host name ``tegra-ubuntu``:: $ l4t_create_default_user.sh -u nvidia -p NDZjMWM4 - Create a user named ``ubuntu`` with a randomly generated password and the host name ``tegra-ubuntu``, and configures Jetson Linux to log in to it automatically at boot:: $ l4t_create_default_user.sh -u ubuntu -a - Create a user named ``nvidia`` with a randomly generated password and the host name ``tegra``:: $ l4t_create_default_user.sh -n tegra .. _SD.FlashingSupport-ModifyingJetsonRamDisk: Modifying Jetson RAM Disk @@@@@@@@@@@@@@@@@@@@@@@@@ Use the following procedure to modify the default configuration of a Jetson device’s RAM disk. To modify RAM disk ################## 1. Unpack your initrd:: $ sudo su $ cp /boot/initrd /tmp $ mkdir /tmp/temp $ cd /tmp/temp $ gunzip -c /tmp/initrd | cpio -i 2. Modify your initrd content in the ``tmp/temp/`` directory according to your needs 3. Package your initrd:: $ sudo su $ cd /tmp/temp $ find . | cpio -H newc -o | gzip -9 -n > ../initrd 4. Replace the initrd with your customized initrd:: $ cp /tmp/initrd /boot/initrd