Repository for the PC Engines APU embedded system board (SBC)
- Debian 11 Bullseye
- Debian 10 Buster
- Debian 9 Stretch
- Debian 8 Jessie
- PC Engines APU LEDs
- Voyage Linux
- Tiny Core Linux
- Enable Serial Console
Renamed repository from "voyage-linux" to "pc-engines-apu" as a more appropriate description. It still contains the same Voyage Linux Kernel and the LED driver for plain vanilla Debian.
Info about WLAN and LED driver kernel modules on vanilla Debian.
If you're using Debian on mSATA you may want to look at this repository:
All systems still go :)
The WLAN and LED kernel modules still work
"Plain" Debian 9 (dist upgrade) seems to run just fine on the PC Engines APU. WLAN works (WLE200NX/Qualcomm Atheros AR5008 using included ath9k driver). The Vanilla kernel 4.9.0 is ofcourse missing stuff like LED driver module (/sys/class/leds). I've managed to built the LED kernel module using DKMS. Unless there are huge ABI changes between kernel versions these should keep working for now.
The easiest is "borrowing" matching kernel modules from Voyage Linux.
Module: leds_apu, leds-apu.ko
Description: PCEngines apu LED driver
Author: Christian Herzog
Installs leds-apu module and adds it to /etc/modules so it gets loaded at boot time. It also sets these triggers for disk and cpu activity in /etc/rc.local.
echo disk-activity > /sys/class/leds/apu\:2/trigger
echo cpu0 > /sys/class/leds/apu\:3/trigger
You can change them to whatever you like by editing /etc/rc.local
DKMS will try to recompile the module if the kernel version changes. If you don't know what to download you probably want this package.
Quick install:
$ wget https://github.com/mkorthof/voyage-linux/raw/master/leds-apu-dkms_0.1_amd64.deb && sha512sum leds-apu-dkms_0.1_amd64.deb | \
grep aec8d1cd0b7967ac9146fe11811c6ca0a67692e94a61f395901504e88c311b2cec0cd8f3d52432a01c6da35207944d0df1dca35a0e8c1eb26bc65b223739cd14 && \
sudo dpkg -i leds-apu-dkms_0.1_amd64.deb
(copy/paste as one line)
Installs just the binary module into /lib/modules on 4.9.0-5 kernels, nothing else. This package has no dependencies.
After installing it (using dpkg -i
) you have to manually load the module (modprobe leds-apu
) and set trigger(s).
Tarball leds-apu-dkms_0.1.tar.gz contains module src, dkms.conf and the post install/remove scripts that modify /etc/modules and /etc/rc.local.
After the module is loaded /sys/class/leds/apu:[1-3] will be available (apu1 is the powerled). Examples:
echo 1 > /sys/class/leds/apu\:2/brightness
echo disk-activity > /sys/class/leds/apu\:2/trigger`
List all options:
cat /sys/class/leds/apu\:1/trigger
Voyage Linux is/was a Debian derived distribution that is best run on a x86 embedded platforms such as PC Engines ALIX/WRAP, Soekris 45xx/48xx/65xx and Atom-based boards. Link: http://linux.voyage.hk
It looks like the main website is gone, which is confirmed by https://wiki.debian.org/Derivatives/Census/VoyageLinux
Webpage snapshots from archive.org:
http://linux.voyage.hk | linux.voyage.hk/mirror
There was only working mirror left, added another:
- http://voyage.kos.li (official mirror)
- https://archive.org/download/voyage-linux | details (unofficial mirror)
Also here's the files I had downloaded locally, on Git LFS:
voyage-0.10.0_amd64.iso | voyage-0.11.0.iso | voyage-sdk-0.11.0.iso | voyage-MD5SUM | voyage-sdk-MD5SUM
(voyage-0.10.0 is based on debian 8 jessie)
The main reason to do this was to get a patched kernel for CVE-2016-5195 (aka Dirty COW: https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs).
I do not run full Voyage Linux myself but use standard Debian instead (on a PC Engines APU.1D4). Howver, I did use the Voyage kernel and modules since that was the easiest and quickest way to get the WLAN ath9 driver working.
Get updated deb kernel packages:
- linux-image-3.16.7-ckt9-voyage_16.0-2_amd64.deb
- linux-headers-3.16.7-ckt9-voyage_16.0-2_amd64.deb
- linux-source-3.16.7-ckt9-voyage_16.0-2_all.deb
In case the DIY steps below are too much trouble for you (and you trust me... ;)
...just execute the oneliner below to install the updated kernel:
$ wget https://github.com/mkorthof/voyage-linux/raw/master/linux-image-3.16.7-ckt9-voyage_16.0-2_amd64.deb && sha512sum linux-image-3.16.7-ckt9-voyage_16.0-2_amd64.deb | \
grep 48dc119f47814ad53245b9d76fac8f38d8c7e26142d72f533a1773e0b019a507131230519af9873b06090100a92443ec44a4114b0d6578333ec9daa9f19d9b52 && \
sudo bash -c "mv /lib/modules/3.16.7-ckt9-voyage /lib/modules/3.16.7-ckt9-voyage.bak && dpkg -i linux-image-3.16.7-ckt9-voyage_16.0-2_amd64.deb"
(copy/paste as one line)
CHANGELOG-3.16.7-ckt9-voyage.md
cowroot.c says "not vulnerable" which is the same result as 3.16.36-1+deb8u2 and WLAN still works;)
Ready made raw dd image with latest TinyCore version and changes for PCE APU applied (serial console). Write to USB using dd if=TinyCore-9.0-sc.img of=YOUR-USB-DEV
where YOUR-USB-DEV is of course the correct device for your USB drive, e.g. /dev/sdd.
Oneliner to install:
$ wget https://github.com/mkorthof/pc-engines-apu/raw/master/TinyCore-9.0_sc.img.gz && sha512sum TinyCore-9.0-sc.img | \
grep 0e37edc6d2c5df52db893ce7c787e9fde926769f340472fd7f399f51c311fb530a71ec4f758b03f1112ae561a14eae3a662c9b2076ce34d09acd1afb225e9443 && \
echo OK, now run: sudo dd if=TinyBoot-9.0-sc.img of=YOUR-USB-DEV
(copy/paste as one line)
Windows USB installer:
- http://pcengines.ch/file/apu-bootable-usb-installer_v1.8.exe
- older core version included
- pce changes applied
Vanilla Windows USB installer (newer tinycore versions):
- get "core2usb" from SF and iso from http://distro.ibiblio.org/tinycorelinux/
- needs empty fat32 filesystem (no files!) or it will complain (
"Target drive is not empty"
) - if there's no fs etc and it cannot get free space you'll get
***ERROR***
- src: https://github.com/ha5di/core2usb/blob/master/core2usb.py
- changes needed to get serial console below (or download the ready made image above)
Might be a good idea set this up first, before messing with kernel.
menu entries in grub.cfg need: linux ... console=tty0 console=ttyS0,115200
In /etc/default/grub change:
GRUB_CMDLINE_LINUX="video=off elevator=deadline console=tty0 console=ttyS0,115200"
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --stop=1"
Run: update-grub
In /etc/inittab add at the bottom:
0:2345:respawn:/sbin/agetty -8 ttyS0 115200 vt100
At beginning of file add:
SERIAL 0 115200
CONSOLE 0
add to APPEND entries: console=ttyS0,115200n8
Extract: zcat core.gz | sudo cpio -i -H newc -d
In etc/inittab add: ttyS0::respawn:/sbin/getty -nl /sbin/autologin 115200 ttyS0
Compress: find | cpio -o -H newc | gzip -2 > core.gz
More info: