Jetson/FAQ/BSP

How to get fan speed from FAN_TACH?
cat /sys/devices/generic_pwm_tachometer/hwmon/hwmon1/rpm

How to know boot reason when watchdog reset?
Device reset reason can be found in 'dmesg' output like below:  [   0.996297] tegra-pmc: get_secure_pmc_setting: done secure_pmc=0 [   0.996407] tegra-pmc: ### PMC reset source: TEGRA_BCCPLEX_WATCHDOG [   0.996466] tegra-pmc: ### PMC reset level: TEGRA_RESET_LEVEL_L1 [   0.996519] tegra-pmc: ### PMC reset status reg: 0x9 [   0.996627] tegra-pmc: PMC Prod config success

How to get kernel source code by source_sync.sh in L4T driver package?
Run below command to get certain release source code: ./source_sync.sh -t  Where  can be found in Nvidia Jetson Linux Driver Package Release Notes, section 1.0 "About this Release". For example, for L4T 32.2.1, release notes says the release tag name is tegra-l4t-r32.2.1, so below command can get the kernel code: ./source_sync.sh -t tegra-l4t-r32.2.1

How to make text Bold or Italic by NvOSD in Tegra MultiMedia API?
User can refer to sample 02_video_dec_cuda on how to use NvOSD in Tegra MultiMedia API and do below change can make text Italic, Bold is similar.  diff --git a/samples/02_video_dec_cuda/videodec_main.cpp b/samples/02_video_dec_cuda/videodec_main.cpp index 0d63328..45bebff 100644 --- a/samples/02_video_dec_cuda/videodec_main.cpp +++ b/samples/02_video_dec_cuda/videodec_main.cpp @@ -189,7 +189,7 @@ set_text(context_t* ctx) ctx->textParams.display_text = ctx->osd_text ? : strdup("nvosd overlay text"); ctx->textParams.x_offset = 30; ctx->textParams.y_offset = 30; -   ctx->textParams.font_params.font_name = strdup("Arial"); +   ctx->textParams.font_params.font_name = strdup("Italic"); ctx->textParams.font_params.font_size = 18; ctx->textParams.font_params.font_color.red = 1.0; ctx->textParams.font_params.font_color.green = 0.0;

How to get a unique ID for Jetson module?
sudo cat /sys/firmware/devicetree/base/serial-number

EEPROMs on Jetson platforms.
Jetson platform usually has two EEPROMs, one on module and one on carrier board. The EEPROM on carrier is for some Nvidia internal board id storage, not mandatory on customer design. EEPROM on module stores module version, MAC address, etc. Layout of EEPROM on module can be found here.

How to use UART7 on TX2 (UART7 cannot receive data)?
On TX2, UART7 is used for BPMP debug console. User needs to disable BPMP debug console before using UART7 by change.

How to use ttyTHS0 on Xavier?
ttyTHS0 is used for console on Xavier by default by /etc/systemd/system/nvgetty.service. User needs to disable nvgetty service before using ttyTHS0.

Error when processing multi-channel high-resolution video data on Jetson platform
In R32.2.1 and earlier L4T release, when processing multi-channel high-resolution video data, the system may report error like below:  NvRmChannelSubmit: NvError_IoctlFailed with error code 22 NvRmPrivFlush: NvRmChannelSubmit failed (err = 196623, SyncPointIdx = 29, SyncPointValue = 0) NvRmPrivFlush: NvRmChannelSubmit failed (err = 196623, SyncPointIdx = 29, SyncPointValue = 0) NvRmPrivFlush: NvRmChannelSubmit failed (err = 196623, SyncPointIdx = 29, SyncPointValue = 0) The reason is in R32.2.1 and earlier L4T release, dma mask is 32 bit for host1x context device. This causes NVDEC, NVENC, VIC, DLA... can only allocate 4GB dma buffer in total. Apply [[Media:Set_DMA_mask_to_host1x_device.patch|patch]] can fix this issue. The patch is merged in L4T R32.2.2.

Failed to use headless mode oem-config feature on Jetson platform
When using headless mode oem-config, suggest to use putty or screen on host to open tty device to config device, e.g. below command: $ sudo screen /dev/ttyACM0 115200 By default, headless mode uses tty device enumerated by USB port which is used to flash device. In this case, the tty device node should be /dev/ttyACMx on host.

Please keep USB cable connected during the whole headless mode oem-config phase, or config will fail and system may ask you to login directly but no valid account is created.

How to create user account on Jetson platform.
Prefer to use the below commands to create new user account on Jetson platform. sudo adduser  Or sudo useradd  -m -s /bin/bash sudo passwd  sudo usermod -a -G video  The new user account need to be added to video group(adduser does it automatically), or the account may have issue when using CUDA related SDK like TensorRT.

How to flash specific partition on Jetson platform
Jetson platform's partition information stores at Linux_for_Tegra/bootloader/flash.xml in Jetson BSP package. The flash.xml is automatically generated when running flash.sh. The template to generate flash.xml defines in xxxx.conf (jeton-tx2.conf for example) by item EMMC_CFG=xxxxxx.xml.

Check Linux_for_Tegra/bootloader/flash.xml can get the partition name of each binary file. For example, search "cboot.bin" in Jetson TX2's flash.xml, we can get both partitions "cpu-bootloader" and "cpu-bootloader_b" contain it. So we should run below commands to update cboot.bin. sudo ./flash.sh -k cpu-bootloader jetson-tx2 mmcblk0p1 sudo ./flash.sh -k cpu-bootloader_b jetson-tx2 mmcblk0p1 Official document describes "Flashing a Specific Partition" locates here

Ethernet issue on Jetson TX2
The Broadcom Ethernet PHY used on Jetson TX2 has issue when Energy-Efficient Ethernet(EEE) enabled. Apply [[Media:Add_option_to_disable_eee.patch|patch]] and enable CONFIG_EQOS_DISABLE_EEE kernel config, or user may meet some kinds of Ethernet issue (long delay, link down, transfer stuck or something else). The patch is merged in L4T R32.3.

How to control GPIO pins
Take Jetson AGX Xavier as an example, Let's say we want to control pin GPIO17. 0. Make sure GPIO17 pinmux is configured as GPIO not SFIO. How to check pinmux setting 1. By checking Jetson AGX Xavier pinmux configuration template, we know that GPIO17 is actually GPIO3_PQ.01. GPIO_3 means TEGRA194_MAIN_GPIO. 2. By checking code hardware/nvidia/soc/t19x/kernel-include/dt-bindings/gpio/tegra194-gpio.h, we know TEGRA194_MAIN_GPIO(Q, 1) equals 16 * 8 + 1 = 129. 3. By "cat /sys/devices/2200000.gpio/gpio/gpiochip288/base" we get base is 288. So GPIO17 is actually gpio417 in Linux(288 + 129 = 417). 4. Run "echo 417 > /sys/class/gpio/export" to export gpio417. 5. Get direction: "cat /sys/class/gpio/gpio417/direction"; Set direction: "echo in > /sys/class/gpio/gpio417/direction", "echo out > /sys/class/gpio/gpio417/direction" 6. Get value: "cat /sys/class/gpio/gpio417/value"; Set value: "echo 0 > /sys/class/gpio/gpio417/value", "echo 1 > /sys/class/gpio/gpio417/value"