IOT-DIN-IMX8PLUS: Yocto Linux: How-To Guide

From Compulab Mediawiki
Jump to: navigation, search

Overview

The example run-time Yocto Linux image for the CompuLab IOT-DIN-IMX8PLUS was generated with Kirkstone Yocto build. The image includes the needed drivers and utilities to operate the hardware components of the IOT-DIN-IMX8PLUS.

The default Kirkstone Yocto image includes many software packages. Among them:

  • Core system
  • SSH server and client
  • ConnMan
  • ModemManager
  • Bluez5 Bluetooth tools and daemons
  • SocketCAN
  • Minicom

Serial Console

IOT-DIN-IMX8PLUS provides a serial console on the front panel micro-USB DBG connector.

Connecting to a host PC

  1. Use a micro-USB cable to connect the Console connector to a USB port on your host PC.
  2. Make sure the CP2104 driver is available with your operating system, otherwise install CP2104 driver onto the host PC from https://www.silabs.com/documents/public/software/CP210x_Windows_Drivers_with_Serial_Enumeration.zip
  3. Identify the host PC interface and port number that will be used for communication with the device:
    • In most Linux PCs, the serial port will be denoted as one of the following (where n is a positive integer): /dev/ttyUSB0, /dev/ttyUSB1 ... /dev/ttyUSBn
    • In Windows PCs, the serial port usually will be denoted as one of the following (where n is a positive integer): COM1, COM2 ... COMn
  4. Start a terminal emulation program (such as PuTTY on Windows or minicom on Linux).
  5. In the port configuration section of the terminal emulation program select the port identified in previous step and set the following serial port parameters:
Baud Rate Data Bits Stop Bits Parity Flow Control
115200 8 1 none none

Connection and Login

This Yocto rootfs comes with an empty root password. No password is required for login.

To login into the Linux system, you may use a terminal emulator as described here, or connect through the network (ssh).

Admolition important.png The following examples assume root user.

Connectivity

IOT-DIN-IMX8PLUS Yocto Linux Image includes ConnMan is a command-line network manager designed for use with embedded devices and fast resolve times. It can be used for managing all type of network interfaces:

  1. Wired
  2. Wireless
  3. Cellular
  • Start ConnMan service prior to accessing network interfaces
root@iot-gate-imx8plus:~# systemctl start connman
  • Display supported technologies
root@iot-gate-imx8plus:~# connmanctl technologies
/net/connman/technology/cellular
  Name = Cellular
  Type = cellular
  Powered = True
  Connected = True
  Tethering = False
  TetheringFreq = 2412
/net/connman/technology/ethernet
  Name = Wired
  Type = ethernet
  Powered = False
  Connected = False
  Tethering = False
  TetheringFreq = 2412
/net/connman/technology/wifi
  Name = WiFi
  Type = wifi
  Powered = True
  Connected = False
  Tethering = False
  TetheringFreq = 2412
/net/connman/technology/bluetooth
  Name = Bluetooth
  Type = bluetooth
  Powered = False
  Connected = False
  Tethering = False
  TetheringFreq = 0

Ethernet

Enable/Disable Ethernet Interfaces

  • To enable Ethernet interfaces:
root@iot-gate-imx8plus:~# connmanctl enable ethernet
  • To disable Ethernet interfaces:
root@iot-gate-imx8plus:~# connmanctl disable ethernet

Enable/Disable Ethernet Connections

  • To display Ethernet Connections:
root@iot-gate-imx8plus:~# connmanctl services | grep ethernet
Example (both Ethernet ports are connected to a LAN):
root@iot-gate-imx8plus:~# connmanctl services | grep ethernet
*AR Wired                ethernet_0001c030d7c3_cable
*AR Wired                ethernet_0001c031ffe2_cable
  • To enable Ethernet interfaces:
root@iot-gate-imx8plus:~# connmanctl connect <ethernet service name>
  • To disable Ethernet interfaces:
root@iot-gate-imx8plus:~# connmanctl disconnect <ethernet service name>
Example:
root@iot-gate-imx8plus:~# connmanctl disconnect ethernet_0001c031ffe2_cable
Disconnected ethernet_0001c031ffe2_cable
root@iot-gate-imx8plus:~# connmanctl services | grep ethernet
*AR Wired                ethernet_0001c030d7c3_cable
*A  Wired                ethernet_0001c031ffe2_cable
root@iot-gate-imx8plus:~# connmanctl connect ethernet_0001c031ffe2_cable
Connected ethernet_0001c031ffe2_cable

Cellular Modem

Wvdial

Admolition note.png Recommended method

WvDial is a Point-to-Point Protocol dialer that automatically detects modem, and can log into almost any Internet Service Provider without a complicated configuration.

Loading kernel modules

Load Point-to-Point protocol (PPP) driver modules prior to dialing:

root@cl-som-imx7-sid:~# modprobe ppp_generic
root@cl-som-imx7-sid:~# modprobe ppp_async
root@cl-som-imx7-sid:~# modprobe ppp_synctty
root@cl-som-imx7-sid:~# modprobe bsd_comp
root@cl-som-imx7-sid:~# modprobe ppp_deflate

Dialing

  • Example configuration file /etc/wvdial.conf:
cat << eof > /etc/wvdial.conf
[Dialer cellular]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
ISDN = 0
Phone = *99#
Modem = /dev/ttyUSB3
Username = dummy
Password = dummy
Baud = 9600
eof
  • Connect cellular network
wvdial cellular &
  • Verify the connection by pinging to google:
sudo ping -c 5 dns.google
  • Expected result:
5 packets transmitted, 5 received, 0% packet loss, time 10ms
  • Disconnect cellular network
killall wvdial

ConnMan

Enable/Disable Cellular Interface

  • To enable Ethernet interfaces:
root@iot-gate-imx8plus:~# connmanctl enable cellular
  • To disable Ethernet interfaces:
root@iot-gate-imx8plus:~# connmanctl disable cellular

Enable/Disable Cellular Connections

  • To display Cellular Connections:
root@iot-gate-imx8plus:~# connmanctl services | grep cellular
Example:
root@iot-gate-imx8plus:~# connmanctl services | grep cellular
*AR 425007               cellular_425071043611161_context1
  • To connect Cellular network:
root@iot-gate-imx8plus:~# connmanctl connect <cellular service name>
  • To disconnect Cellular network:
root@iot-gate-imx8plus:~# connmanctl disconnect <cellular service name>

WiFi

Enable/Disable WiFi Interface

  • To enable WiFi interface:
root@iot-gate-imx8plus:~# connmanctl enable wifi
  • To disable WiFi interface:
root@iot-gate-imx8plus:~# connmanctl disable wifi

Network Scanning

  • Sample WiFi scanning:
root@iot-gate-imx8plus:~# connmanctl scan wifi
  • Display list of Access Points and Ad-Hoc cells in range
root@iot-gate-imx8plus:~# connmanctl services | grep wifi
Example:
   Compulab-Guest       wifi_8c1d96f18740_436f6d70756c61622d4775657374_managed_psk
   ...
   AP-Free              wifi_8c1d96f18740_6b77696b2d6d6f62_managed_none
Where a service name pattern is as shown below:
wifi_<hashlocal>_<hashremote>_managed_<encrption>

Connecting to Open Access Point

In the following example replace <hashlocal> and <hashremote> with the actual service parameters.

  • Connect wireless network:
root@iot-gate-imx8plus:~# connmanctl connect wifi_<hashlocal>_<hashremote>_managed_none
  • Disconnect wireless network:
root@iot-gate-imx8plus:~# connmanctl disconnect wifi_<hashlocal>_<hashremote>_managed_none

Connecting to Protected Access Point

For protected access points some information (like password) has to be provided to the ConnMan daemon.

The commands in this section show how to run connmanctl in interactive mode, it is required for running the agent command.

  • Start interactive mode:
root@iot-gate-imx8plus:~# connmanctl
  • Sample WiFi scanning (wait for scan completed):
connmanctl> scan wifi
  • Display a list of services:
connmanctl> services
   Compulab-Guest       wifi_8c1d96f18740_436f6d70756c61622d4775657374_managed_psk
   ...
   AP-Free              wifi_8c1d96f18740_6b77696b2d6d6f62_managed_none
  • Register the agent to handle user requests:
connmanctl> agent on
  • Connect to one of the protected services. Replace <hashlocal> and <hashremote> with the actual service parameters:
connmanctl> connect wifi_<hashlocal>_<hashremote>_managed_psk
Agent RequestInput wifi_<hashlocal>_<hashremote>_managed_psk
  Passphrase = [ Type=psk, Requirement=mandatory ]
Passphrase? 
Provide any information required by the daemon to complete the connection. The information requested may vary depending on the type of network.
  • Quit:
connmanctl> quit
  • Disconnect wireless network:
root@iot-gate-imx8plus:~# connmanctl disconnect wifi_<hashlocal>_<hashremote>_managed_psk
  • Connect wireless network again:
root@iot-gate-imx8plus:~# connmanctl connect wifi_<hashlocal>_<hashremote>_managed_psk

GPS

