How to flash only Kernel image to Jetson TX2


Please let me know the correct command to flash only Kernel image.
I have tried below but it flashes everything,

sudo ./ -K <emmc_partition>

I have also tried scp’ing the Image, zImage files onto Jetson device and copied them to /boot, but this is also doesn’t work. Am I missing something to make it work?


Some details change depending on which L4T release. Is this R28.1?

In all cases the kernel is just put in “/boot”, and extlinux.conf pointed at the new kernel (I’m assuming you’ll rename the new kernel and keep the old one available in case it doesn’t work). You don’t need to flash for a kernel with U-Boot.

Device tree is a different story if you are changing this. What are you using to determine the new kernel did not get used?

Yes it is R28.1

For some reason copying the Image file to /boot is not working for me. I have tried both overwriting existing image and renaming the old one. It doesn’t look like permissions issue as /boot as rw permissions.

Any additional steps required after copying for this L4T release?

Are there any alternatives to only updating the kernel besides this method?

At the moment I am not changing device tree, its just kernel update.

I have also tried poiting LINUX to a different path in extlinux.conf (instead of /boot/Image I have changed it to <my_directory>/Image) and this one also didn’t have any effect.

I have tried one other thing.
I have actually deleted Image, zImage from /boot directory and still the device boots fine without issues. It is not clear where it is picking up the kernel from.

Any suggestions on what is going wrong here?

I went through the documentation again and noticed one difference in Linux_for_Tegra/kernel directory in my setup in that it has Image as well as zImage.

I have deleted zImage and flashed everything first and now I am able to simply replace Image and zImage to update the kernel. I am not sure whether this is the root cause though.

I think zImage (compressed) is used on ARM32bits platforms, Image (uncompressed) is used on ARM64bits.

zImage is not supported…if you use this I could understand why it wouldn’t work. I think the decompression in this version of U-Boot is compatible only with 32-bit systems, and so zImage is not used on 64-bit systems. Thus the “Image” file instead of “zImage”. The use of Image or zImage is unrelated to 32-bit or 64-bit architecture, it’s just a side-effect of U-Boot not providing support for zImage in this case (U-Boot never had this decompression ported and was originally from 32-bit days). Always use the Image file, ignore all zImage files with this version of U-Boot.

How do you know the Image is not used? Did you set a new “CONFIG_LOCALVERSION” and not see a change follow in “uname -r”?

I think I know what happened to some on this thread and to me as well. “Normally” it’s enough to put new kernels under /boot/, but I once built a buggy kernel, that used to panic on boot. To fix the problem I ran “ -K …/Image” That recovered the system, I was able to boot again, but after that placing new kernels to /boot didn’t work any more! As someone in this thread suggested, removing an Image from the host system, creating and flashing an image with that, should re-enable /boot. I’m going to try to figure out exact steps, but any help would be appreciated.