How to successfully update Jetson TK1 to Ubuntu 16.04

I managed to update a TK1 (DJI Manifold) to 16.04 following this procedure, but I have no power to my USB devices after the update.

lsusb is empty

Any ideas for follow-up steps?

Below is my grep of dmesg.

ubuntu@tegra-ubuntu:~$ dmesg | grep usb
[    0.000000] Kernel command line: console=ttyS0,115200n8 console=tty1 no_console_suspend=1 lp0_vec=2064@0xf46ff000 mem=2015M@2048M memtype=255 ddr_die=2048M@2048M section=256M pmuboard=0x0177:0x0000:0x02:0x43:0x00 tsec=32M@3913M otf_key=c75e5bb91eb3bd947560357b64422f85 usbcore.old_scheme_first=1 core_edp_mv=1150 core_edp_ma=4000 tegraid=40.1.1.0.0 debug_uartport=lsport,3 power_supply=Adapter audio_codec=rt5640 modem_id=0 android.kerneltype=normal fbcon=map:1 commchip_id=0 usb_port_owner_info=2 lane_owner_info=6 emc_max_dvfs=0 touch_id=0@0 board_info=0x0177:0x0000:0x02:0x43:0x00 root=/dev/mmcblk0p1 rw rootwait tegraboot=sdmmc gpt
[    0.531983] usbcore: registered new interface driver usbfs
[    0.532047] usbcore: registered new interface driver hub
[    0.532161] usbcore: registered new device driver usb
[    0.660063] usb0-vbus: 5000 mV 
[    0.660361] usb1-usb2-vbus: 5000 mV 
[    4.145021] usbcore: registered new interface driver asix
[    4.145065] usbcore: registered new interface driver ax88179_178a
[    4.145111] usbcore: registered new interface driver cdc_ether
[    4.145166] usbcore: registered new interface driver smsc95xx
[    4.145206] usbcore: registered new interface driver cdc_subset
[    4.145274] usbcore: registered new interface driver cdc_ncm
[    4.145781] tegra_xusb_read_usb_calib: usb_calib0 = 0x02858389
[    4.146272] usbcore: registered new interface driver usb-storage
[    4.146384] usbcore: registered new interface driver usbserial
[    4.146420] usbcore: registered new interface driver option
[    4.146453] usbserial: USB Serial support registered for GSM modem (1-port)
[    4.146487] usbcore: registered new interface driver pl2303
[    4.146517] usbserial: USB Serial support registered for pl2303
[    4.152139] tegra-udc tegra-udc.0: usb_bat_chg regulator not registered: USB charging will not be enabled
[    4.163950] usbcore: registered new interface driver uvcvideo
[    5.204885] usbcore: registered new interface driver usbhid
[    5.215388] usbhid: USB HID core driver
[    5.325541] usbcore: registered new interface driver snd-usb-audio
[    8.093459] usb1-usb2-vbus: incomplete constraints, leaving on
[    8.102815] usb0-vbus: incomplete constraints, leaving on
[   11.231416] tegra-xhci tegra-xhci: failed to init firmware from filesystem: tegra_xusb_firmware

A custom board requires a custom device tree. I don’t know if the update overwrote any of the device tree settings, but my guess is that the Ubuntu mechanism doesn’t touch the tree. On the other hand, the USB driver might have been replaced with a non-Tegra version and incapable of functioning, but that is speculation.

A newer kernel might require the device tree to change. In that case you are out of luck unless you know what the hardware differences are and kernel version differences.

FYI, when flashing a Jetson TK1 dev kit on command line you’d use the driver package plus sample rootfs. The sample rootfs in this case is just Ubuntu 14.04 without the NVIDIA-specific drivers. When doing the command line flash it would go like this…see URL and adjust:
https://devtalk.nvidia.com/default/topic/982779/jetson-tk1/how-to-perform-a-correct-fresh-ubuntu-install-on-jetson-tk1/post/5040584/#5040584

In particular, the part which is of interest for you is what the “sudo ./apply_binaries.sh” step does. This unpacks the NVIDIA-specific hardware accelerated drivers and libraries into the “rootfs/” subdirectory, and then the flash creates the image from that “rootfs/” directory and a few bootloader edits.

If you get the “driver” package (L4T downloads are free, though you might need to create a second login…the version to get would depend what was previously on the system, and I can’t even guess what is on a DJI Manifold), and don’t unpack the sample rootfs, but do run the “apply_binaries.sh” step, then the “rootfs/” subdirectory will contain the unpacked binaries. Or you can create an empty temp directory somewhere, and name that as the unpack location via the "-r " argument. Example:

sudo -s
mkdir /tmp/rootfs
./apply_binaries.sh -r /tmp/rootfs
# explore or copy or move the tree in "/tmp/rootfs/".
exit

When a Jetson has L4T on it you can run this command to check if all of those files are valid:

sha1sum -c /etc/nv_tegra_release

Does this command work for you? Does it show all files ok? If not, then perhaps unpacking those files from “/” of your TK1 would put a file back in place which is missing. I won’t even guess though at which files might be missing, but you could report here if anything specific is gone. There is no official support for this method of upgrade, nor for that version of Ubuntu, so there is a lot of guessing to live with.

I can see your usb_port_owner_info=2 do you have usb 3.0 enabled in odmdata in jetson-tk1.conf?

from jetson-tk1.conf

# ODMDATA for USB2.0 configuration on USB port(J1C2 connector) = 0x6009C000
# ODMDATA for USB3.0 configuration on USB port(J1C2 connector) = 0x6209C000
ODMDATA=0x6009C000;

Board command line:
usb_port_owner_info=0 = usb 2.0
usb_port_owner_info=2 = usb 3.0

Also im sure the DJI uses a custom dtb make sure your extlinux.conf is correct:

Jetson TK1 reads:

LABEL primary
MENU LABEL primary kernel
LINUX /boot/zImage
FDT /boot/tegra124-jetson_tk1-pm375-000-c00-00.dtb

Doing this upgrade now on my TK1, sitting watching the % creep higher and not hang :)

100% downloaded... Check
Upgrading.....
Unpacking....
Processing....

So sure it's going to hang after I've been screwing around with python upgrades, jetpack upgrades, yolo, cuda, you name it....

Still going :)

This is so tense :D :D

It's either going to hang, or my battery is going to run out (i'm running the tk1 on a 12v battery)

Still Not hanging....

Unpacking...
Preparing....
Reading....
Removing.....

Coffee...

Do I want to restart some services....Hmmm Ok

installing... 35%
.... 50%
... Unpacking fonts
Ouch.

Hung.

Well, I think the moral of that story is not to try to upgrade a 16GB mmc system to 16.04 when you've already filled the 14.04 system with a ton of experiments.

Options now:
a) Chuck it in the bin
b) Reinstall 14.04

I only wanted to see if I could install NCSDK on the TK1 with 16.04, oh well. 

Perhaps Nvidia can collaborate with Intel or Perhaps release it's own VPU stick or pcie board, or something cool like that.

Oh wait We're still going...

65%

Go TK1! Go!

More coffee....

70%

Warp speed Tk1!

80%!

Oh i'm sooooo excited right now

90% OMG!

98%

I'm going to vomit...
This is too much...

Searching for obsolete software....

Removing..

Ok now i'm getting bored.

Oh it worked!

16.04 Xenial
Seems I didn’t have to do ‘sudo apt-get install gnome-session-flashback’ either
Chromium works better on 16.04 than 14.04

I’m tired now, but I will add further progress later. Thanks for letting me know 16.04 works! (Even with a semi-full TK1)

Next Day update:

  1. I tried using Auto-Login at startup, as seems it the TK1 might have small issue with waking after sleep at login but no big deal if you just type the password in black screen it comes back. Using auto Login seem to affect chromium keychain request and problems with window.

  2. Chromium is a much better experience under 16.04 than 14.04:
    1080p videos play without lag unlike only 720p under 14.04
    Youtube plays just fine
    Can also now install Chromium extensions such as Ublock Origin, couldn’t do that before
    Many other sites which did not run before due to flash or plugin problems work now
    No Spotify web player just now
    3.8Gb free space XD

  3. I think i’m going to have to dump Cuda Demo folder and some other things to free up space so I can attempt to install NCSDK

Will try to update more advantages of 16.04 TK1

How Can I Upgrade Kernel?

If you don’t follow the instructions exactly and mess up, ending with this:

apt: relocation error: /usr/lib/arm-linux-gnueabihf/libapt-pkg.so.5.0: symbol _ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

Any hope of saving this or should I just flash it again with L4T?

Do you have to install JetPack after upgrading to Ubuntu 16.04?

You can certainly install Jetpack without issue but is is not absolutely needed unless you need the cuda compiler among other things included in Jetpack.

Thanks for the reply!

Is it possible to install CUDA 6.5 on the TK1 after upgrading to Ubuntu 16.04?

I would also like to know if it is possible to install CUDA 6.5 after updating to 16.04. My nvcc compiler broke after the update and I cannot work on my code now.

Hi ,
Did you face any shutdown issues unexpectedly after the update?