Is that possible that we install generic version Ubuntu on tx2?

For example:
Ubuntu 16.04.4 LTS or
Ubuntu 18.04.1 LTS

The later R28.x releases are Ubuntu 16.04. The R32.1 release is Ubuntu 18.04.

Those releases are a completely generic Ubuntu arm64 release, but with NVIDIA drivers and boot support.

So far as installing without using the NVIDIA boot mechanism, I would say there is no practical possibility. You could do so, but you’d end up putting the NVIDIA drivers and device tree in just as if you had used the NVIDIA release itself. Unless you have a specific reason or purpose you have in mind the only practical reply is “not really”. If you do have some special case or idea in mind, then you might share the details.

NOTE: L4T is just Ubuntu with the correct drivers…it is still Ubuntu.

Is there a guide anywhere to install the minimal possible Ubuntu system? I’ve hacked at this a few times but never found a good repeatable method to get a minimum install.

Thank you so much!

The scenario:
We want to build our kernel code based on ARM64 system.

The requirement:
On the TX2 ARM system, the uname -r is 4.4.15-0-tegra, we want to change it to 4.4.0-145-generic.
So that we can patch packages/headers files exactly match the 4.4.0-145-generic kernel.

The reason is:
My kernel code is linux kernel/headers sensitive. It is not from the upstream (super hard to push back to upstream). So that as of now, we want the linux kernel/headers to be exactly generic and match the uname -r.

My project, specifically speaking the build makefiles, has some kernel code depends on certain kernel headers, so that we usually do "apt install linux-headers-(uname -r) linux-image-(uname -r).

If that’s not designed by nature (I do think the R28.x or R27.1 are from Ubuntu), I still want to ‘tweak’ the (uname -r) and the linux kernel to be exactly as 4.4.0-xxx-generic instead of a specific name.

What I have tried but did not work was:
Tweaking my kernel code to make compile it against TX2 current kernel, I ended up with missing header files here and there.

I want to install a community generic linux kernel like Ubuntu 16.04.4 LTS not TX2 specific R27 or R28. Is that possible? If it is not allowed, I would like to try different platforms. :)

This might be of interest:

Basically this shows the equivalent of taking the desktop version and adjusting packages to become a server version.


You can download ubuntu-base-16.04 from and you can extract the content into $JETPACK_DIR/64_TX2/Linux_for_Tegra/rootfs/ and when the filesystem is installed by all the custom librariesand another files required by Tegra will be added.

But I think what you are looking for is a kernel version with a custom kernel release name (uname -r).
If this case you can download L4T kernel sources and change the EXTRAVERSION definition located in main Makefile of the kernel sources in order to change the release name.


Hi ManuelLeiva,

Thank you so much! I think you are right, I am looking for a customized kernel.
It is not just customized (uname -r), instead it has to be updated with header files and kernel images.
So, either:
1) we install a generic linux official kernel.
2) we build a kernel

My tx2 has a 2016 version of customized linux kernel provided by nvidia, and I cannot use apt to upgrade it by searching packages from the official linux download services.

I will try the second option first.

Note that “4.4.0” is a downgrade to an older kernel versus “4.4.15”. However, you could install a new kernel and leave the old one in place, e.g., with a new name. Copy the Image file to “/boot/Image-4.4.0-generic”, and assuming “uname -r” is “4.4.0-generic”, then install modules to “/lib/modules/$(uname -r)/”.

You can easily install the full source of that kernel manually, e.g., add to “/usr/src/sources/kernel/kernel-4.4.0/”, and add a symbolic link from “/lib/modules/$(uname -r)/build” to that directory. You would have both headers and source, but anything wanting just headers would not care. Typically you would put the correct “.config” (including CONFIG_LOCALVERSION="-generic") in that kernel source location and run “sudo make modules_prepare” prior to building against it using out of tree driver sources.

Then you might be able to add a second entry to “/boot/extlinux/extlinux.conf” and name the new kernel as the only difference, then pick this entry during boot using serial console. If this works, then you can make that the default entry and leave the original still available.


LABEL primary
      MENU LABEL primary kernel
      LINUX /boot/Image<b>-4.4.0-generic</b>
      APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4

Leaving the original in place and testing is a lot safer than having it go wrong and needing to flash again.

Just an update. Thanks for everyone, finally it works!

Just fresh flash the latest version of jetson pack by using sdkmanager (you have to have x86 ubuntu with usb connected to your tx2)!

Again, I think most of the nvdia experts are always working on their familiar configuration, however we have ubuntu, centos, etc… and we also have powerpc…

So, flash your jetson tx2 from host (x86 ubuntu) to (arm tx2) via the given usb cable!

This is the video:

One more thing is that all modules are built in to the kernel.
Check: /lib/modules/4.9.140-tegra/modules.builtin

Nice! Thanks for the feedback!