Running iSYSTEM tools on Linux

These instructions describe installation of iSYSTEM tools on Ubuntu. It was tested with Ubuntu and KUbuntu 16.04, and 17.04, with Wine 2.0.3, but should also work with newer versions. Other distributions should also be able to run iSYSTEM tools, as long as Wine is running there, but installation steps may differ.

winIDEA must be installed as a base for all other iSYSTEM tools, while other tools do not depend on each other. Install them according to your needs.

Since Dec 2017 (winIDEA 9.17.26) only 64-bit version is supported.

If you'd like to try iSYSTEM tools without installation, you can download Virtual Box virtual machine with complete set of tools for embedded development preinstalled.

1. Prerequisites

Ubuntu 17.10 and later

Wine 2.0.2 or later si required. On Ubuntu 17.10 install it with:

  sudo apt update
  sudo apt install wine64 winetricks
  winetricks vcrun2015

Ubuntu 17.04 and earlier

Earlier versions of Ubuntu repositories contain older versions of Wine (Ubuntu 17.04 has Wine 1.8.7 in repository). Use instructions on Wine official site to install it: https://wiki.winehq.org/Ubuntu

Summary:

  sudo apt-get update
  wget -nc https://dl.winehq.org/wine-builds/Release.key
  sudo apt-key add Release.key
  sudo apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/
  sudo apt-get update
  sudo apt-get install --install-recommends winehq-stable

Then install and run winetricks:

  mkdir ~/bin
  cd ~/bin
  wget  https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
  chmod +x winetricks

  sudo apt-get install cabextract   # needed by winetricks
  winetricks vcrun2015

2. Install winIDEA

Perform these steps for each new version of winIDEA.

  1. Create folder <winIDEA-install-dir>, where winIDEA will be installed. It is recommended to install it under ~/bin. Do not unpack it into WINEPREFIX directory, because SDKs expect absolute directories, not Wine relative directories.

    mkdir -p <winIDEA-install-dir>
    cd <winIDEA-install-dir>
    

    for example:

    mkdir -p ~/bin/winIDEA9_17_39  &&  cd ~/bin/winIDEA9_17_39
    
  2. Download and run winIDEA installation script:

    wget http://www.isystem.com/downloads/winIDEA/setup/installWinIDEA.sh  &&  chmod +x installWinIDEA.sh
    

    Run installer:

    sudo ./installWinIDEA.sh
    

    The script will ask you some questions to get information needed to customize installation.

  3. Run winIDEA. If you've created link during installation in /usr/local/bin folder, type:

    winidea
    

    Otherwise:

    <winIDEA-install-dir>/winidea.sh
    

3. Install isystem.connect Python SDK

Python SDK is available on PyPi as isystem.connect. It is recommended to create a virtual environment, and install the SDK there.

Troubleshooting

If you get an error:

    ImportError: libxerces-c-3.1.so: cannot open shared object file: No such file or directory

it means that you have to install xerces:

    sudo apt-get install libxerces-c3.1

Ubuntu 18.04

Since xerces 3.1 is no longer available (xerces 3.2 is distributed now), you have to download and install is manually:

    mkdir xerces31; cd xerces31
    wget http://archive.apache.org/dist/xerces/c/3/sources/xerces-c-3.1.4.tar.gz
    tar xvf xerces-c-3.1.4.tar.gz
    cd xerces-c-3.1.4
    ./configure
    make
    sudo make install
    cd ~/bin/embeddedPy/lib64/python3.6/site-packages/isystem  # dir with your venv
    ln -s /usr/local/lib/libxerces-c-3.1.so

4. Install isystem.connect Java SDK

Download and unzip Java SDK from iSYSTEM web page, menu Downloads. The zip file contains documentation, sample project and libraries (jar file, DLL for Windows and SO for Linux).

Copy files in lib directory to your application, add jar file to classpath, and load native library with the following code:

    /**
     * Returns directory of jar file containing this class. Native libraries (dll, so)
     * are expected in this directory.
     */
    private static String getJarFileDir() throws URISyntaxException {
        Path jarPath = Paths.get(CDebugFacade.class.getProtectionDomain().getCodeSource().getLocation().toURI());
        return jarPath.getParent().toAbsolutePath().toString();
    }


    public static void main(String[] args) throws Exception
    {
        String os = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH);
        boolean isWindows = os.startsWith("windows");

        String architecture = System.getProperty("sun.arch.data.model");

        String libraryName = getJarFileDir();

        if (architecture.equals("64")) {
            if (isWindows) {
                libraryName += "/IConnectJNIx64.dll";
            } else {
                libraryName += "/libiconnectJava.so";
            }
        } else if (architecture.equals("32")) {
            if (isWindows) {
                libraryName = "/IConnectJNI.dll";
            } else {
                throw new IllegalStateException("32 Linux is currently not supported. Please contact iSYSTEM for more info.");
            }
        } else {
            throw new IllegalStateException("Unknown 32/64 bit architecture:" + architecture);
        }

        try {
            System.out.println("java.library.path = " + System.getProperty("java.library.path"));
            System.out.println("Loading native library: " + libraryName);
            System.load(libraryName);
        } catch (Throwable thr) {
            System.err.println("Error loading library: " + libraryName);
            System.err.println("Error: " + thr.toString());
            thr.printStackTrace();
            return;
        }

        System.out.println("isystem.connect demo for Java version: " + 
                           si.isystem.connect.connectJNI.getModuleVersion());
    }

