Working with Basler GigE cameras and the Pylon drivers

My Basler GigE camera is connected to a Jetson TX1 (L4T R24.2.1) with an Ethernet link. In order to read images from the camera, it is necessary to install the Pylon drivers, available from Basler’s website. These drivers are only available for ARM 32bit architecture.

This problem has already been brought up in this topic, but I struggle to understand the basic concepts around it (cross-compilers, etc.).

In particular I have the following questions:

  1. If Pylon is only available in 32bit, can it ever run on the TX1? (I understand, Yes but it's complicated)
  2. Do I have to change something about my L4T installation? (I read about recompiling the kernel... Not sure exactly what it means and how much work that represent...)
  3. Do I have to use another compiler instead of g++? (I read about the linaro cross compiler. does it work exactly like g++?)
  4. With such a compiler, what exactly can I do? Compile c++ code and link with 32 bit libraries, like the Pylon drivers?
  5. Say I want to use other software, like OpenCV 3.2, which I built from sources for the TX1. Do I need to rebuild such library in 32 bit so as to be compatible with Pylon?
  6. Same question with Python. In particular I would like to use a python-pylon interface like this one, but the install does not work as Cython is looking for 64 bit Pylon libs...

Any help appreciated!

The initial JTX1 L4T releases were 64-bit kernel space, but 32-bit user space. These older distributions can run 32-bit applications, but not 64-bit applications. There was a 32-bit sample rootfs which was available for about a week for R24.1, and then the 64-bit user space came out. So the 32-bit user space sample rootfs under R24.1 would possibly work with 32-bit applications you have in mind (keep in mind compatibility mode has big performance hits).

On a desktop computer the gcc which comes with the system typically is actually two tools…a 64-bit x86_64 compiler and a 32-bit i686 compiler. In the user space side of a desktop system there is a linker and support libraries for 32-bit, plus a linker and user space libraries for 64-bit. This makes it fairly simple to add and run applications on the desktop which are either legacy i686 or x86_64.

In theory (I say this because there is little or no support for this in the ARM world) you could install both 32-bit and 64-bit user space linkers and support libraries properly in different locations and have both supported. I have not succeeded at doing this, the tools for ARM were not developed from the start for integration the way desktop systems were built for this from the start.

Ive had great success using the Aravis (see Github) device drivers on the TX1 with ptGrey Blackfly cameras. I’ve posed my code to this project see (File gvStream.c).

I did have issues with the on-board NICso switched to PCIe Intel nic and its works great running 1280x720@30Htz (RGB8) camera.

ptGrey dont support ARM either so finding Aravis was great. Nice API and they have a viewer if you want to do a quick test to see if your camera will work.