Unpacking and Assembling PC Engines' APU - Part 1

Leo Moll, April 30, 2014, 14:26:56

The great PC Engines Alix board has finally got a successor. Take a first look at the powerful APU.1C4 board, see how to assemble a complete system and follow my first steps with system installation.
Classic Alix 2D13 System

PC Engines' Alix board is one of the most interesting pieces of hardware if you want to setup your own custom, multifunctional, energy efficient and NSA-free routing and home control devices.

Apart of some ready to use specialised distributions like pfSense, one of the most intriguing features of the Alix board is the x86 compatibility which allows to install a huge choice of operating systems and/or Linux distributions.

Usage Scenario

In my multi-site infrastructure concept, all four remote sites have Alix based routers running Debian Wheezy with the following services:

  • Firewall and intrusion detection
  • OpenVPN to the central router in the data center providing both IPv4 and IPv6 internal and external connectivity for all sites
  • Wifi Access Point
  • DHCP and DNS
  • NAT UPnP server
  • PXE Boot system via BootP, TFTP and NFS
  • Collection of system metrics (own solution based on rrdtool and munin for infrastructure wide statistics)
  • Video surveillance (modified motion package)

In addition to this, one site runs some additional services:

  • IpTV multicast distribution across the site (igmpproxy)
  • Site local PBX connected to the main PBX in the data center (Asterisk) providing additional landlines to the other sites
  • Home automation (FHEM and additional modules)

These additional services take the Alix board to its limits. The main bottlenecks are the small memory (256 MB) and the low I/O performance (Fast Ethernet/Compact Flash Disk) of the system.

The Successor of Alix

It was great news when PC Engines announced the successor of the Alix board: the APU. The form factor of the board is the same as of the Alix 2D and 6F series (6x6 inch - 152.4x152.4 mm). The power consumption is a little bit higher (6-12 W in comparison to 5-7 W of the Alix 2D13) but you get a lot of additional power:

The rear side of the APU board with CPU, south bridge and SIM slot
  • AMD G series T40E APU, 1 GHz dual core (Bobcat core) with 64 bit support, 32K data + 32K instruction + 512KB L2 cache per core
  • 2 or 4 GB DDR3-1066 DRAM
  • Boot from SD card (connected through USB), external USB or m-SATA SSD
  • 2x miniPCI express (one with SIM socket for 3G modem), LPC bus, GPIO header, I2C bus, COM2 (3.3V RXD/TXD).
  • 3x Gigabit Ethernet (Realtek RTL8111E).

With these characteristics, the APU.1C and APU.1C4 are worthy successors of the Alix series and the perfect solution for my main site in order to host some additional services like:

  • TV and PVR server (tvheadend)
  • Database Server (hosting the central database for all XBMC instances)
The APU Bundle: Packaging
The APU Bundle: Contents

Sooner as expected, the APU.1C4 (4GB) was available here in Germany and today I got one of the first available bundles. The bundle was delivered in a nice packaging containing:

  1. An APU.1C4 mainboard
  2. Aluminium enclosure (case1d2u)
  3. Heat conduction accessories
  4. 16GB SSD m-SATA module
  5. Power supply

Since both the CPU and the south-bridge need cooling, it is not possible to operate the APU board without any cooling arrangement. The board needs to be assembled into the enclosure using the provided heat conduction accessories in order to provide the needed passive cooling.

Cooling: Heat spreader pads - front and read side
Cooling: Removed transparent foil
Cooling: Applied to CPU and south bridge
Cooling: Removed blue foil
Cooling: Aluminium heat spreader
Cooling: Final assembly

The bundle contains two small adhesive heat spreaders and one aluminium heat spreader that have to be carefully assembled. Before assembling the board, you have to remove the two hex nuts from the DB9 serial connector. The next step is to apply the two adhesive heat spreaders. The heat spreaders have a distinct orientation: you have to peel first the transparent backing foil and apply them to the CPU and the south bridge. Then you can remove the blue backing foil and apply the aluminium heat spreader. After this you can peel the cover foil from the aluminium heat spreader and carefully feed the board DB9 and LAN connectors through the openings of the enclosure.

A detailed and illustrated description of the assembly procedure can be found on the PC Engines site

After this you can fix the board with the four screws and the hex nuts on the DB9 connector.

Connectors: Serial DB9, 3x Ethernet 1000, 2x USB, Power

The MSATA module can now be installed in the correct slot. Be careful! Only one of the three slots is intended for MSATA SSD modules!

m-SATA Mounting
m-SATA Mounting

Initial Power-On

Time to power up the device for the first time. But careful! Unlike the Alix board, the serial interface is initialized to 115200 Baud. Remember to reconfigure your terminal before powering up...

PC Engines APU board rev ID = 0/1
Reading data from file [bootorder]
SeaBIOS (version ?-20140321_160418-frink)
SeaBIOS (version ?-20140321_160418-frink)
Found coreboot cbmem console @ df150400
Found mainboard PC Engines APU
Relocating init from 0x000e8e71 to 0xdf1065e0 (size 39259)
Found CBFS header at 0xfffffb90
found file "bootorder" in cbmem
CPU Mhz=1001

Great. But SeaBIOS (version ?-20140321_160418-frink)? According to the product page, the latest BIOS update is dated 04/05/2014 - we should update it, since we are at the beginning of the product life cycle and we may still expect many bugs to be fixed...

Update the BIOS

In order to update the BIOS, we have to prepare an SD card with TinyCore Linux installer. Let's go:

