Jetson-io.py changes not getting saved

Everytime I use the sudo /opt/nvidia/jetson-io/jetson-io.py tool to enable the Adafruit SPH0645 microphone, and reboot the the device, I see that the pin configuration goes back to the default settings. At the same time, the microphone is not functioning. When I watch on a scope, I don’t see any activity on those pins, even though this configuration was working before on some other Jetson Xavier boards.

How can I verify if the pins are actually configured properly?

hello jakepoz,

may I know what’s your approaches to load the device tree blob. are you using FDT entry in the /boot/extlinux/extlinux.conf?
it should be *.dtbo generated after you’ve complete the Jetson-IO settings, please check the kernel logs to ensure those *.dtbo has being loading while kernel init.

I haven’t done anything special, just a clean flashing of the Jetpack 4.6, and then running the jetson-io.py script and selection the options.

This is what is in the extlinux.conf file:

TIMEOUT 30
DEFAULT JetsonIO

MENU TITLE L4T boot options

LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image
      INITRD /boot/initrd
      APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyTCU0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 rootfstype=ext4

# When testing a custom kernel, it is recommended that you create a backup of
# the original kernel and add a new entry to this file so that the device can
# fallback to the original kernel. To do this:
#
# 1, Make a backup of the original kernel
#      sudo cp /boot/Image /boot/Image.backup
#
# 2, Copy your custom kernel into /boot/Image
#
# 3, Uncomment below menu setting lines for the original kernel
#
# 4, Reboot

# LABEL backup
#    MENU LABEL backup kernel
#    LINUX /boot/Image.backup
#    INITRD /boot/initrd
#    APPEND ${cbootargs}


LABEL JetsonIO
        MENU LABEL Custom Header Config: <HDR40 Adafruit SPH0645LM4H>
        LINUX /boot/Image
        FDT /boot/kernel_tegra194-p2888-0001-p2822-0000-user-custom.dtb
        INITRD /boot/initrd
        APPEND ${cbootargs} quiet root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 console=ttyTCU0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 rootfstype=ext4

Here is a paste of the dmesg: [ 0.000000] Booting Linux on physical CPU 0x0[ 0.000000] Linux version 4 - Pastebin.com
I don’t see anything related to the DTB files in there.

With some more testing, it appears that the configurations for DAP2 are just not being applied:

sudo cat /sys/kernel/debug/tegra_pinctrl_reg | grep dap2
Bank: 0 Reg: 0x02434000 Val: 0x00000055 -> dap2_din_pi1
Bank: 0 Reg: 0x02434008 Val: 0x00000055 -> dap2_dout_pi0
Bank: 0 Reg: 0x02434010 Val: 0x00000055 -> dap2_fs_pi2
Bank: 0 Reg: 0x02434018 Val: 0x00000055 -> dap2_sclk_ph7

This makes no sense to me, I swear on other versions of Jetpack you just run the utility, enabled the SPH0645 mic setting, and off you went. Any ideas?

hello jakepoz,

there’s boot menu with the customize FDT entry. could you please have another try to boot into system by select JetsonIO label ?
btw, I cannot download the dmesg for checking, you may upload the logs as text attachment.

Thank you Jerry, your idea was very helpful! I booted up with the serial console attached, and noticed something very strange. (BTW, If I send a keystroke during boot I just get into the Cboot console, so I’m not sure where to select the extlinux boot options. This is a headless unit)

[0004.613] I> Loading extlinux.conf ...
[0004.613] I> Loading extlinux.conf binary from rootfs ...
[0004.615] I> rootfs path: /sd/boot/extlinux/extlinux.conf
[0008.745] I> lookup_linear_dir:447: Invalid file block num
[0008.746] I> ext2_walk:142: 'boot' lookup failed
[0008.746] I> ext4_open_file:666: '/boot/extlinux/extlinux.conf' lookup failed
[0008.747] E> file /sd/boot/extlinux/extlinux.conf open failed!!
[0008.747] W> Failed to load extlinux.conf binary from rootfs (err=202113041)
[0008.750] E> Failed to find/load /boot/extlinux/extlinux.conf

Anyways, it seems that the extlinux.conf file is not even being seen or used at all, because it’s trying to read it from the sd card. I had an ext4 formatted SD card installed for storage, and when I removed it, everything started working.

Now, the question is, how do I support both the SD card and booting with the proper device tree for audio support?

boot_with_sd.txt (30.4 KB)

hello jakepoz,

there’re two selection during cboot, the first is choosing the boot order, then you’ll see the boot options. it’ll look like this…

[0016.026] I> L4T boot options
[0016.029] I> [1]: "primary kernel"
[0016.032] I> Enter choice: 

are you working with Jetson AGX Xavier?
please share the modification you’ve done to boot from external storage. it should boot from internal eMMC by default.

Yes, I am working with Jetson AGX Xavier 32GB.

The boot order shows as sd, usb, nvme, emmc, net. Setting it to emmc via “setvar” works, and the device boots correctly. However, it is a purely “out of the box” config. I just installed Jetpack 4.6, plugged in the SD card, formatted it, and tried to use the jetson-io.py tool. I never adjusted the boot order, and I definitely don’t want it to boot from the SD card.

How do I set it to permanently ignore the sd card as a boot option?

Update: Looks like formatting the SD card as fat32 solved the issue, Cboot no longer wants to boot from it, and all is well! The microphone works again.

1 Like