Ubuntu 14.04 on Meerkat [Tegra] K1 Bring-up-board

Has anyone tried to put Linux For Tegra (Ubuntu 14.04) on a Meerkat K1, the miniaturized Jetson K1 board from Avionic Design (http://www.avionic-design.de/en/products/Embedded-en/Tegra-K1.html)?

They ship a customized GNU/Linux distribution (http://buildroot.uclibc.org/) which is nice and small. However, we need to support ROS (http://www.ros.org/) on these modules, which is pretty tricky with non-Ubuntu distros (plus, honestly, Debian/Ubuntu stuff is just easy to use).

I’ve tried modifying the latest Linux For Tegra release with various configuration files I could find in Avionic’s package. Their stuff doesn’t follow the same structure, and I’m pretty sure I’m missing some important stuff. Pretty obvious too, since the re-flash failed. :-)

I’m considering going the other way: modifying Avionic’s stuff to use Ubuntu instead of Buildroot. I’m not exactly sure how, as they customize things pretty well, but that at least sounds easier than what I’ve already tried.

Any nudges in the right direction would be appreciated.

I believe Avionic preloads the meerkat with u-boot while the Jetson TK1 dev kit uses fastboot.

My suggestion would be to go through the Avionic Design buildroot process and extract the u-boot compatible kernel image (which should include the modified l4t-21.4 kernel from Avionic Design with support for the meerkat module (it requires custom device tree support, arch specific bringup, etc).

Once you have the necessary kernel image I would place it in the Jetson TK1 disk image in the same spot as it was in buildroot and see if you can get the meerkat to boot. Since fastboot and u-boot are incompatible I’m fairly confident your boot is failing due to the bootloader not even knowing where to load the kernel image from.

I expect to be working on the same goal shortly, so we’ll see how far we can respectively get.

Latest Linux for Tegra releases uses U-boot by default. But you definitely should use the U-Boot and the kernel from AD as they should have the correct drivers etc. for that particular board.

First thing to test would be to put the Linux for Tegra rootfs on an USB stick (assuming the AD’s board supports USB) and configure the U-Boot to boot from the USB. With that approach you could test it out without removing anything existing on the board.

Although since you say that the reflash already failed, I guess you don’t need to worry about that anymore :) So just flash the u-boot and the kernel for AD and rootfs from Linux for Tegra.

Ubuntu is very convenient for testing and developing but for products, buildroot might be better as with that you are in control of everything (and thus also need to do much more yourself) and it’s easier to keep it small containing just the stuff you really need.

Thanks for all the suggestions.

I managed to get it working. Restored Avionics set-up, as per their instructions. Then I put the board into USB-drive mode, ripped out the buildroot filesystem, while saving the kernel, modules, and u-boot configuration. Copied nVidia’s rootfs image from the latest release, after running apply_binaries.sh (which may not have been important). Re-inserted Avionic’s kernel, modules, and u-boot configuration. It works!

Took a long time, since we had a hardware issue with an HDMI cable. At first the kernel would just crash after calling init, probably while initializing the HDMI system, but was hard to diagnose since the board powered off, too. Once I started playing with a full Jetson, I noticed the cable issue.

Anyway, thanks again. :-)

Hi,

could you explain your soluton in details? I am trying to do the same and I cannot get my board to boot even when I use kernel and modules from buildroot. I am able to restore “factory” buildroot system, upload the one from nvidia website and replace kernel, modules and u-boot configuration (whole /boot folder and /lib/modules folder) but my board fails on mounting / even if I copy /etc/fstab file from buildroot.

My solution does not involve the buildroot approach; I’ve never used it. I preserve the /boot and /lib/modules folders from the original buildroot system, replacing the rest with the Ubuntu image from L4T R21.4. Once the Ubuntu image is put in place, restore the /boot and /lib/modules folders and you should be good.

Thank you for your reply.

I still cannot get it to boot - when I dd system.img.raw to my board and replace /boot and /lib/modules I get “bootarg overflow 602+0+0+1 > 512” in bootloader. When I restore factory buildroot and manually remove and copy contents of system.img.raw I get “no space left on device” in the middle of the process despite maxed-out filesystem and partition size (partition is more than 14GB and I try to copy 2GB of data). Any ideas?

Hi,

I finally managed to get it working. I would like to thank acutated-man for his help, I wouldn’t have done it without him. I am posting my steps for future reference:

  1. Restore factory buildroot (as long as it boots it is fine)
  2. Put your board into ums mode (from bootloader shell execute command “ums ums 0”). Bootloader shell is available via RS232
  3. Backup /boot, /lib/modules and /etc/fstab
  4. Follow steps from NVIDIA Quick start guide up to flashing (this generates rootfs on host machine)
  5. Format board with ext4 or simply remove all of its contents
  6. Using rsync copy contents of generated rootfs to your board:
rsync -aHAXP /path/to/rootfs /path/to/board
  1. When done, restore /boot, /lib/modules and /etc/fstab from backup
  2. Edit /etc/fstab and remove everything except root filesystem (I pointed it to /dev/mmcblk0p1 instead of /dev/root but it may not have been required)
  3. Press Ctrl-C in bootloader terminal and execute “boot” (hard reset will also do the trick)

Side notes:
a) This board does not have Ethernet, thus you may need to purchase USB to Ethernet adapter. Edimax EU-4208 does the job and is supported both by ubuntu and buildroot.
b) I am struggling with overscan on my HDMI output and I haven’t fixed it yet (image doesn’t fit on my screen, I cannot see the edges)
c) overall performance is not great (I expected it to be much better, I have Odroid-U3 to compare with)
d) graphics performance is poor and it is probably related to poor kernel. I will try to recompile the kernel to make it as similar to nvidia kernel as possible
e) USB HUB (If you use any, but you most likely do) needs to be externally powered, otherwise there may be issues with USB devices.