linux-dev-64 ~ # mkfs.vfat /dev/sdc1
mkfs.vfat 3.0.12 (29 Oct 2011)
linux-dev-64 ~ # dd if=/usr/lib/syslinux/mbr.bin of=/dev/sdc
0+1 records in
0+1 records out
440 bytes (440 B) copied, 0.329814 s, 1.3 kB/s
linux-dev-64 ~ # syslinux --install /dev/sdc1
linux-dev-64 ~ # mkdir temp
linux-dev-64 ~ # mount /dev/sdc1 temp
linux-dev-64 ~ # wget http://www.pcengines.ch/file/apu_tinycore.tar.bz2
--2014-04-30 13:49:28--  http://www.pcengines.ch/file/apu_tinycore.tar.bz2
Resolving www.pcengines.ch (www.pcengines.ch)... 213.133.104.38
Connecting to www.pcengines.ch (www.pcengines.ch)|213.133.104.38|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17172921 (16M) [application/x-bzip2]
Saving to: `apu_tinycore.tar.bz2'

100%[============================================>] 17,172,921   925K/s   in 20s

2014-04-30 13:49:49 (826 KB/s) - `apu_tinycore.tar.bz2' saved [17172921/17172921]
linux-dev-64 ~ # wget http://www.pcengines.ch/file/apu140405.zip
--2014-04-30 13:52:59--  http://www.pcengines.ch/file/apu140405.zip
Resolving www.pcengines.ch (www.pcengines.ch)... 213.133.104.38
Connecting to www.pcengines.ch (www.pcengines.ch)|213.133.104.38|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 617415 (603K) [application/zip]
Saving to: `apu140405.zip'

100%[============================================>] 617,415     1.04M/s   in 0.6s

2014-04-30 13:53:00 (1.04 MB/s) - `apu140405.zip' saved [617415/617415]
linux-dev-64 ~ # tar xjf apu_tinycore.tar.bz2 -C temp
linux-dev-64 ~ # unzip apu140405.zip -d temp
Archive:  apu140405.zip
linux-dev-64 ~ # rm apu_tinycore.tar.bz2 apu140405.zip
linux-dev-64 ~ # umount temp
linux-dev-64 ~ # rmdir temp

Slide the SD card into the slot, power on the APU and go:

PC Engines APU board rev ID = 0/1
...
Searching bootorder for: /rom@genroms/pxeboot.rom

Build date: Mar 21 2014
System memory size: 4592 MB

Press F12 for boot menu.

Searching bootorder for: HALT
drive 0x000f24e0: PCHS=0/0/0 translation=lba LCHS=992/16/63 s=1000448
drive 0x000f2510: PCHS=16383/16/63 translation=lba LCHS=1024/255/63 s=31248704
Space available for UMB: c1000-ee800, f0000-f24e0
Returned 245760 bytes of ZoneHigh
e820 map has 7 items:
  0: 0000000000000000 - 000000000009fc00 = 1 RAM
  1: 000000000009fc00 - 00000000000a0000 = 2 RESERVED
  2: 00000000000f0000 - 0000000000100000 = 2 RESERVED
  3: 0000000000100000 - 00000000df14c000 = 1 RAM
  4: 00000000df14c000 - 00000000e0000000 = 2 RESERVED
  5: 00000000f8000000 - 00000000f9000000 = 2 RESERVED
  6: 0000000100000000 - 000000011f000000 = 1 RAM
enter handle_19:
  NULL
Booting from Hard Disk...
Booting from 0000:7c00

SYSLINUX 4.05 20120131 Copyright (C) 1994-2011 H. Peter Anvin et al
Loading vmlinuz.....
Loading core.gz...............ready.

  ____   ____   _____             _
 |  _ \ / ___| | ____|_ __   __ _(_)_ __   ___  ___
 | |_) | |     |  _| | '_ \ / _` | | '_ \ / _ \/ __|
 |  __/| |___  | |___| | | | (_| | | | | |  __/\__ \
 |_|    \____| |_____|_| |_|\__, |_|_| |_|\___||___/
                            |___/

TinyCore www.tinycorelinux.com

searching for home directory ...

Welcome to TinyCore running on APU
To update the BIOS type "flashrom -w apu140405.rom"

[+51.9 C][root@box:/mnt/sdb1]$

What a nice CPU temperature prompt! And before booting it makes a loud beep... Great 80's feeling! And now let's update the BIOS and pray:

[+52.6 C][root@box:/mnt/sdb1]$ flashrom -w apu140405.rom
flashrom v0.9.7-r1711-APU on Linux 3.8.13-tinycore (i686)
flashrom is free software, get the source code at http://www.flashrom.org

Using default programmer "internal".
Calibrating delay loop... OK.
coreboot table found at 0xdffdf000.
Found chipset "AMD SB7x0/SB8x0/SB9x0". Enabling flash write... OK.
Found Macronix flash chip "MX25L1605A/MX25L1606E" (2048 kB, SPI) at physical address 0xffe00000.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.

Praise the Lord! Let's see if everything went well...

[+57.5 C][root@box:/mnt/sdb1]$ reboot
[+54.0 C][root@box:/mnt/sdb1]$
PC Engines APU BIOS build date: Apr  5 2014
...
Searching bootorder for: /rom@genroms/pxeboot.rom

Build date: Apr  5 2014
System memory size: 4592 MB
...

And that's all for our first encounter with this fabulous device. Stay tuned: in part 2 I will mount the Wifi components and make the first steps for creating a minimal PE system.

Author:
This page was last updated on April 30, 2014, 15:52:53