Jump to content
From ArchWiki

PC Engines is a Swiss hardware manufacturer for embedded x86 devices.

## apu2c4

This document describes how to install Arch Linux to the SSD via an SD card or USB flash drive.

### Hardware

CPU: AMD Embedded G series GX-412TC, 1 GHz quad Jaguar core with 64 bit

RAM: 4GB DRAM with ECC

Note: Remove the screws from the serial port first!

Assemble the device with care and read the guide for the cooling system!

### Setup preperations

- You need a serial (RS-232) connection to the APU to control it.
- Add your user to uucp.
- Install picocom or something similar, see Working with the serial console#Making Connections.
- Download and verify the installation image.

### Boot the system

To see the BIOS use this command:

    $ LANG=C picocom --baud 115200 /dev/ttyUSB0

If your device does not boot from the SD card or USB flash drive, press `F10` during boot to bring up a boot menu. Then close picocom with `Ctrl+a` `Ctrl+q`

Reconnect to the Archiso GRUB:

    $ LANG=C picocom --baud 38400 /dev/ttyUSB0

Enter CLI mode by pressing `Tab`, and append the following kernel parameter to the line:

    console=ttyS0,115200

Press `Enter`.

Now exit picocom and reconnect with the first command again to switch to the higher baud rate of 115200. Finally wait for about 30 seconds and you will get a colorful boot prompt.

### Install the system

The most comfortable way to install Arch now is to start the ssh server and use the installation guide.

You may need to get a new IP with dhclient and start `sshd.service`.

One possible layout of the SSD maybe looking like this:

     /dev/sda1           2048   264191   262144  128M 83 Linux
     /dev/sda2         264192 25430015 25165824   12G 83 Linux
     /dev/sda3       25430016 31277231  5847216  2.8G 82 Linux swap / Solaris

It is a good idea to use a MBR layout with GRUB:

    # grub-install --target=i386-pc /dev/sda
    # grub-mkconfig -o /boot/grub/grub.cfg

If using Syslinux, make sure to provide a `console` option in the boot menu:

    /boot/syslinux/syslinux.cfg

    LABEL arch
        MENU LABEL Arch Linux
        LINUX ../vmlinuz-linux
        APPEND root=UUID=1ef5a2eb-1908-4929-9b91-f6c4183695ac rw console=ttyS0,115200
        INITRD ../initramfs-linux.img

See also Working with the serial console#Configure console access on the target machine.

Remember to remove the SD card or USB flash drive after you finished your setup.

### LED Control

While there are 2 mainline kernel drivers (`leds-apu` and `pcengines-apuv2`) that can control the LEDs on various APU models, if you are running mainline PC Engines firmware it is advised to let ACPI handle LED control. In conjunction with the `ledtrig_netdev` module, the APU LEDs can be controlled through the following sysfs entries:

    /sys/class/leds/apu2:green:led1
    /sys/class/leds/apu2:green:led2
    /sys/class/leds/apu2:green:led3

#### Module Handling

You will have to manually load `ledtrig_netdev`. You also want to blacklist both `leds_apu` and `pcengines-apuv2`.

#### Example Configuration

A common use case is to use the APU as a wireless router. In this scenario, one wired NIC (`wan0`) is connected upstream to an ISP and the remaining wired & wireless NICs are bridged (`br0`) together as the LAN. A typical LED configuration using the netdev trigger might be:

    LED1: power on / power off indicator
    LED2: upstream network (wan0) traffic indicator
    LED3: local network (br0) traffic indicator

To enable this setup:

    echo "1" > /sys/class/leds/apu2:green:led1/brightness
    echo "netdev" > /sys/class/leds/apu2:green:led2/trigger
    echo "wan0" > /sys/class/leds/apu2:green:led2/device_name
    echo "1" > /sys/class/leds/apu2:green:led2/tx
    echo "1" > /sys/class/leds/apu2:green:led2/rx
    echo "netdev" >  /sys/class/leds/apu2:green:led3/trigger
    echo "br0" >  /sys/class/leds/apu2:green:led3/device_name
    echo "1" >  /sys/class/leds/apu2:green:led3/tx
    echo "1" >  /sys/class/leds/apu2:green:led3/rx

Note: Writing to the `trigger` sysfs entry must be done first as this is what enables the `device_name`, `tx` `rx` entries.
Tip:

- View triggers supported by the currently loaded modules: `cat /sys/class/leds/apu2:green:led1/trigger`.
- Additional trigger modules are available here: `/lib/modules/$(uname -r)/kernel/drivers/leds/trigger`.

#### Persist Configuration

Systemd automatic module loading and tmpfiles.d can be used to persist this configuration across restarts.

    /etc/modules-load.d/ledtrig-netdev.conf

    ledtrig_netdev

    /etc/tmpfiles.d/leds.conf

    #Power on/off
    w /sys/class/leds/apu2:green:led1/brightness - - - - 1
    #WAN activity
    w /sys/class/leds/apu2:green:led2/trigger - - - - netdev
    w /sys/class/leds/apu2:green:led2/device_name - - - - wan0
    w /sys/class/leds/apu2:green:led2/tx - - - - 1
    w /sys/class/leds/apu2:green:led2/rx - - - - 1
    #LAN activity
    w /sys/class/leds/apu2:green:led3/trigger - - - - netdev
    w /sys/class/leds/apu2:green:led3/device_name - - - - br0
    w /sys/class/leds/apu2:green:led3/tx - - - - 1
    w /sys/class/leds/apu2:green:led3/rx - - - - 1

## Firmware

The APUx devices use coreboot firmware, not UEFI. To update the firmware on APU2/3/4/5 devices, use flashrom:

    # flashrom --programmer internal --read old.rom --output read-old.txt
    # flashrom --programmer internal --write new.rom --output write-new.txt
    # systemctl poweroff

Then unplug and replug. If a full reboot is impossible, e.g. because firmware is being updated remotely, workarounds are available. For details, see:

- APUx firmware flashing
- APUx firmware downloads

Category:

- Hardware