IOT-DIN-IMX8PLUS features an optional GPS interface implemented with the cellular modem module.

GPS antenna

A GPS antenna is required for GPS operation. GPS antenna is not included with IOT-DIN-IMX8PLUS. Any active GPS antenna with a male SMA connector can be used with IOT-DIN-IMX8PLUS.
GPS antenna should be attached to the AUX SMA connector on the gateway.

Admolition note.png GPS antenna should be positioned at least 1m away from the gateway

Using GPS

The cgps client can be used to display the GPS information.
The ModemManager can be used to check the modem status. For example, the following command shows the presence of the modem and the ID of its interfaces.

root@iot-gate-imx8plus:~# mmcli -m 0

The cgps client utility depends on the gpsd daemon (starts automatically after the initialization command is performed).

  • Initialization of the GPS interface:
root@iot-gate-imx8plus:~# sed -i "/^DEVICES=.*/c\DEVICES=\"/dev/ttyUSB1\"" /etc/default/gpsd
  • Enable the GPS with the following AT commands:
root@iot-gate-imx8plus:~# echo AT+QGPS= 1 | socat - /dev/ttyUSB2,crnl
  • A full power cycle is required before using GPS. Shut down the gateway, remove the main DC power for at least 20 sec, and restart.
  • Start the cgps client to display GPS information.

The synchronization process might take a few minutes.

root@iot-gate-imx8plus:~# cgps
┌───────────────────────────────────────────┐┌─────────────────────────────────┐
│    Time:       2022-05-04T14:13:30.000Z   ││PRN:   Elev:  Azim:  SNR:  Used: │
│    Latitude:    32.65985123 N             ││  71    29    123    22      Y   │
│    Longitude:   35.10027205 E             ││  85    27    047    22      Y   │
│    Altitude:   102.700 m                  ││                                 │
│    Speed:      0.00 kph                   ││                                 │
│    Heading:    128.7 deg (true)           ││                                 │
│    Climb:      6.00 m/min                 ││                                 │
│    Status:     3D FIX (53 secs)           ││                                 │
│    Longitude Err:   n/a                   ││                                 │
│    Latitude Err:    n/a                   ││                                 │
│    Altitude Err:    +/- 18 m              ││                                 │
│    Course Err:      n/a                   ││                                 │
│    Speed Err:       n/a                   ││                                 │
│    Time offset:     -3.682                ││                                 │
│    Grid Square:     KM72np                ││                                 │
└───────────────────────────────────────────┘└─────────────────────────────────┘
  • Disable the GPS with the following AT commands:
root@iot-gate-imx8plus:~# echo AT+QGPSEND | socat - /dev/ttyUSB2,crnl


Industrial Interfaces

IOT-DIN-IMX8PLUS implements following industrial interfaces on the 16-pin industrial terminal block:
1x RS232 (2-wire); 1x RS485 (half-duplex); 1x CAN 2.0B; 2x digital inputs; 2x digital outputs.

Please refer to Industrial I/O Connector pin-out for more details.

CAN

IOT-DIN-IMX8PLUS features one CAN 2.0B port implemented with i.MX8M Plus CAN controller.
CAN bus signals are routed to industrial I/O connector.

CAN interface configuration

  • Configure the CAN interface bit-rate to 1 Mbits/sec:
root@iot-gate-imx8plus:~# ip link set can0 type can bitrate 1000000
  • Enable the CAN interface:
root@iot-gate-imx8plus:~# ip link set can0 up

Send/Receive packets

Use cansend and candump utilities to send and receive packets via CAN interface.

  • Send standard CAN frame (on the first device):
root@iot-gate-imx8plus:~# cansend can0 111#1122334455667788
  • Send extended CAN frame (on the first device):
root@iot-gate-imx8plus:~# cansend can0 11111111#1122334455667788
  • CAN frames (extended mode) generator, random payload, interval between two successive flames 50 msec:
root@iot-gate-imx8plus:~# cangen -g 50 -e -D r -v can0
...
...
  • Dump all received data frames as well as error frames:
root@iot-gate-imx8plus:~# candump any,0:0,#FFFFFFFF
...
...

RS232

RS232 function is implemented with MAX3221 (or compatible) transceiver interfaced with i.MX8M Plus UART port.


Configuration and Access

RS232 interface can be accessed in Linux via ttyRS232 tty device.

RS485

RS485 function is implemented with MAX13488 (or compatible) transceiver interfaced with i.MX8M Plus UART port.

Configuration and Access

RS485 interface can be accessed in Linux via ttyRS485 tty device.

Modbus RS485

