Technologic Systems TS-7100 Series User manual

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 1/44
TS-7100-Z
Product Page
(http://www.embeddedarm.com/products/board-
detail.php?product=TS-7100)
Documentation
Schematic
(https://www.embeddedarm.com/documentation/ts-
7100-schematic.pdf)
Mechanical Drawing
(https://www.embeddedarm.com/documentation/ts-
7100-mechanical.pdf)
FTP Path (http://ftp.embeddedarm.com/ftp/ts-arm-
sbc/ts-7100-linux/)
Processor
NXP i.MX6UL
528MHz or 696MHz
i.MX6UL Product Page
(http://www.nxp.com/products/microcontrollers-
and-processors/arm-processors/i.mx-applications-
processors/i.mx-6-processors/i.mx6qp/i.mx-
6ultralite-processor-low-power-secure-arm-cortex-
a7-core:i.MX6UL?)
CPU Documentation
(http://www.nxp.com/products/microcontrollers-
and-processors/arm-processors/i.mx-applications-
processors/i.mx-6-processors/i.mx6qp/i.mx-
6ultralite-processor-low-power-secure-arm-cortex-
a7-core:i.MX6UL?
fpsp=1&tab=Documentation_Tab#)
TS-7100
From Technologic Systems Manuals
Note: This manual is incomplete at this time and is subject to change without
warning while the TS-7100 is in Engineering Sampling phase.
Contents
1 About This Manual
2 Overview
3 Getting Started
3.1 Connect USB Console
3.2 Powering Up
3.3 First Linux Boot
4 U-Boot
5 Debian Stretch(9)
5.1 Getting Started
5.2 Debian Networking
5.2.1 Debian Wi-Fi Client
5.2.2 Debian Wi-Fi Access Point
5.2.3 Cellular Data Network
5.2.3.1 NimbeLink Skywire
modem
5.3 Debian Application Development
5.3.1 Debian Stretch Cross
Compiling
5.4 Debian Installing New Software
5.5 Debian Setting up SSH
5.6 Debian Starting Automatically
6 Buildroot Configuration
6.1 Installing Buildroot
6.2 Building Buildroot
6.3 Configuring the Network
6.4 Installing New Software
6.5 Setting up SSH
6.6 Starting Automatically
7 Backup / Restore
7.1 Creating A Backup / Production Image
7.2 Restoring Stock / Backup / Production
Image
7.2.1 Booted from USB / NFS
8 Compile the Kernel
9 Production Mechanism
10 Features
10.1 ADC
10.1.1 0-50 V
10.1.2 0-12 V

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 2/44
10.1.3 4-20 mA
10.2 Battery Backed RTC
10.3 Bluetooth
10.4 CAN
10.5 CPU
10.6 GPIO
10.6.1 Digital Inputs
10.6.2 Digital Outputs
10.6.2.1 Digital Output Over-
Current Breaker
10.7 eMMC Interface
10.8 Ethernet
10.9 FPGA
10.9.1 FPGA Registers
10.9.1.1 FPGA 16550
10.9.1.2 FPGA SPI
10.9.1.3 FPGA Syscon
10.9.1.4 FPGA IRQs
10.10 FRAM
10.11 I2C
10.12 Interrupts
10.13 LCD
10.13.1 Splash Screen
10.14 LEDs
10.15 Relays
10.16 Sleep
10.16.1 Suspend-to-RAM
10.17 SPI
10.18 TS-SILO Supercapacitors
10.19 UARTs
10.19.1 RS-485
10.20 USB Controller
10.21 Watchdog
10.22 WiFi
11 Specifications
11.1 Power Specifications
11.2 Power Consumption
11.2.1 TS-SILO SuperCaps
12 External Interfaces
12.1 CN32 Terminal Block
12.2 Ethernet Ports
12.3 CN16 XBee Socket
12.4 Power Terminal Block
12.5 USB Ports
13 Revisions and Changes
13.1 FPGA Changelog
13.2 Microcontroller Changelog
13.3 PCB Revisions
13.4 Software Images
13.4.1 Debian Changelog

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 3/44
13.5 U-Boot
14 Product Notes
14.1 FCC Advisory
14.2 Limited Warranty
1 About This Manual
The TS-7100 series of products all incorporate two PCBs connected by a high density connector. One of these
PCBs contains the CPU and some basic peripherals. The second PCB is considered to be the "I/O board" which
breaks out GPIO, networking, as well as other peripherals that can vary from product to product. Every product in
the TS-7100 series uses the same CPU board and offers the same base features. All of the TS-7100 series products
will have a full product number, for example "TS-7100-Z" is the first product in this line. This manual and all TS-
7100 series product manuals will both use "TS-7100" as well as the full product number.
When the "TS-7100" name is used, this indicates that this feature is common to all products in the series. For
example, soldered down eMMC flash is soldered to the CPU board. When the full product number is used, it is
used to indicate that the feature or peripheral being discussed is available on that product, but not necessarily every
product in the TS-7100 series.
As always, if there are any questions or concerns, please reach out to Technologic Systems' support team
(https://www.embeddedarm.com/support/) .
2 Overview
The TS-7100 is a small embedded CPU module with an NXP i.MX6UL 696 MHz CPU with 512 MB DDR3 RAM.
The CPU module provides soldered down eMMC flash, non-volatile FRAM for 2 KiB of storage, dual Ethernet
PHYs, support for a 16-bit 240x360 LCD display with resistive touch, and many more.
Configuration flexibility can be achieved in the TS-7100's mated I/O board. The I/O board provides additional
peripherals, industrial rated I/O and connectors, Ethernet, CAN, UARTs, WiFi and Bluetooth, etc. to expand
functionality and interact with the real world.
The TS-7100-Z is the TS-7100 mated with the TS-7100-Z I/O board. The TS-7100-Z offers a DIN rail mountable
enclosure with LCD and touch screen display, as well as wireless connectivity and industrial I/O. Peripherals
available on the TS-7100-Z board include: soldered down WiFi with built in Bluetooth, our TS-SILO
supercapacitor technology for safe shutdown upon power loss, dual 10/100 Ethernet ports, two relays, dual USB
host ports, 30 VDC high-current low-side switch outputs or digital inputs, dedicated 30 VDC digital inputs,
dedicated high-side switch output, 0-12 V or 4-20 mA ADC inputs, with all I/O protected by a hardware over-
voltage or over-current breaker system, and a 8 V to 48 V DC input range.
3 Getting Started

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 4/44
A Linux PC is recommended for development, and will be assumed for this documentation. For users in Windows
or OSX we recommend virtualizing a Linux PC. Most of our platforms run Debian and if there is no personal
distribution preference this is what we recommend for ease of use.
Debian.org (https://www.debian.org/)
Virtualization
Virtualbox (Windows or OSX hosts) (https://www.virtualbox.org/wiki/Downloads)
VMware Player (https://www.vmware.com/products/player)
Parallels (OSX) (http://www.parallels.com/)
Suggested Linux Distributions
Debian (https://www.debian.org/distrib/)
Ubuntu (http://www.ubuntu.com/desktop)
It may be possible to develop using a Windows or OSX system, but this is not supported. Development will include
accessing drives formatted for Linux and often Linux based tools.
3.1 Connect USB Console
The TS-7100 includes a USB Micro B device port; this uses a 8051 based microcontroller to create a
debug/console serial interface on a host PC. The serial console is provided through this port at 115200 baud, 8n1,
with no flow control. The USB serial device is a CP210x Virtual COM Port. Most operating systems have built-in
support for this device. If not however, drivers are available for the device here
(https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers) .
Console from Linux
There are many serial terminal applications for Linux, three common used applications are 'picocom', 'screen', and
'minicom'. These examples demonstrate all three applications and assume that the serial device is "/dev/ttyUSB0"
which is common for USB adapters. Be sure to replace the serial device string with that of the device on your
workstation.
'picocom' is a very small and simple client.
picocom -b 115200 /dev/ttyUSB0
'screen' is a terminal multiplexer which happens to have serial support.
screen /dev/ttyUSB0 115200
Or a very commonly used client is 'minicom' which is quite powerful but requires some setup:
minicom -s

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 5/44
Navigate to 'serial port setup'
Type "a" and change location of serial device to '/dev/ttyUSB0' then hit "enter"
If needed, modify the settings to match this and hit "esc" when done:
E - Bps/Par/Bits : 115200 8N1
F - Hardware Flow Control: No
G - Software Flow Control: No
Navigate to 'Save setup as dfl', hit "enter", and then "esc"
Console from Windows
Putty is a small simple client available for download here (http://www.chiark.greenend.org.uk/~sgtatham/putty/) .
Open up Device Manager to determine your console port. See the putty configuration image for more details.

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 7/44
3.2 Powering Up
WARNING:
Be sure to take appropriate Electrostatic Discharge (ESD)
precautions. Disconnect the power source before moving,
cabling, or performing any set up procedures. Inappropriate
handling may cause damage to the board.
Power input to the TS-7100 is supplied via the power input connector, refer to that section for information on
voltage ranges for this device.
Once power is applied to the whole device, there will be output on the debug console port. The following section of
the manual provides information on getting the serial console connected.
U-Boot 2016.03-00408-gd450758c91 (Oct 10 2019 - 11:59:08 -0700)
CPU: Freescale i.MX6UL rev1.2 at 396 MHz
Reset cause: POR
I2C: ready
DRAM: 512 MiB
MMC: FSL_SDHC: 0
Net: FEC0 [PRIME]
Warning: FEC0 (eth0) using random MAC address - 72:12:64:ca:3e:4a
Press Ctrl+C to abort autoboot in 1 second(s)
starting USB...
USB0: Port not available.
USB1: USB EHCI 1.00
scanning bus 1 for devices... 1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found
No storage devices, perhaps not 'usb start'ed..?
Booting from the eMMC ...
** File not found /boot/boot.ub **
31526 bytes read in 103 ms (298.8 KiB/s)
5253608 bytes read in 354 ms (14.2 MiB/s)
NO CHRG jumper is set, not waiting
Kernel image @ 0x80800000 [ 0x000000 - 0x500220 ]
## Flattened Device Tree blob at 83000000
Booting using the fdt blob at 0x83000000
Using Device Tree in place at 83000000, end 8300a909
Starting kernel ...
Note:
The "*** Warning - bad CRC, using default environment" message can
be safely ignored when the unit is first booted. This means that no
environment variables have been saved to disk, and U-Boot is falling
back to the default. If "env save" is run, this will save the environment to
disk, and this message will go away unless there is a further issue.
The default U-Boot boot process will check for USB updates before attempting to boot from on-board eMMC.
Details about the bootup process, features, and other U-Boot information can be found in the U-Boot sections.

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 8/44
3.3 First Linux Boot
When booting with the default settings, a shipped board will boot to the eMMC. The eMMC by default is pre-
programmed with our default Debian 9 Stretch image. After Debian boots it will ask the user to log in with a
username and password. This uses "root" as the username with no password. This can be changed after logging in
with the command 'passwd' to set an account password. Note that this login will only work over the serial console.
Debian SSH defaults to not only disallowing password-less logins, but root logins altogether are denied.
From the Linux prompt, the hardware can be tested out or application development can be begin.
4 U-Boot
TS-7100 U-Boot Sections
5 Debian Stretch(9)
5.1 Getting Started
By default, the TS-7100 ships with a Debian image installed and ready to boot. It is not necessary to download and
install the latest image below for operating the device. However please check the image changelog to verify the
running image.
The stock image uses a Debian Stretch distribution and Linux kernel version 4.9. The latest image can be
downloaded below.
ts7100-linux4.9-latest.tar.xz (http://ftp.embeddedarm.com/ftp/ts-arm-sbc/ts-7100-linux/distributions/ts7100-
linux4.9-latest.tar.xz) (md5 (http://ftp.embeddedarm.com/ftp/ts-arm-sbc/ts-7100-linux/distributions/ts7100-
linux4.9-latest.tar.bz2) )
This image can then be written to the on-board eMMC flash in order to be booted on the TS-7100.
5.2 Debian Networking
Note: The first physical port on the TS-7100, socket T1, is given the name
"eth1", while the second port, socket T2, is "eth0".
By default, Debian Stretch does not configure any interfaces to be brought up or configured.
Debian can automatically set up the networking based on the contents of "/etc/network/interfaces.d/" files. For
example, to enable DHCP for "eth0" by default on startup:

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 9/44
echo "auto eth0
iface eth0 inet dhcp" > /etc/network/interfaces.d/eth0
To set up a static IP:
echo "auto eth0
iface eth0 inet static
address 192.168.0.50
netmask 255.255.255.0
gateway 192.168.0.1" > /etc/network/interfaces.d/eth0
echo "nameserver 1.1.1.1" > /etc/resolv.conf
To make this take effect immediately:
service networking restart
To configure other interfaces, replace "eth0" with the other network device name. Some interfaces may use
predictable interface names
(https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/) . For example, the
traditional name for an ethernet port might be "eth1", but some devices may use "enp1s0" for PCIe, or
"enx00D069C0FFEE" (the MAC address appended) for USB ethernet interfaces. Run 'ifconfig -a' or 'ip a' to get a
complete list of interfaces, including the ones that are not configured.
5.2.1 Debian Wi-Fi Client
Wireless interfaces are also managed with configuration files in "/etc/network/interfaces.d/". For example, to
connect as a client to a WPA network with DHCP.
Install wpa_supplicant:
apt-get update && apt-get install wpasupplicant -y
Run:
wpa_passphrase youressid yourpassword
This command will output information similar to:
network={
ssid="youressid"
#psk="yourpassword"
psk=151790fab3bf3a1751a269618491b54984e192aa19319fc667397d45ec8dee5b
}
Use the hashed PSK in the specific network interfaces file for added security:
echo "auto wlan0
iface wlan0 inet dhcp
wpa-ssid youressid
wpa-psk 151790fab3bf3a1751a269618491b54984e192aa19319fc667397d45ec8dee5b" > /etc/network/interfaces.d/wlan0

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 10/44
To have this take effect immediately:
service networking restart
For more information on configuring Wi-Fi, see Debian's guide here
(https://wiki.debian.org/WiFi/HowToUse#wpa_supplicant) .
5.2.2 Debian Wi-Fi Access Point
This section will discuss setting up the WiFi device as an access point that is bridged to an ethernet port. That is,
clients can connect to the AP and will be connected to the ethernet network through this network bridge. The
ethernet network must provide a DHCP server; this will be passed through the bridge to WiFi client devices as they
connect.
The 'hostapd' utility is used to manage the access point of the device. This is usually installed by default, but can be
installed with:
apt-get update && apt-get install hostapd -y
Note: The install process may start an unconfigured 'hostapd' process. This
process must be killed before moving forward.
Modify the file "/etc/hostapd/hostapd.conf" to have the following lines:
ssid=YourWiFiName
wpa_passphrase=Somepassphrase
interface=wlan0
bridge=br0
auth_algs=3
channel=7
driver=nl80211
hw_mode=g
logger_stdout=-1
logger_stdout_level=2
max_num_sta=5
rsn_pairwise=CCMP
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
Note:
Refer to the kernel's hostapd documentation
(http://wireless.kernel.org/en/users/Documentation/hostapd) for more
wireless configuration options.
The access point can be started and tested by hand:
hostapd /etc/hostapd/hostapd.conf

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 11/44
Systemd auto-start with bridge to eth0
It is possible to configure the auto-start of 'hostapd' through systemd. The configuration outlined below will set up a
bridge with "eth0", meaning the Wi-Fi connection is directly connected to the ethernet network. The ethernet
network is required to have a DHCP server present and active on it to assign Wi-Fi clients an IP address. This setup
will allow Wi-Fi clients access to the same network as the ethernet port, and the bridge interface will allow the
platform itself to access the network.
Set up hostapd
First, create the file "/etc/systemd/system/hostapd_user.service" with the following contents:
[Unit]
Description=Hostapd IEEE 802.11 AP
Wants=network.target
Before=network.target
Before=network.service
After=sys-subsystem-net-devices-wlan0.device
After=sys-subsystem-net-devices-br0.device
BindsTo=sys-subsystem-net-devices-wlan0.device
BindsTo=sys-subsystem-net-devices-br0.device
[Service]
Type=forking
PIDFile=/run/hostapd.pid
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid -B
[Install]
WantedBy=multi-user.target
Then enable this in systemd:
systemctl enable hostapd_user.service
systemctl enable systemd-networkd
Set up bridging
Create the following files with the listed contents.
"/etc/systemd/network/br0.netdev"
[NetDev]
Name=br0
Kind=bridge
"/etc/systemd/network/br0.network"
[Match]
Name=br0
[Network]
DHCP=yes

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 12/44
"/etc/systemd/network/bridge.network"
[Match]
Name=eth0
[Network]
Bridge=br0
5.2.3 Cellular Data Network
5.2.3.1 NimbeLink Skywire modem
The CN16 XBee Socket is able to support NimbeLink Skywire Embedded modems. Information on setting up and
configuring the power and USB interface for Skywire modules can be found here. Please note that there are various
models of the Skywire modules that all support different interfaces. These include "cdc_ether", "cdc_ncm", USB
serial, and a simple TTL UART. Both the USB ethernet and NCM interfaces present a network device to the
system, while the USB serial and UART interfaces require PPP to manage the connection.
Please see the NimbeLink documentation for the specific module in use for more detailed information on
establishing connection with a cellular network via the modem.
5.3 Debian Application Development
5.3.1 Debian Stretch Cross Compiling
Debian Stretch provides cross compilers from its distribution. An install on a workstation can build for the same
release on other architectures. A Linux desktop or laptop PC, virtual machine, or chroot will need to be used for
this. Debian Stretch for a workstation can be downloaded from here (https://www.debian.org/releases/stretch/) .
From a Debian workstation (not the target), run these commands to set up the cross compiler:
# Run "lsb_release -a" and verify Debian 9.X is returned. These instructions are not
# expected to work on any other version or distribution.
su root
# Not needed for the immediate apt-get install, but used
# so we can install package:armhf for cross compiling
dpkg --add-architecture armhf
apt-get update
apt-get install curl build-essential crossbuild-essential-armhf -y
This will install a toolchain that can be used with the prefix "arm-linux-gnueabihf-". The standard GCC tools will
start with that name, eg "arm-linux-gnueabihf-gcc".
The toolchain can now compile a simple hello world application. Create hello-world.c on the Debian workstation:
#include <stdio.h>
int main(){
printf("Hello World\n");
}
To compile this:

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 13/44
arm-linux-gnueabihf-gcc hello-world.c -o hello-world
file hello-world
This will return that the binary created is for ARM. Copy this to the target platform to run it there.
Debian Stretch supports multiarch which can install packages designed for other architectures. On workstations this
is how 32-bit and 64-bit support is provided. This can also be used to install armhf packages on an x86 based
workstation.
This cross compile environment can link to a shared library from the Debian root. The package would be installed
in Debian on the workstation to provide headers and libraries. This is included in most "-dev" packages. When run
on the arm target it will also need a copy of the library installed, but it does not need the -dev package.
apt-get install libcurl4-openssl-dev:armhf
# Download the simple.c example from curl:
wget https://raw.githubusercontent.com/bagder/curl/master/docs/examples/simple.c
# After installing the supporting library, curl will link as compiling on the unit.
arm-linux-gnueabihf-gcc simple.c -o simple -lcurl
Copy the binary to the target platform and run on the target. This can be accomplished with network protocols like
NFS, SCP, FTP, etc.
If any created binaries do not rely on hardware support like GPIO or CAN, they can be run using 'qemu'.
# using the hello world example from before:
./hello-world
# Returns Exec format error
apt-get install qemu-user-static
./hello-world
5.4 Debian Installing New Software
Debian provides the apt-get system which allows management of pre-built applications. The apt tools require a
network connection to the internet in order to automatically download and install new software. The update
command will download a list of the current versions of pre-built packages.
apt-get update
A common example is installing Java runtime support for a system. Find the package name first with search, and
then install it.
root@ts:~# apt-cache search openjdk
default-jdk - Standard Java or Java compatible Development Kit
default-jdk-doc - Standard Java or Java compatible Development Kit (documentation)
default-jdk-headless - Standard Java or Java compatible Development Kit (headless)
default-jre - Standard Java or Java compatible Runtime
default-jre-headless - Standard Java or Java compatible Runtime (headless)
jtreg - Regression Test Harness for the OpenJDK platform
libreoffice - office productivity suite (metapackage)
openjdk-8-dbg - Java runtime based on OpenJDK (debugging symbols)
openjdk-8-demo - Java runtime based on OpenJDK (demos and examples)
openjdk-8-doc - OpenJDK Development Kit (JDK) documentation
openjdk-8-jdk - OpenJDK Development Kit (JDK)

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 14/44
openjdk-8-jdk-headless - OpenJDK Development Kit (JDK) (headless)
openjdk-8-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-8-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-8-jre-zero - Alternative JVM for OpenJDK, using Zero/Shark
openjdk-8-source - OpenJDK Development Kit (JDK) source files
uwsgi-app-integration-plugins - plugins for integration of uWSGI and application
uwsgi-plugin-jvm-openjdk-8 - Java plugin for uWSGI (OpenJDK 8)
uwsgi-plugin-jwsgi-openjdk-8 - JWSGI plugin for uWSGI (OpenJDK 8)
uwsgi-plugin-ring-openjdk-8 - Closure/Ring plugin for uWSGI (OpenJDK 8)
uwsgi-plugin-servlet-openjdk-8 - JWSGI plugin for uWSGI (OpenJDK 8)
java-package - Utility for creating Java Debian packages
In this case, the wanted package will likely be the "openjdk-8-jre" package. Names of packages can be found on
Debian's wiki pages (http://wiki.debian.org/) or the packages site (https://packages.debian.org/stretch/) .
With the package name apt-get install can be used to install the prebuilt packages.
apt-get install openjdk-8-jre
# More than one package can be installed at a time.
apt-get install openjdk-8-jre nano vim mplayer
For more information on using apt-get refer to Debian's documentation here (http://wiki.debian.org/AptCLI) .
5.5 Debian Setting up SSH
To install the SSH server, install the package with apt-get:
apt-get install openssh-server
Debian Stretch by default disallows logins directly from the user "root". Additionally, SSH will not allow remote
connections without a password or valid SSH key pair. This means in order to SSH to the device, a user account
must first be created, and a password set:
useradd --create-home --shell /bin/bash newuser
passwd newuser
After this setup it is now possible to connect to the device as user "newuser" from a remote PC supporting SSH. On
Linux/OS X this is the "ssh" command, or from Windows using a client such as PuTTY
(http://www.chiark.greenend.org.uk/~sgtatham/putty/) .
5.6 Debian Starting Automatically
A systemd service can be created to start up headless applications. Create a file in
/etc/systemd/system/yourapp.service
[Unit]
Description=Run an application on startup
[Service]

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 15/44
Type=simple
ExecStart=/usr/local/bin/your_app_or_script
[Install]
WantedBy=multi-user.target
If networking is a dependency add "After=network.target" in the Unit section. Once you have this file in place add
it to startup with:
# Start the app on startup, but will not start it now
systemctl enable yourapp.service
# Start the app now, but doesn't change auto startup
systemctl start yourapp.service
Note:
See the systemd documentation
(http://www.freedesktop.org/software/systemd/man/systemd.service.html)
for in depth documentation on services.
6 Buildroot Configuration
Note: Incomplete at this time
The full-featured stock image may be too cumbersome for some applications. Applications that require faster
bootup time or a smaller root filesystem will benefit greatly from using a lighter distribution like Buildroot. To
assist customers heading down this path we have forked a stable snapshot of Buildroot (specifically 2018.02) and
have added on top of it everything that is required for operation with one of our products. In order to provide
consistency, the Buildroot image we provide and the default configuration are fairly large; but it includes a number
of tools that are present on our stock image so that transitioning from one to the other is much easier. The Buildroot
configuration could be customized to provide a much smaller footprint with a faster bootup time. Our current
buildroot averages about 10 seconds of bootup time (much of this is spent on networking). Reducing the
configuration can bring this time down to 5 seconds from power on to login prompt.
6.1 Installing Buildroot
We offer a pre-made filesystem tarball that is based on our default Buildroot configuration. It can downloaded here:
ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7100-linux/distributions/ts7100-Buildroot-2018.02-latest.tar.xz
Using that tarball, it's possible to create a bootable eMMC for the TS-7100.
The default configuration was designed to be as close to our stock Debian distribution. This includes our ts7100-
utils (https://github.com/embeddedarm/ts7100-utils) like tsmicroctl, our TS-SILO monitor daemon, drivers and
firmware for the WiFi and Bluetooth module.
6.2 Building Buildroot

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 16/44
The Buildroot image can be built from source if needed. This process will create a cross compiler, use that to build
all target applications including the kernel, and then create a filesystem tarball of a bootable image. The following
instructions can be used to build Buildroot.
Clone the repository:
git clone https://github.com/embeddedarm/buildroot-2018.02
cd buildroot-2018.02/
Configure the build:
make ts7100_defconfig
At this point, the default configuration can be modified if desired:
make menuconfig
And finally, start the build process:
make
The buildroot process can take a large amount of time to build, depending on available system resources. Note that
if any changes occur in the config file, it is recommended to clean the build tree and start the process over.
Additionally, ccache is enabled by default in the default configuration. This will speed up a re-build of Buildroot
after a clean. However it will take up additional hard drive space, and if any changes are made to the cross compiler
configuration the ccache directory must be removed first. See the Buildroot manual
(https://buildroot.org/downloads/manual/manual.html#ccache) for more information about ccache and Buildroot.
Once it is finished building, Buildroot will output a filesystem tarball to "output/images/rootfs.tar.xz". This file can
be used with Installing Buildroot in lieu of the tarball provided on our FTP site.
6.3 Configuring the Network
Buildroot implements the 'ip', 'ifconfig', and 'route' commands to manipulate the settings of interfaces. The first
ethernet interface is set up to come up automatically with our default configuration. The interfaces can also be
manually set up:
# Bring up the CPU network interface
ifconfig eth0 up
# Set an ip address (assumes 255.255.255.0 subnet mask)
ifconfig eth0 192.168.0.50
# Set a specific subnet
ifconfig eth0 192.168.0.50 netmask 255.255.0.0
# Configure your route. This is the server that provides your internet connection.
route add default gw 192.168.0.1
# Edit /etc/resolv.conf for your DNS server
echo "nameserver 192.168.0.1" > /etc/resolv.conf

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 17/44
Most commonly, networks will offer DHCP which can be set up with one command:
# To setup the default CPU ethernet port
udhcpc -i eth0
# You can configure all ethernet ports for a DHCP response with
udhcpc
To have network settings take effect on startup in Buildroot, edit /etc/network/interfaces:
# interface file auto-generated by buildroot
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
pre-up /etc/network/nfs_check
wait-delay 15
Note:
The default network startup may timeout on some networks. This can be
resolved by adding either of the following under the "iface eth0 inet
dhcp" section: "udhcpc_opts -t 0" to infinitely retry, or "udhcpc_opts -t 5"
to fail after five attempts.
See the man page for interfaces(5) for further information on the syntax of the file.
For more information on network configuration in general, Debian provides a great resource here
(http://wiki.debian.org/Network) that can be readily applied to Buildroot in most cases.
6.4 Installing New Software
By default, Buildroot does not include a package manager. This means installing software directly on the platform
can be cumbersome and is not the intended path. It is possible to modify the Buildroot configuration to include
additional packages. See the Building Buildroot section for information on adding new packages.
If a desired package is not available in Buildroot, there are a number of options available when moving forward. It
is possible to add packages to the build process, though this does require some knowledge of Buildroot internals.
Another option is to use the cross compiler that is output by buildroot in order to compile packages on a host
system and then copy them over to the target. It is also possible to install a toolchain directly on the device, and
compile applications natively. The last option is the least recommended as it greatly increases the final image size
and adds unnecessary complexity.
6.5 Setting up SSH
The default configuration has Dropbear set up. Dropbear is a lightweight SSH server.

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 18/44
Make sure the device is configured on the network and set a password for the remote user. SSH will not allow
remote connections without a password set. The default configuration does not set a password for the root user, nor
are any other users configured.
passwd root
After this setup it is now possible to connect from a remote PC supporting SSH. On Linux/OS X this is the "ssh"
command, or from Windows using a client such as putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/) .
6.6 Starting Automatically
From Buildroot the most straightforward way to add an application to startup is to create a startup script. This is an
example simple startup script that will toggle the red led on during startup, and off during shutdown. In this case
the file is named customstartup, but you can replace this with any application name as well.
Edit the file /etc/init.d/S99customstartup to contain the following. Be sure to set the script as executable!
#! /bin/sh
# /etc/init.d/customstartup
case "$1" in
start)
echo 1 > /sys/class/leds/red-led/brightness
## If you are launching a daemon or other long running processes
## this should be started with
# nohup /usr/local/bin/yourdaemon &
;;
stop)
# if you have anything that needs to run on shutdown
echo 0 > /sys/class/leds/red-led/brightness
;;
*)
echo "Usage: customstartup start|stop" >&2
exit 3
;;
esac
exit 0
Note:
The $PATH variable is not set up by default in init scripts so this will
either need to be done manually or the full path to your application must
be included.
To manually start and stop the script:
/etc/init.d/S99customstartup start
/etc/init.d/S99customstartup stop
7 Backup / Restore
7.1 Creating A Backup / Production Image

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 19/44
Note: This section is incomplete at this time.
7.2 Restoring Stock / Backup / Production Image
7.2.1 Booted from USB / NFS
These instructions assume the TS-7100 is booted to Linux from network via NFS or USB mass storage. They also
assume that the eMMC is unmodified, with a single partition. If the partition table has been modified, a utility such
as 'gparted' or 'fdisk' may be needed to remove the existing partition table and recreate it with a single partition.
Note that the partition table must be "MBR" or "msdos", the "GPT" partition table format is not supported by U-
Boot.
Once booted to any device that is not the eMMC:
# Verify nothing else has the first eMMC partition mounted
umount /dev/mmcblk0p1
mkfs.ext3 /dev/mmcblk0p1
mount /dev/mmcblk0p1 /mnt/emmc
wget http://ftp.embeddedarm.com/ftp/ts-arm-sbc/ts-7100-linux/distributions/ts7100-linux4.9-latest.tar.xz
tar -xf ts7100-linux4.9-latest.tar.xz -C /mnt/emmc
umount /mnt/emmc
sync
Note:
The ext4 filesystem can be used instead of ext3, but it may require
additional options. U-Boot does not support the 64bit addressing added as
the default behavior in recent revisions of mkfs.ext4. If using e2fsprogs
1.43 or newer, the options "-O ^64bit,^metadata_csum" must be used
with ext4 for proper compatibility. Older versions of e2fsprogs do not
need these options passed nor are they needed for ext3.
Once written, the files on disk can be verified to ensure they are the same as the source files in the archive. To do
so, run the following commands:
mount /dev/mmcblk0p1 /mnt/emmc
cd /mnt/emmc/
md5sum --quiet -c md5sums.txt
cd -
umount /mnt/emmc
sync
The 'md5sum' command will report any differences between files and their checksums. Any differences are an
indication of failure to write data or a damaged disk. Note that the "/md5sums.txt" file is present in our stock
tarballs and is created in custom images as a part of our scripts to do so. This file may not be present in custom
images created without our tools, or it may be present but not properly updated. This will result in reported errors.
8 Compile the Kernel

2/11/2020 TS-7100 - Technologic Systems Manuals
https://wiki.embeddedarm.com/w/index.php?title=TS-7100&printable=yes 20/44
Compiling the kernel requires an armhf toolchain. We recommend development under Debian Stretch which
includes an armhf compiler in the repositories. See the Debian Stretch cross compilation section for instructions on
installing a proper cross compiler.
git clone git clone https://github.com/embeddedarm/linux-4.9.y
cd linux-4.9.y
# These next commands set up some necessary environment variables
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export LOADADDR=0x80800000
# This sets up the default configuration that we ship with
make tsimx6ul_defconfig
## Make any changes in "make menuconfig" or driver modifications, then compile
make && make zImage && make modules
The following will install the kernel and modules to a temporary directory, and then pack them up in to a single
tarball:
TEMPDIR=$(mktemp -d)
mkdir "${TEMPDIR}/boot/"
cp arch/arm/boot/zImage "${TEMPDIR}"/boot/zImage
cp arch/arm/boot/dts/imx6ul*ts*.dtb "${TEMPDIR}"/boot/
INSTALL_MOD_PATH="${TEMPDIR}" make modules_install
make headers_install INSTALL_HDR_PATH="${TEMPDIR}"
tar czf linux-tsimx6ul-"$(date +"%Y%m%d")"-"$(git describe --abbrev=8 --dirty --always)".tar.gz -C "${TEMPDIR}" .
rm -rf "${TEMPDIR}"
This will output a tarball with the kernel version and short git hash, as well as the date the tarball was created. For
example "linux-tsimx6ul-20190823-v4.9.171-60-g01e2117e.tar.gz"
This tarball can be directly unpacked to the root folder of a bootable media for the device. It is also possible to
unpack it directly on a booted system, however we do not recommend doing so on an active deployed system
without extensive testing.
# Unpack it to a mounted disk, this assumes the disk is mounted to "/mnt"
tar xf linux-tsimx6ul...tar.gz -C /mnt
# Unpack it to the root directory of a booted system
tar xf linux-tsimx6ul...tar.gz -C /
9 Production Mechanism
The TS-7100's U-Boot has the ability to locate and run a U-Boot script file named /tsinit.ub on the root of a USB
drive. This process occurs when attempting to boot to the U-Boot shell. If this script exists, U-Boot will load and
run it automatically. This is intended for the initial production of units and allows mass programming various media
from a USB mass storage device.
The USB blasting image can be downloaded here (http://ftp.embeddedarm.com/ftp/ts-arm-sbc/ts-7100-linux/usb-
blaster/tsimx6ul_usb_blaster-latest.tar.bz2) . This includes a basic Linux kernel and a small initramfs that will
mount the USB drive at "/mnt/usb/" and execute "/mnt/usb/blast.sh".
This manual suits for next models
1
Table of contents
Other Technologic Systems Desktop manuals