PCIe Bus Error

GRUB only works on a motherboard with a BIOS. Embedded systems do not have a BIOS. The Jetson’s boot content and many partitions are essentially a custom version of GRUB and the BIOS in software. In many of the Jetson’s various boot stages lead to U-Boot, and it is U-Boot which takes the place of GRUB. In the case of the AGX Xavier there is a boot stage known as “CBoot”, and instead of this loading U-Boot, it has some functionality which mirrors U-Boot and kernel load is directly from CBoot to the Linux kernel.

Anything regarding updates via GRUB will be incorrect, except that if the update is to change kernel command line parameters, the command line parameters themselves will be correct. You have find a way to use the CBoot (or U-Boot) mechanism to add that same parameter.

Assuming that the above information really has only the goal to get “pci=nomsi” as a kernel command line parameter, you are in luck. Some of the other content is probably unrelated to what you are doing, but the addition of kernel command line parameter “pci=nomsi” looks to be the real goal of that patch or research.

You current kernel command line can be viewed on a running system via “cat /proc/cmdline”. If you add your parameter, then you’d see “pci=nomsi” somewhere in that command line.

Before I show the change, be aware that you can use serial console and pick among multiple boot entries. If something goes wrong, then picking the original boot entry (without any modification) would get you back in the system without any effort. I’ll show you how to add an entry rather than how to just throw away the original entry with your modification.

File “/boot/extlinux.conf” is somewhat similar to a GRUB setup. Within this you will see this excerpt as something similar to this (but I’m using an NX instead of AGX so yours will differ):

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

Note that the “APPEND” parameter appends kernel command line arguments (space delimited). If you were to modify this entry, then it would be something like this:

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

…and note I added “pci=nomsi” at the end of the APPEND line.

To instead create an alternate boot entry which can be picked from serial console command:

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

If you had this second entry, then the first entry would remain available even if the second entry fails boot. During boot you’d have a short moment to select either the “primary kernel” or “testing” entry via serial console (the default still goes to the original entry). To tell extlinux.conf to boot your new entry by default (but still leave the original entry), change:
Default primary
…to instead be:
Default testing

Almost forgot: Nano and Xavier, if using PCIe, are more or less the same so far as many kernel command line options go. Not a guarantee, but much is the same between all of the Jetsons and even a desktop PC.