Translation(s): none

PC Utilite support in Debian

This page exists to collate information about the status of support in Debian for the PC Utilite by CompuLab

Models covered
PC Utilite (SSD variant)

For Debian buster installation on PC Utilite Pro (SSD variant) follow these updated guidelines.

Overall Status

The PC Utilite is a "fanless ARM Cortex-A9 computer delivering high performance and rich I/O in a tiny form-factor". It use a Freescale i.MX6 CPU.

Core Components

[ATTACH]

Boot Standard Kernel:

/!\

LAN network card:

{OK}

Detect hard drives:

{OK}

Extra Features

CPU Frequency Scaling

[?]

Hibernation

[?]

Sleep / Suspend

[?]

Sound and HDMI Sound

[?]

Xorg

{OK}

- OpenGL

[?]

- Resize-and-Rotate(randr)

[?]

- Screen Brightness

[?]

Switch to External Screen

[?]

Mouse

{OK}

Wireless/Wifi

{OK}

Bluetooth

{OK}

Keyboard's Hotkeys

[?]

Legend :
{OK} = OK ; {X} Unsupported(No Driver) ; /!\ = Error (Couldn't get it working); [?] Unknown, Not Test ; [-] Not-applicable
{i} = Configuration Required; X-( = Only works with a non-free driver and or firmware

Configuration

Bootloader support

The Utilite use uboot version U-Boot 2009.08-cm-fx6-0.94+tools (Jan 23 2014 - 17:00:15). Sources can be downloaded at gitorious.

Kernel

The kernel sources can alse be found at gitorious.

uname -a
Linux pc-utilite-1 3.0.35-cm-fx6-5.3 #412 SMP Sun Jan 26 14:38:19 IST 2014 armv7l GNU/Linux

Installing Debian

NFSroot

You need a PC with a NFS server and a tftp server running. You also need debootstrap

apt-get install nfs-kernel-server tftpd
/etc/init.d/openbsd-inetd restart
cd /srv
debootstrap --foreign --arch armhf wheezy pc-utilite http://ftp.fr.debian.org/debian
echo "/srv/pc-utilite 192.168.0.172(rw,no_root_squash)" >> /etc/exports
/etc/init.d/nfs-kernel-server restart

You need to boot your PC Utilite.

mount -t vfat /dev/sda1 /mnt
scp /mnt/uImage-cm-fx6 root@192.168.0.171:/srv/tftp/
cd /lib
scp -r firmware modules root@92.168.0.171:/srv/pc-utilite/lib/

The PC Utilite comes with an usb serial RS232 cable, you must connect to it using screen or minicom. You have three seconds at boot time to stop uboot autoboot.

screen /dev/ttyUSB0 115200

Here is the following uboot command you should type to boot

setenv ipaddr 192.168.0.172
setenv serverip 192.168.0.171
setenv gateway 192.168.0.1
setenv netmask 255.255.255.0
setenv hostname pc-utilite
saveenv
setenv bootargs console=${console} root=/dev/nfs nfsroot=${serverip}:/srv/pc-utilite/ ip=${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname} ${video} init=/bin/bash
tftpboot ${loadaddr} ${kernel} && bootm ${loadaddr}

The system boot in a bash shell :

./debootstrap/debootstrap --second-stage
passwd

On the server side you should edit the following files :

echo "T0:2345:respawn:/sbin/getty -L ttymxc3 115200 vt100" >> /srv/pc-utilite/etc/inittab

Reboot the PC Utilite, stop autoboot and then

setenv bootargs console=${console} root=/dev/nfs nfsroot=${serverip}:/srv/pc-utilite/ ip=${ipaddr}:${serverip}:${gateway}:${netmask}:${hostname} ${video}
setenv bootcmd "tftpboot ${loadaddr} ${kernel} && bootm ${loadaddr}"
saveenv
tftpboot ${loadaddr} ${kernel} && bootm ${loadaddr}

On the SSD

You need to install the NFSroot based system. In it then using cfdisk you partition your SSD :

cfdisk
sfdisk -l /dev/sda

Disk /dev/sda: 3892 cylinders, 255 heads, 63 sectors/track
Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls    #blocks   Id  System
/dev/sda1          0+     30      31-    248976   83  Linux
/dev/sda2         31     123      93     747022+  82  Linux swap / Solaris
/dev/sda3        124     609     486    3903795   83  Linux
/dev/sda4        610    3892-   3283-  26366823   8e  Linux LVM

vgcreate pc-utilite /dev/sda4

lvcreate -n home -L4G pc-utilite
lvcreate -n usr -L4G pc-utilite
lvcreate -n var -L2G pc-utilite

mkswap /dev/sda2

mkfs -t ext2 /dev/sda1

mkfs -t ext4 /dev/sda3
mkfs -t ext4 /dev/mapper/pc--utilite-usr
mkfs -t ext4 /dev/mapper/pc--utilite-home
mkfs -t ext4 /dev/mapper/pc--utilite-var

mount -t ext4 /dev/sda3 /mnt
mkdir /mnt/usr
mount -t ext4 /dev/mapper/pc--utilite-usr /mnt/usr
mkdir /mnt/home
mount -t ext4 /dev/mapper/pc--utilite-home /mnt/home/
mkdir /mnt/var
mount -t ext4 /dev/mapper/pc--utilite-var /mnt/var
mkdir /mnt/boot
mount -t ext2 /dev/sda1 /mnt/boot/

apt-get install debootstrap

debootstrap wheezy /mnt/ http://ftp.fr.debian.org/debian

scp 192.168.0.171:/srv/tftp/uImage-cm-fx6 /mnt/boot/

rmdir /mnt/lib/firmware
cp -a /lib/firmware /mnt/lib
cp -a /lib/modules /mnt/lib

cp /etc/apt/sources.list /etc/apt/apt.conf /mnt/etc/apt/

echo "T0:2345:respawn:/sbin/getty -L ttymxc3 115200 vt100" >> /mnt/etc/inittab

chroot /mnt/
passwd

apt-get update
apt-get upgrade
apt-get install ssh
apt-get install lvm2
dpkg-reconfigure tzdata

Edit /etc/fstab and /etc/network/interfaces :

cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/sda3 / ext4 errors=remount-ro 0       1
/dev/sda1 /boot ext2 defaults 0 2
/dev/mapper/pc--utilite-usr /usr ext4 defaults 0 2
/dev/mapper/pc--utilite-home /home ext4 defaults 0 2
/dev/mapper/pc--utilite-var /var ext4 defaults 0 2
proc /proc proc defaults 0 0

echo "auto eth0" >> /etc/network/interfaces
echo "iface eth0 inet dhcp" >> /etc/network/interfaces

sync
exit
umount /mnt/boot
umount /mnt/var
umount /mnt/usr
umount /mnt/home
umount /mnt
reboot

Stop autoboot (again)

setenv bootcmd "sata init;ext2load sata 0 0x10800000 uImage-cm-fx6;run sataargs;bootm 0x10800000"
saveenv
sata init;ext2load sata 0 0x10800000 uImage-cm-fx6;run sataargs;bootm 0x10800000

X11 install

apt-get install xfce4 xserver-xorg xfonts-base
startx

Works out of the box (with ?CompuLab kernel and firmware).

System Summary

lspci

lspci -nn
00:00.0 PCI bridge [0604]: Device [16c3:abcd] (rev 01)
01:00.0 Ethernet controller [0200]: Intel Corporation I211 Gigabit Network Connection [8086:1539] (rev 03)

New kernel

Compilation

Following How To Compile a custom kernel you can compile a new kernel using your wheezy pc-utilite. For utilite the recipe for utilite/devel branch and https://github.com/utilite-computer/linux-kernel host is successful up to uImage generation using :

make cm_fx6_defconfig
make -j 4 zImage dtbs modules LOADADDR=0x10008000

Instead of the proposed

make cm_fx6_defconfig
make -j 4 zImage dtbs modules

If you want to upgrade to jessie you should do a

make cm_fx6_defconfig
make menuconfig
make -j 4 zImage dtbs modules

and enable FHANDLE support which is needed by systemd AFAIK, for lvm you need CONFIG_BLK_DEV_DM=m.

Installation

kver=`make kernelrelease`
cp ./arch/arm/boot/zImage /boot/zImage-${kver}
cp arch/arm/boot/dts/*.dtb /boot/
make modules_install
make firmware_install
make headers_install INSTALL_HDR_PATH=/usr
cp .config /boot/config-${kver}

u-boot new kernel

setenv bootm_low 0x15000000
sata init
ext2load sata 0 0x10800000 zImage-3.10.17-cm-fx6-1-beta4-g9c89e6a
ext2load sata 0 0x15000000 imx6q-cm-fx6.dtb
run sataargs
bootz 0x10800000 - 0x15000000

lsusb

lsusb 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
lsusb -v | grep -E '\<(Bus|iProduct|bDeviceClass|bDeviceProtocol)' 2>/dev/null
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  bDeviceClass            9 Hub
  bDeviceProtocol         1 Single TT
  iProduct                2 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  bDeviceClass            9 Hub
  bDeviceProtocol         1 Single TT
  iProduct                2 Freescale On-Chip EHCI Host Controller
Bus 002 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
  bDeviceClass            9 Hub
  bDeviceProtocol         2 TT per port
  iProduct                0 
  bDeviceClass            9 Hub
  bDeviceProtocol         0 Full speed (or root) hub

Further info