5. Install testIDEA

Download testIDEA_xx_xx_xx.tar.gz from iSYSTEM web page and unpack it to directory of your choice. Start executable:

    iSystem_testIDEA

6. Install iSYSTEM Eclipse Debug plug-in

Use normal Eclipse plug-in installation procedure. URL of the update page can be found on iSYSTEM web page.

7. Additional system configuration

Wine sets winebrowser as default application for XML files, which can not show testIDEA reports properly. Use Dolphin to configure Firefox as the default application for XML files, as shown on images below:

Context menu

Configuration dialog


Troubleshooting

  1. Folder with winIDEA executable (winIDEA.exe) must be in environment variable WINEDLLPATH (this variable is normally set in script winidea.sh which is created during installation). Example of manual run:

    cd <winIDEA-install-dir>
    export WINEDLLPATH=\`pwd\` # Use backquotes!
    
  2. Udev rules must be set to have access to iSystem USB devices. Make sure the installation script generated file /etc/udev/rules.d/isystem-itag.rules with contents:

    ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="06f9", OWNER="<yourUserName>"
    

    Then detach/attach iSystem device, so that the rule gets applied.

  3. If you run winIDEA as:

    cd <winIDEA-install-dir>
    ./winidea.sh
    

    and the message Permission denied appears in console, something in the previous step was wrong (do not forget to write the right user name).

  4. Check that winusb.dll is present in winIDEA installation directory.

  5. Enable logging by defining env. var. ISYSTEM_LIBUSB_LOGGING:

    export ISYSTEM_LIBUSB_LOGGING=1
    

    In the folder where winIDEA was started you'll find file usb.log. Please send it to iSystem support.

  6. If there is no Communication tab in the Hardware dialog, then icusbcomm.dll.so was not found. Please check presence of the library in winIDEA folder and setting of WINEDLLPATH (see above for details).

  7. In winIDEA menu open Hardware | Hardware | tab Communication and select your iSYSTEM device in USB combo box.

    If iSystem device is turned on and attached to your computer, but it does not show up in drop-down list, them most likely udev rules are not set properly. First make sure that the device is recognized by the system:

    lsusb
    

    If you can see the device in this output, but not in winIDEA, check udev rules as described above, and read on.

    Notes on device ownership management

    Dynamic device management is done by udev. See man udev and https://www.linux.com/news/hardware/peripherals/180950-udev for description.

    In a nutshell: Create a file "/etc/udev/rules.d/isystem-usb.rules". The name is arbitrary, because nothing will override this setting), but the extension 'rules' is mandatory. File contents:

    ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="06f9", OWNER="<userName>"
    

    Explanation: All items must be on a single line. '==' means that attribute sent by the kernel to udev must match the value, '=' means the key is set to a value. In our case, when device is 'add'-ed to the subsystem 'usb' and vendor and id match the given values, owner of the device is set to the given user name. If we need a node in the /dev folder, we can also specify a name:

    ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="06f9", ATTR{idProduct}=="d001", OWNER="<userName>", NAME="iTagSTM32"
    

    However, the owner of the original node in /dev/bus/usb is not changed.

    The device must be unplugged/plugged into system for the rule to get applied - no system restart is needed.

SDKs/testIDEA/Eclipse Debug plug-in

  1. Some functions in isystem.connect (for example ConnectionMgr::connectMRU() ) start winIDEA if no running instance is found. To locate most recently run winIDEA location, it reads winIDEAVersion.log, which is located in Wine user's home directory. By default this location is /home/<username>/.wine/drive_c/users/<userName>/Application Data, but it may be changed by WINEPREFIX or Wine configuration. While isystem.connect tries to do its best to find this location, it may not succeed in all cases. If there are problems starting winIDEA, try do define environment variable ISYSTEM_APPDATA, to point to Wine's "Application Data" directory, for example:

    ISYSTEM_APPDATA=/home/myusername/.wine/drive_c/users/myusername/Application\ Data