1.  XCAP Application Note — Installation: Boundary Devices/ARM NITROGEN6/imx6 — 1 May 2018

This application note outlines the installation of XCAP on the Boundary Devices NITROGEN6 with ARM imx6 processor running Linux. Changes to the NITROGEN6 and its Linux can be expected; this application note was written for use with the NITROGEN6 and Ubuntu Linux released circa November 2017.

1. Update Linux. As distributed, the NITROGEN6 has insufficient ‘disk’ space (actually a 4 GB SD memory card) to install and run XCAP. Use ‘gparted’ to grow the 4GB disk image to size of new SD card:

    apt install gparted
    gparted-pkexec (will prompt for su password)

Update the distribution image:

    sudo apt update
    sudo apt upgrade
    sync
    sudo reboot

See Boundary Devices documentation for more details on use of these commands.

Note: If intending to only use XCLIB based applications, installation of XCAP and expansion of ‘disk’ space is not required. Configuring one NITROGEN6 to run XCAP, or running XCAP and the PIXCI(R) frame grabber on a i386 system, will be helpful for creating a video setup / configuration file for use with XCLIB.

2. Install JRE. Unlike XCAP for x86 and x86−64 platforms, XCAP for NITROGEN6 does not include a Java Runtime Environment. Install the default Java JRE from the Linux distribution:

    apt-get update
    apt-get -y install default-jre

3. Install XCAP. XCAP for NITROGEN6 is not provided on the PIXCI(R) CD, and only available via download. Download xcaplnx_armv7l.bin from www.epixinc.com/support/files.php. Do:

    chmod 755 xcaplnx_armv7l.bin
    ./xcaplnx_armv7l.bin

Note that only XCAP-Lite is supported for the NITROGEN6 - intended as a testing and configuration tool to assist in for developing application programs using the XCLIB C/C++ library. XCAP-Ltd and XCAP-Std are currently not supported for the NITROGEN6.

Some versions of the JRE do not accept a ‘-client’ option. It may be necessary to edit /usr/local/xcap/xcaplnx and /usr/local/xcap/program/xcaplnx and remove the ‘-client’ option.

Problems have been reported with OpenJDK V1.7, resulting in:

    Internal Error (os_linux_zero.cpp:285)
    fatal error: caught unhandled signal 11

Adding the ‘-jamvm’ option has been suggested by the Java community to remedy the problem; edit /usr/local/xcap/xcaplnx and /usr/local/xcap/program/xcaplnx and add the ‘-jamvm’ option (after the ‘java’ command). However, some distributions of the default JRE do not include the ‘-jamvm’.

Alternately, install and use the Oracle JVM.

4. Install PIXCI(R) driver. One or more precompiled PIXCI(R) drivers are provided with XCAP. If one of these drivers match the current kernel, use XCAP’s:

    PIXCI(R)
    PIXCI(R) Open/Close
    Close (if open)
    Driver Assistant
    Install PIXCI(R) Driver
    Install Precompiled Driver
    Apply

Alternately, the PIXCI(R) driver can be compiled so as to match the current kernel. Use XCAP’s:

    PIXCI(R)
    PIXCI(R) Open/Close
    Close (if open)
    Driver Assistant
    Install PIXCI(R) Driver
    Compile & Install Driver
    Apply

Alternately, as some Linux releases discourage running graphic programs as root, compile and install the driver with:

    cd /usr/local/xcap/drivers/armv7l/src_$(uname -r)
    sudo make
    cd ../..
    sudo sh pixci.sh install . armv7l/src_$(uname -r)

where ‘$(uname -r)’ is replaced with the current kernel version.

5. Configure NITROGEN6 memory and interrupts. Unlike Linux for x86 and x86−64 systems providing a single, large, pool of memory, the Linux for NITROGEN6 partitions memory into various pools each with a designated purpose. The PIXCI(R) driver allocates frame buffer memory from the kernel’s ‘coherent-pool’ (i.e. DMA pool). The default NITROGEN6 coherent-pool is ?? KB and allows, approximately, 256(?) KB of frame buffer memory. Also, the NITROGEN6 must be configured to accept use of non-MSI PCI interrupts.

Edit /6x_bootscript.txt and add, for example:

    coherent-pool=8M

to the kernel command line so as to allow additional frame buffer memory. Also add:

    pci=nomsi

to the same kernel command line to allow non-MSI PCI interrupts. Note: The proper line of /6x_bootscript.txt might be found by searching for ‘vmalloc=’. Note: The long kernel command line may be displayed by the editor as split into several lines; but it must be edited as a single line without line break.

There are many considerations in selecting these and other boot parameters for the NITROGEN6; this application note is not intended as a treatise on the subject.

Compile the /6x_bootscript.txt by browsing git.boundarydevices.com/bootscript.php, copy and paste the /6x_bootscript.txt as the ‘u-boot commands’, click ‘Compile’, and copy result to /6x_bootscript. Or, for newer systems, run:

    sudo apt-get install u-boot-tools
    mkimage -A arm -O linux -T script -C none -n "boot script" \
        -a 0 -e 0 -d 6x_bootscript.txt 6x_bootscript

See https://boundarydevices.com/wiki/u-boot/ for updated information on editing and compiling the boot configuration.

6. Configure frame buffer memory.

The amount of frame buffer memory available for image capture is also determined by the amount of memory requested by the PIXCI(R) driver. This is set in the same manner as for x86 or x86−64 systems; typically using XCAP (run as root):

    PIXCI(R)
    PIXCI(R) Open/Close
    Close (if open)
    Driver Assistant
    Set Frame Buffer Memory Size
    ...

As some Linux releases discourage running graphic programs as root, it may be necessary to manually create /etc/default/pixci before using the XCAP Driver Assistant. Do:

    sudo echo ""  >> /etc/default/pixci
    sudo chown 777   /etc/default/pixci

and then run XCAP as non-root.

XCAP’s ‘Forceful Memory Allocation’ option, used with the memory architecture of x86 and x86−64 systems, is not applicable to the NITROGEN6.

7. Reboot NITROGEN6.

8. If using the XCLIB or XCLIB+PXIPL C/C++ library, download: xclib_armv7l.bin or xclip_armv7l.bin from www.epixinc.com/support/files.php. Install with:

    chmod 755 xclib_armv7l.bin
    ./xclib_armv7l.bin

or

    chmod 755 xclip_armv7l.bin
    ./xclip_armv7l.bin