GeeXboX

Introduction
GeeXboX is a embedded Linux distribution focused on multimedia and video playback. It is available for regular x86-based and PowerPC-based computers and ARM embedded devices. GeeXboX comes with its own multi-architectures toolchain and cross-compilation engine. It is fully customizable and provides 400+ multimedia packages. It relies on a state-of-the-art embedded Linux system: BusyBox, uClibc/Glibc/eGlibc, and media players such as MPlayer, Xine or Gstreamer. It can be configured to run with or without X Windowing system. Its frontend Media Center application is called Enna

ARM Supported Hardware
GeeXboX has its own toolchain and can be configured for endless configuration and ARM chips. By default, it generates ARMv7 compatible code, with Cortex-A8 and NEON optimizations.

It currently fully support OMAP3-based boards, including (out-of-the-box):


 * BeagleBoard
 * IGEPv2 Board
 * TechNexion TAO-3530 Thunder Board

Support for other OMAP3-based boards might be added by kernel patches and extended configuration.

Support for OMAP4-based boards is expected is a short-coming future.

Featured Optimizations
GeeXboX features multiple software optimizations to get the best our of the available hardware capabilities.


 * NEON optimizations: enabled by default through GCC flags and ASM routines in Evas compositing and rendering library, FFmpeg set of software video decoders and X.Org video driver (omapfb).
 * Multi-cores optimizations: Only relevant on Cortex-A9 cores. Enabled Evas asynchronous rendering and FFmpeg MPEG-2 and H.264 video decoding.
 * C64x DSP: Raw DSP access through GStreamer plugin (WIP) for MPEG-2, VC-1 and H.264 video decoding.
 * OpenMAX: Support for video decoding abstraction in GStreamer (WIP) and VLC (WIP).
 * OpenGL|ES: Support for OpenGL|ES engine through PowerVR SGX chip in Evas. Due to SGX limited bandwidth and fillrate, h/w graphic rendering is not much faster than s/w rendering but at least completely offload CPU.

Retrieving GeeXboX
'''Note: The development branch is where the development work takes place and you should use this if you're after to work with the latest cutting edge developments. It is possible trunk can suffer temporary periods of instability while new features are developed and if this is undesirable, it is recommended using one of the release branches. Use ONLY for development purposes.'''

GeeXbox uses Mercurial as a revision control system, so you will install the mercurial package for your host system. On an Ubuntu-based system this will be done with,

# sudo apt-get install mercurial

Now, the first thing you will do is download the sources from Mercurial GeeXboX repository.

# hg clone http://hg.geexbox.org/geexbox

Building Sources
Next, configure geexbox for omap3 based architecture. Run

$ make menuconfig

and set

General Setup -> Target architecture (arm) -> Target sub-architecture (ARMv7 / Cortex) -> Target platform (OMAP3) -> Target CPU (cortex-a8)

Finally build the distribution with

$ make flat

The result will be in geexbox-flat-devel-*.arm.eglibc directory

Installation on SD Card
First prepare the SD card the following way:


 * create one boot FAT32 (type 0B) partition, any size, I took 8MB
 * create one rootfs EXT2 partition.

Then copy the uImage file to FAT32 partition

# cp geexbox-flat-devel-*.arm.eglibc/boot/uImage  /media/boot

N.B: If running on IGEPv2 board, also copy the boot.ini file, it contains the whole U-Boot set of commands for automatic bootup.

# cp geexbox-flat-devel-*.arm.eglibc/boot/boot.ini /media/boot

Next, edit the geexbox-flat-devel-*.arm.eglibc/etc/video file and enable/disable OpenGL support

OPENGL=[yes|no]

Finally, copy the geexbox-flat-devel-*.arm.eglibc contents to EXT2 partition.

# fakeroot cp -dpfa -R geexbox-flat-devel-*.arm.eglibc/* /media/rootfs/

Booting
If your board doesn't support automatic boot through boot.ini, you can setup the following U-Boot environment variables.

setenv geexbox-args "console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait init=/linuxrc lang=en keymap=qwerty remote=default_remote receiver=default_receiver hdtv" setenv omap-args "omapfb.mode=dvi:1280x720MR-32@60 omapfb.vram=0:8M,1:4M mem=442M" setenv bootargs "${geexbox-args} ${omap-args}"

Adapt the resolution and memory to your given board.

Then boot the distribution from MMC:

fatload mmc 0:1 80100000 uImage bootm 80100000

Troubleshooting
If you want to contribute to GeeXboX or need some help, you can subscribe to the development list (devel at geexbox.org).