The following example demonstrates how to use RS485 module installed into industrial I/O slot A in a Modbus RS485 Network. IOTG-IMX8PLUS performs as a Master device and queries XY-MD02 temperature and humidity sensor.

Software installation

Download and install modpoll - a command line based Modbus master simulator and test utility.

root@iot-gate-imx8plus:~# wget https://www.modbusdriver.com/downloads/modpoll.tgz -P /tmp/
...
root@iot-gate-imx8plus:~# tar -xvf /tmp/modpoll.tgz -C /opt/
...

Device connection

  • Connect XY-MD02 sensor to appropriate Industrial I/O connector pins as below:
  • A+: XY-MD02 A+ to IOT-GATE-iMX8PLUS / SBC-IOT-IMX8PLUS P8-01
  • B-: XY-MD02 B- to IOT-GATE-iMX8PLUS / SBC-IOT-IMX8PLUS P8-03
--------------------                                  -------------------------
|                  |                                  |                       |
|                  *--(+)---< <------------- 5V-30V   |     IOTG-IMX8PLUS     |
|                  |                                  |   (SBC-IOT-IMX8PLUS)  |
|                  *--(-)---< <-------------- GND     |------  ------------   |
| XY-MD02 (RS485)  |                                  |     |==| IE-RS485 |   |
|                  *--(A+)--< <---...---> >---(1)---*-|     |  ------------   |
|                  |                                  | P8  |     Slot A      |
|                  *--(B-)--< <---...---> >---(3)---*-|     |                 |
|                  |                                  |------                 |
--------------------                                  ------------------------- 

Read data

  • Read temperature once:
root@iot-gate-imx8plus:~# /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 1 -r 2 -1 /dev/ttyRS485_A
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC4
Slave configuration...: address = 1, start reference = 2, count = 1
Communication.........: /dev/ttyRS485_A, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table

-- Polling slave...
[2]: 250
  • Poll temperature:
root@iot-gate-imx8plus:~# /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 1 -r 2 /dev/ttyRS485_A
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC4
Slave configuration...: address = 1, start reference = 2, count = 1
Communication.........: /dev/ttyRS485_A, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table

-- Polling slave... (Ctrl-C to stop)
[2]: 254
-- Polling slave... (Ctrl-C to stop)
[2]: 254
-- Polling slave... (Ctrl-C to stop)
[2]: 254
...
  • Read humidity once:
root@iot-gate-imx8plus:~# /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 1 -r 3 -1 /dev/ttyRS485_A
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC4
Slave configuration...: address = 1, start reference = 3, count = 1
Communication.........: /dev/ttyRS485_A, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table

-- Polling slave...
[3]: 515
  • Poll humidity:
root@iot-gate-imx8plus:~# /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 1 -r 3 /dev/ttyRS485_A
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC4
Slave configuration...: address = 1, start reference = 3, count = 1
Communication.........: /dev/ttyRS485_A, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table

-- Polling slave... (Ctrl-C to stop)
[3]: 894
-- Polling slave... (Ctrl-C to stop)
[3]: 895
-- Polling slave... (Ctrl-C to stop)
[3]: 896
...
  • Read temperature & humidity once:
root@iot-gate-imx8plus:~# /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 2 -r 2 -1 /dev/ttyRS485_A
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC4
Slave configuration...: address = 1, start reference = 2, count = 2
Communication.........: /dev/ttyRS485_A, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table

-- Polling slave...
[2]: 263
[3]: 606
  • Poll temperature & humidity:
root@iot-gate-imx8plus:~# /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 3 -c 2 -r 2 /dev/ttyRS485_A
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC4
Slave configuration...: address = 1, start reference = 2, count = 2
Communication.........: /dev/ttyRS485_A, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, input register table

-- Polling slave... (Ctrl-C to stop)
[2]: 263
[3]: 545
-- Polling slave... (Ctrl-C to stop)
[2]: 263
[3]: 543
-- Polling slave... (Ctrl-C to stop)
[2]: 263
[3]: 542
...
  • Read slave address, baudrate, temperature & humidity corrections:
root@iot-gate-imx8plus:~# /opt/modpoll/arm-linux-gnueabihf/modpoll -b 9600 -p none -t 4 -c 4 -r 258 -1 /dev/ttyRS485_A
modpoll 3.10 - FieldTalk(tm) Modbus(R) Master Simulator
Copyright (c) 2002-2021 proconX Pty Ltd
Visit https://www.modbusdriver.com for Modbus libraries and tools.

Protocol configuration: Modbus RTU, FC3
Slave configuration...: address = 1, start reference = 258, count = 4
Communication.........: /dev/ttyRS485_A, 9600, 8, 1, none, t/o 1.00 s, poll rate 1000 ms
Data type.............: 16-bit register, output (holding) register table

