July 19, 2013

How to Install Linux on the Zealz GK802: A Quad Core A9 ARM on a Stick

The Zealz GK802 looks a bit like a long, over-wide USB pen drive. Under a removable clip at one end of the stick is a male HDMI connector ready to be plugged directly into a monitor or large TV. On the other end of the stick are two USB ports: a micro USB to supply power to the GK802 and a female USB connector to let you attach peripherals like a keyboard, mouse or hub. Being a small, contained stick with an HDMI connector the obvious use for the GK802 is consuming video media.

gk802 ARM boardInside the GK802 is a quad core Freescale i.MX 6 CPU at 1.2Ghz sporting 1GB of RAM and a Vivante GC2000 GPU. The GPU and video decoding acceleration of the GK802 are supported under Linux. Getting information to and from the GK802 is done over Wi-Fi and you can connect bluetooth devices to it in order to control the GK802.

Looking at the side of the GK802 you will see a microSD slot. A card clicks into place there contained well inside the GK802. If you remove the two screws near the HDMI plug you can slide the GK802 open, probably voiding your warranty in the process. Flipping over the GK802 you will see a second, internal microSD card which contains the Android image that came with your GK802. My unit came with an 8 GB Sandisk class 4 internal microSD card which contained Android 4.0.4.

How to Install Linux

In order to run a Linux distribution like Ubuntu, Debian, or Fedora on the GK802 you will likely have to open the hardware and change or modify the internal microSD card. If you want to do that you should only have to open it up once, permanently inserting a microSD card in the internal slot that instructs the device to boot from its externally accessible microSD card.

There are two parts to getting the boot to happen. First, install a customized uboot at a fixed location on the microSD card. Then setup a boot.scr file on the externally accessible microSD card telling uboot where to find the Linux kernal and start the ball rolling.

For testing I extracted the Xubuntu 12.04 root image and slightly modified the boot.cmd file to use 1080p as shown below. As you see in the example the boot.scr file is generated from the boot.cmd file using mkimage. Note that I was still booting off the internal microSD card slot. The dev/mmcblk0p1 line and the mmc and dev references in boot_normal need to change slightly if you are using this configuration on a card that will be inserted into the external microSD slot.

root@gk802:/# cat boot.cmd
setenv root '/dev/mmcblk0p1 rootwait'
setenv rootfstype 'ext4'
setenv kernel 'uImage'
setenv video 'mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24'
setenv extra ''
setenv boot_normal 'setenv bootargs console=${console} root=${root} rootfstype=${rootfstype} video=${video} ${extra};  mmc dev 0; ext2load mmc 0:1 0x10800000 /boot/uImage; bootm'
root@gk802:/# mkimage -A arm -O linux -T script -n "boot" -d boot.cmd boot.scr

Testing Video Playback

gk802 mini PC out of the boxAttempts to playback 720p video under Android 4.0.4 didn't work using XBMC. The same 720p files played back fine under Xubuntu using Totem. To stretch things on my Xubuntu install, I played the 1080p h264 version of Big Buck Bunny. I got a few stutters initially (around where the title of the movie appears) so copied the file to a local microSD card to retest. Playing from the microSD card, after one initial stutter I got clean playback, even during fast motion scenes. The GK802 was across the room from a D-Link DIR855 access point. Clearly network configuration, distances, and caching play a role when streaming 1080p content to a GK802 over Wi-Fi.

At idle with a 1080p desktop shown, the GK802 uses 3.1 watts. With 1 core at 100% power usage jumps to 3.8 watts. Compiling openssl using 4 cores power usage went up to 6.6 watts. OpenGL was a mixed bag, much of glmark2-es2 run in about 5.5 watts. The effect2d needed 7.6 watts. Toward the end of the OpenGL test I touched the GK802 and it was very hot to the touch.

Tune in next time for benchmarks on the GK802. A special thanks to Miniand for supplying the review hardware for this article. The Linux kernel for the GK802 is available on github. And the IRC channel #imx6-dongle on freenode. Documentation for the Freescale i.MX 6 is also available.