Adding alternate kernel to Jetson Xavier

In my TX2 I used the /boot/extlinux/extlinux.conf to add my alternate kernel to the device. How can I do the same in the Jetson Xavier? The /boot/extlinux/extlinux.conf does not exist in the new device.

It’s /hilarious/ that a kernel image is placed into /boot/Image, but it’s not actually read at all! Hilarious!

What was wrong with u-boot? u-boot is feature complete. cboot is by far from it. I don’t get why NV had to steer away from what people already know works here. It dosen’t seem to make much sense to me, but perhaps someone could enlighten me from NV?

To answer your question, you can place it into the JetPack installation folders (you can’t miss them inside of Linux_for_Tegra there’s “kernel” and “bootloader”, both used for slightly different things (eg dtbs / kernel image + headers + modules/fw aka “supplements”). Check them out).
After that you can re-flash over USB (flash.sh). I really hope this isn’t the expected use case.

If you watch the output, you’ll notice it is creating and uploading a boot image. These get flashed into a different area than the root filesystem, or at least it appears to us as such, but I’m guessing is more than likely a separate flash chip.

I just installed my kernel yesterday, so I haven’t looked much into how to replace it manually. Before we could just dd it, now it appears not so much. Hopefully there’s a driver already out there and it’s just turned off (like everything else in the provided kernel.)

Why doesn’t NVidia use debs to distribute all of the “additions” that are just copied over top? That way updates could be handled sanely. They wouldn’t have to maintain this flurry of long overly complex shell scripts to accomplish rather simple things. It really doesn’t take that much time to do it this way and it’s much more maintainable.

Why doesn’t NVidia use the long existing methods of building an ubuntu/debian kernel from source? I’ve been using the jetson line since the TK1s, and this and the above have been always at the back of my mind. It’s… strange that we’ve basically all been forced to compile our own kernels just to use the jetson line of devices for day to day stuff, such as utilizing your run-of-the-mill standard ath10k wireless card.

I’m mostly just curious here, I’m not bashing. I really just want to understand the point in this; it just seems… so much harder for NVidia to do it in the way they have been, which, no offense meant, but, has not been to the benefit of us or them as far as I have been able to tell.

Oh wow, lol, I was fooled by the low partition number root is on (now?) ! It’s still here as a partition on the mmc:

  29        59329272        59460343   64.0 MiB    0700  kernel
  30        59460344        59591415   64.0 MiB    0700  kernel_b
  31        59591416        59592439   512.0 KiB   0700  kernel-dtb
  32        59592440        59593463   512.0 KiB   0700  kernel-dtb_b

I wonder how to select the second slot? Could be as simple as a button press on boot.

Hi akatrevorjay,

Do you mean the backup kernel partition?

Yeah, I’m guessing it’s actually controlled by nvbootctrl from the looks of it?

How do I get access to the Xavier documentation, by the way? A little frustrating to not be able to click into the links posted ;)

I assume this is a new thing?

Please try to use below website. Is there any trouble?
https://developer.nvidia.com/embedded/downloads -> L4T documentation with release 31.

Thanks akatrevorjay for your answer. However, can you/WayneWWW help me understand this further: Will the flash.sh script replace the old kernel image with the new one? Or will it place it as an additional kernel, as you have pointed with kernel_b?

In that case I would have the question: How do I choose the second kernel during boot?

A note on the above URL…you have to log in to that before you can see content. However, once logged in, it won’t redirect to your original URL. You will have to click a second time on the URL.

Per checked your request again and found your demand is not same as the what I thought…

kernel_b is a tolerance design for error. Once primary kernel partition is broken, it will fallback to this backup.

BTW, still no answer on why Uboot was removed in first place. Or if there’s another way to have different kernels on the system and choose them during boot without actually flashing the partition in the first place.

Please let us know if there’s a simpler way than to actually use a host machine all the time. Even ‘dd’ is not working.

Hi karthik, you have to mention the partition you want the kernel “Image” to be flashed. This is specified on the flash.sh script’s command line. For e.g.

For mmcblk0p29 partition (kernel)

sudo ./flash.sh -k kernel jetson-xavier mmcblk0p1

For mmcblk0p30 partition (kernel_b)

sudo ./flash.sh -k kernel_b jetson-xavier mmcblk0p1

I ended up flashing the kernel. However, it would still be useful to know if I can add an alternate kernel and then choose it during boot.

I have not yet found out an easier way to boot the system with an alternate kernel. I am gonna experiment with the u-boot source provide by NVIDIA but dunno when.

Please report back if/when you are able to look into this.

Sure. But I am not sure when I will get time to work on that. Hopefully soon :)