-- Polling slave...
[258]: 1
[259]: 9600
[260]: 0
[261]: 0

Digital I/O

Digital I/O module features 4 digital inputs and 4 digital outputs and can be installed into slot D. Four digital inputs are implemented with the CLT3-4B digital termination following EN 61131-2. Four digital outputs are implemented with the VNI4140K solid-state relay following EN 61131-2.

Admolition note.png Digital I/O module requires an external voltage supply up to 24V to be properly connected. Please refer to Industrial I/O Connector pin-out for more details.

Configuration and Access

Use iotg-imx8plus-dio utility to access digital inputs and outputs.

The example below shows how to access Digital inputs and outputs.

  • Drive OUT2 pin HI:
root@iot-gate-imx8plus:~# iotg-imx8plus-dio -o 2 1
  • Read IN3 pin state (LO):
root@iot-gate-imx8plus:~# iotg-imx8plus-dio -i 3
0

RTC

IOT-DIN-IMX8PLUS RTC is implemented with the AM1805 real-time clock (RTC) chip.
Back-up battery keeps the RTC running to maintain clock and time information whenever the main power supply is not present.

Accessing and setting the RTC

  • To access the RTC time and date run:
compulab@iot-gate-imx8plus:~$ sudo hwclock
2022-08-04 12:38:10.577874+00:00
  • To set the date and write it into the RTC do the following:
compulab@iot-gate-imx8plus:~$ sudo date -s "31 Dec 2021 10:00:00"
Fri Dec 31 10:00:00 IST 2021
compulab@iot-gate-imx8plus:~$ sudo hwclock -w
compulab@iot-gate-imx8plus:~$ sudo hwclock 
2021-12-31 10:00:08.317403+02:00

Watchdog

IOT-DIN-IMX8PLUS watchdog function is implemented with the i.MX8M Plus watchdog.
By default, the watchdog is not configured.

compulab@iot-gate-imx8plus:~$ systemctl show | grep RuntimeWatchdog
RuntimeWatchdogUSec=0

The value RuntimeWatchdogUSec=0 means watchdog logic is disabled: no watchdog device is opened, configured, or pinged

Watchdog configuration

  • Edit /etc/systemd/system.conf file to configure watchdog related parameters, in particular RuntimeWatchdogSec and ShutdownWatchdogSec.
RuntimeWatchdogSec - specifies the watchdog timeout for runtime services, meaning services that are actively running during normal system operation. The value is in seconds and should be set to a positive integer.
ShutdownWatchdogSec - specifies the watchdog timeout for the shutdown process, insuring the system doesn't hang indefinitely during the shutdown. The value is in seconds and should be set to a positive integer.
  • Reboot the device
  • Verify watchdog configuration
compulab@iot-gate-imx8plus:~$ systemctl show | grep RuntimeWatchdog
RuntimeWatchdogUSec=10s

Watchdog testing

  • Run the following command to simulate kernel panic:
compulab@iot-gate-imx8plus:~$ sudo su
root@iot-gate-imx8plus:~# echo "c" > /proc/sysrq-trigger
  • As a result, the watchdog is not fed and the system reboots after 10 sec.

LEDs

IOT-DIN-IMX8PLUS features two user Bi-Color (Red + Green) LEDs found on front panel.
LEDs are controlled via GPIO pins and can be accessed via sysfs interface.

  • LEDs are referred to as Green_1, Red_1, Green_2 and Red_2
  • Choose a LED (LED2 Red in this example):
root@iot-gate-imx8plus:~# LED=Red_2
  • Turn the LED ON
root@iot-gate-imx8plus:~# echo "1" | tee -a /sys/class/leds/${LED}/brightness
  • Turn the LED OFF
root@iot-gate-imx8plus:~# echo "0" | tee -a /sys/class/leds/${LED}/brightness
  • Set LED's trigger
root@iot-gate-imx8plus:~# echo "heartbeat" | tee -a /sys/class/leds/${LED}/trigger

TPM

IOT-DIN-IMX8PLUS features TPM 2.0 implemented with Infineon SLB9670.

compulab@iot-gate-imx8plus:~$ modprobe tpm_tis_spi
  • Make sure that the tpm package is installed:
compulab@iot-gate-imx8plus:~$ dpkg -l eltt2 &>/dev/null && echo "Installed" || echo "Not installed" 
If Installed, then goto the next step.
  • Validate basic functionality
compulab@iot-gate-imx8plus:~$ eltt2 -t full && eltt2 -T