Getting started help needed for setup of Jetson TX2 and host for CUDA, C++/C, Python development

Hi All! I am having a a really difficult time setting up my development environment so I can develop two kinds of apps. I have no problem setting up the preloaded Ubuntu environment on the Jetson. The problem comes in when trying to setup the host. I have looked all over and I was unable to find a comprehensive guide to setting up the host. If any can point me to docs which describe what the host should be and how to set it up, I would be eternally grateful. I was to do two things:

  1. I would like to be able to develop CUDA apps in the C/C++ and Python and execute them on the Jetson.

  2. I want to be able to develop Python apps for Deep Learning using frameworks like TensorFlow, Keras, OpenCV, numpy, etc and then run them on the Jetson.

  3. I want to use the advanced development tools. (i.e. not a stripped down compiler and downloader)

Here is a list questions related to this effort:

The high level question whether I am required to have a dedicated Ubuntu O/S running on a host machine to develop the above or can I use a Windows host? It seems crazy to walk away from a standard environment. Running embedded linux makes sense because it is open source and you would be taking a huge risk building an embedded system software which you do not have the source to. It seems to violate the law of least surprise.

  1. Cross compilers are mentioned for compile/linking of CUDA apps, but I can’t find them. They do not appear to be in the CUDA toolset. The point of a cross compiler is separate develop from the target environment. If the toolchain has to run under the same o/s as the embedded applications, then it would seem to invalidate the need for a cross compiler (assuming that you have enough memory on the destination system.)

  2. With every embedded system I have worked with over the years, having access to the technical data sheets (whitepapers or reference manuals) for the processors and devices, and the actual embedded system, Jetson TX2, etc. was always an essential. They contained instructions, timing, micro-architecture, programming. It was my understanding the Jetson TX2 was GPU evaluation board. Any ideas where this info could be found?

  3. In terms of what is needed, I would appreciate any advice you can provide on hardware/software assuming that a standalone host machine.

Other questions:
Host clockspeed(Ghz)
Host System ram(Gb)?
Host CPU cores?
Can a 1000Mb be used in place of the USB interface?
What version of the software for C/C++, python, CUDA all work together?
What version of Ubuntu should I use?
For the C/C++ software, should I use MSVC or some other IDE?
IF so, how is the toolset integrated into IDE?
What does the development cycle look like?
Which Python env and version should I use (C++11/14, Python 3)?
Can Ubuntu be installed on an existing Windows system by creating and resizing partitions?
Is it possible to install the dev tools on 32mb flash card?
Where can I find information that shows the layout of the software components?
Is there any tools available

Please feel free to provide any comments or links to information which you think would be helpful.

Thanks in advance for taking the time to provide information. It will not only save me a lot of aggravation, but it will help a lot of other people and save considerable time and effort.

Greg

A small part of answers…

You can cross compile from Windows if you want, but the software supplied in JetPack is for an Ubuntu 14.04 or 16.04 host. You’d have to dig up the correct version of cross tools.

You cannot flash without an x86_64 Linux PC…the binary executable requires this. VMs are a problem with flash due to USB issues…if you want to use a VM it might work with a lot of work…but it will require research.

I’m not sure if the nsight edition of eclipse is available for Windows or not…JetPack distributes this for Ubuntu.

A general download page for the most recent flash software and tools:
[url]https://developer.nvidia.com/embedded/linux-tegra[/url]

A download page for documents:
[url]https://developer.nvidia.com/embedded/downloads[/url]
You’re probably interested in the search “technical reference manual” and “adaptation”.

A host PC won’t need to be all that powerful, but you will want a lot of disk space and a recent generation NVIDIA graphics card (something Pascal, e.g., a 1060 would work…graphics memory can become important with CUDA…6GB is far better than 3GB…speed itself isn’t nearly as important). You’ll want to get a USB serial UART cable for serial console. See:
[url]https://www.jetsonhacks.com/2017/03/24/serial-console-nvidia-jetson-tx2/[/url]

I find it is best to have a second gigabit network on my host PC in order to isolate my development environment from the internet (this isn’t necessary, but it is very convenient). Your PC can act as router, or you can get a router appliance. Extra package install currently requires wired ethernet between host PC and Jetson during this step (Jetson can use WiFi after package installs, host can use WiFi to internet…do not use WiFi from host to Jetson during install). Actual flash is over USB2 (the devel kits come with a correct micro-B USB cable).

The “nsight” edition of eclipse is designed to support nvcc and CUDA. I’m not sure what MSVC support might be around, but eclipse itself is available almost everywhere. Windows won’t be very convenient when it comes to picking up tools and packages and setting up environment. If you use your Ubuntu host PC then a lot is already taken care of via JetPack.

Myself, and most people, dual boot with Windows and Linux. This is fairly trivial, but do be sure you get a version of Ubuntu (such as 16.04) which is supported (16.04 is a long term support edition, the “LTS”).

Suggestion: On your host whoever you create the login for first will have numeric user ID 1000. This is the one you want to develop on most of the time because the “ubuntu” super user will also have ID 1000, but the name can differ if you want (it’ll still be numeric ID 1000 for the first user). I also add user “nvidia” to my host with user ID 1001 to match what Jetsons have. This simplifies file permissions.