Building a Debian 8 (Jessie) Root Files System for use with a Triton TX6 module

Home/LInux, System on Module/Building a Debian 8 (Jessie) Root Files System for use with a Triton TX6 module

This article describes how to build and install a Debian 8 (Jessie) Linux distribution on a Direct Insight Triton TX6 i.MX6 based SOM using Debian Debootstrap. You can find more information on debootstrap here:

This is an ideal platform for evaluation purposes because you can very easily install any Debian packages using the Debian Advanced Package Tool (apt). Once you have identified the features you require you can then build this into a more appropriate embedded rootfs using either Yocto or the Karo “native” Linux distribution.

After building the rootfs you will need to install it into a TX6 module using the manufacturing tool. You will find details on how to do this here:

This process has been validated on Debian or Ubuntu development machines. Be very careful if using “copy and paste” to run the commands.

On your Linux development machine, install the required packages:

sudo apt-get install qemu-user-static debootstrap binfmt-support

QEM is emulation software for different architectures. Although our development machine is most likely x86 we are building a rootfs for ARM.

Configure the environment:

export targetdir=/opt/tx6-armel-rootfs
export distro=jessie
sudo mkdir -p $targetdir
sudo debootstrap --arch=armel --foreign $distro $targetdir

Copy the qemu-arm-static etc into the right place:

sudo cp /usr/bin/qemu-arm-static $targetdir/usr/bin
sudo cp /etc/resolv.conf $targetdir/etc

That’s a basic armel rootfs. Now stage 2:

sudo chroot $targetdir # we are now root in the target directory, emulating ARM
export distro=jessie
export LANG=C
/debootstrap/debootstrap --second-stage

Set up the apt sources for jessie. Create/edit /etc/apt/sources.list and add (note $distro should get replaced with the distro name in this case jessie). You may use the screen editor “nano” if you prefer:

cat << EOT > /etc/apt/sources.list
deb $distro main contrib non-free
deb-src $distro main contrib non-free
deb $distro-updates main contrib non-free
deb-src $distro-updates main contrib non-free
deb $distro/updates main contrib non-free
deb-src $distro/updates main contrib non-free

Create the file /etc/apt/apt.conf.d/71-no-recomends:

cat << EOT > /etc/apt/apt.conf.d/71-no-recomends
APT::Install-Recommends "0"; 
APT::Install-Suggests "0";

Now pull latest updates and install locales packages:

apt-get update
apt-get install –y locales dialog
dpkg-reconfigure locales

For UK locales select en_GB (all three entries)

Install additional packages:

apt-get install –y openssh-server sudo ntpdate

The Karo kernels use the sysVinit init system, however the default Jessie init system is systemd, so it is necessary to switch:

apt-get install sysvinit
apt-get install –y sysvinit-core sysvinit-utils
apt-get remove –y systemd          # dpkg may give errors!
apt-get -f install                 # forces removal

Set root password:


Add a sudo user:

adduser debian
adduser debian sudo

Set up basic networking with DHCP:

cat << EOT >> /etc/network/interfaces
allow-hotplug eth0
iface eth0 inet dhcp

Set the host name:

echo tx6 > /etc/hostname

Enable serial console:

echo T0:2345:respawn:/sbin/getty -L ttymxc0 115200 linux >> /etc/inittab

Exit and clean up:

sudo rm $targetdir/etc/resolv.conf
sudo rm $targetdir/usr/bin/qemu-arm-static

Now $targetdir contains the final rootfs. You can tar this up in preperation for programming into a TX6 module:

cd $targetdir
sudo tar cjf ~/$distro-armhf-rootfs.tar.bz2 *
cd ~

Now install the rootfs on a TX module. If you are using a NAND device you will need an SD card. If you are using an eMMC module the rootfs can be installed directly on the module itself.

You will need to update the U-Boot environment in order for the Debian 8 rootfs to load after the kernel boots. You can either manually do this in U-Boot itself on the module or create an environment file containing the appropriate environment:


Use the Karo manufacturing tool to install the image by copying the rootfs tar archive and the environment file to the custom folder. See details here:

Once the rootfs tar archive and U-Boot environment is copied to the custom folder simply configure the manufacturing tool as usual but use the custom rootfs  and environment file when prompted. The manufacturing tool will then select the custom files and the default kernel, dtb and U-Boot images to program into the module.

The module is now ready to boot the Linux Debian 8 distribution.

By | 2017-12-14T13:51:31+00:00 August 2nd, 2017|LInux, System on Module|2 Comments


  1. Mike October 31, 2017 at 5:51 pm - Reply

    I tried running through this procedure and eventually built and installed the Debian image. The only part I could never get to work was APT::Install-Recommends

    It seems to be booting fine, and the screen shows the 2 penguins when booting, but after that it goes blank. The output on the serial port is showing “LCD0 POWER: disabling LCD1POWER: disabling” . Any idea how to get the LCD working?

    • Will November 1, 2017 at 5:11 pm - Reply

      APT::Install-Recomends “0”; is a typo it should read:

      APT::Install-Recommends “0”;

      Thanks for pointing that out, corrected now in the main post. Actually there were a few other typos which have also been corrected.

      What module and base board, kernel DTB and U-Boot version are you using? You could try enabling the LCD via the sysfs by logging in at the serial port console and typing:

      sudo echo 0 > /sys/class/graphics/fb0/blank

Leave A Comment