I would like to configure my kernel boot parameters on the Jetson Orin AGX Devkit. I found this post and attempted to follow the answer. However, after flashing and booting, I am now seeing a CPU stall in an Ethernet driver that is causing the Jetson to crash and reboot. Is the method described in this post the official way of modifying the kernel boot parameters? What might cause a misconfiguration of the device tree by using this method? The only thing I’ve added to “devicetree.dts” are the following boot args:
Here are a few lines of output showing the CPU stall:
[ 126.538939] rcu: INFO: rcu_preempt self-detected stall on CPU
[ 126.538948] rcu: 0-....: (5316 ticks this GP) idle=51e/1/0x4000000000000002 softirq=0/0 fqs=2047
[ 126.538956] (t=5250 jiffies g=2529 q=579)
[ 126.538959] Task dump for CPU 0:
[ 126.538961] task:irq/151-eth0.vm state:R running task stack: 0 pid: 1215 ppid: 2 flags:0x0000002a
[ 189.551781] rcu: ====For debug only: End Printing Blocked Tasks====<print_cpu_stall>
[ 202.622985] nvethernet 6810000.ethernet: [xpcs_lane_bring_up][type:0x4][loga-0x0] PCS block lock SUCCESS
[ 203.652827] nvethernet 6810000.ethernet: [xpcs_lane_bring_up][type:0x4][loga-0x0] Failed to get PCS block lock
Here is my command to flash the Jetson using the new .dtb file:
sudo ./flash.sh -d kernel/dtb/devicetree.dtb jetson-agx-orin-devkit mmcblk0p1
Here is my command to generate the .dtb file:
dtc -I fs -O dts -o /tmp/devicetree.dts /sys/firmware/devicetree/base
dtc -I dts -O dtb -o /tmp/devicetree.dtb /tmp/devicetree.dts
you can pass parameters to the kernel command line by modifying
/boot/extlinux/extlinux.conf, and there is no need to deal with kernel dtb.
Can you show the full dmesg log when the CPU stall happens? Under what circumstances will this issue happen? Also, I think these parameters may have to be used along with an PREEMPT-RT kernel. Have you tried that?
Here is the full boot log captured over UART. The CPU stall happens shortly after reaching the login prompt when I have an Ethernet cable connected. Without an Ethernet cable connected, I am able to login to the system and use it without issue. We are using the PREEMPT-RT kernel already, and I have confirmed that the system boots when manually editing the boot parameters through
extlinux.conf and not using the dtb.
cpu_stall_boot.log (84.0 KB)
I am able to modify
/boot/extlinux/extlinux.conf, but I am looking for a way to automate this process so we don’t need to manually write to this file every time we provision a new unit. I just discovered the
-C option of
flash.sh which is exactly what I am looking for. I can confirm the following command appends the two new command line arguments to the pre-existing command line arguments:
sudo ./flash.sh -C "irqaffinity=0-3 kthread_cpus=0-3" jetson-agx-orin-devkit mmcblk0p1
Thank you for your help!
glad you found a solution!
Regarding automation, the same rootfs (including
extlinux.conf) can be used across different Jetson devices, but it’s just that it has to pack the system image again if the device to be flashed is different from the previous one, or you can use
-r to skip building it.
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.