User:Mjhammel

Notes on BeagleBox, a Buildroot-based distribution for the BeagleBoard. These notes explain what software is used for this distribution and why it was chosen.

BeagleBox is a metabuild system. It downloads other packages, unpacks and patches them, then runs them to generate various components required to create an embedded distribution for the BeagleBoard (and, eventually, the PandaBoard). There are a number of top level components:
 * Cross Toolchain
 * Bootloader
 * Linux Kernel
 * TI's SGX Graphics Package
 * Root file system

BeagleBox is currently targed, for the BeagleBoard, as a media system. However, these notes cover what's required for a core distribution that can be extended to any specific project with support for as much of the BeagleBoard hardware as possible.

Cross Toolchain
Current version: 1.15.2

The toolchain is built using Crosstool-NG, which makes selection of components of the toolchain as easy as configuring the Linux kernel. NEON support is included, using softfp. The toolchain cannot use hardfp due to the binary distribution of components in the SGX package that require a softfp toolchain. Use of softfp will have an effect on performance, but there is no choice until the SGX release provides hardfp binaries or source to allow building for either.

Due to some difficulties encountered with ns* functions when trying to build connman (an embedded version of NetworkManager), the toolchain uses glibc instead of uClibc.

The cross toolchain could be built using Buildroot, but BeagleBox builds it separately. This is so that the toolchain can be packaged for the host system as an RPM and installed under /opt. That makes it easier to work with cross compiling add-on packages in the future for use on BeagleBox.

Bootloader
Current version: DENX 2011.09

The stock u-boot distribution supports all the features required for use with BeagleBox. The bootloader is also built separate from Buildroot, mostly to make it easier to rebuild at will using common build targets (-clean, -clobber).

Linux Kernel
Current version: 3.2.23 (kernel.org)

This release of the kernel has most BeagleBoard support integrated into the configuration system. Only the SGX kernel support must be handled outside of the kernel build. No BeagleBoard specific patches are currently applied, though Angstrom may offer some of value that can be integrated later.

TI's SGX Graphics Package
Current version: 4_06_00_03

The SGX package provides hardware accelerated graphics support, specifically for use with OpenGL ES2. The package is released as an installable binary downloadable from TI's web site. The build pulls this package, unpacks it and runs the build contained within it to generate a tree that is then copied into Buildroot's custom package skeleton. From there it is picked up by the Buildroot build.

Once in the Buildroot-generated root file system, there is additional work to be done when the target is booted. An install script must be run once to generate symbollic links and prep the rootfs for use with SGX. It should be possible to run this from the host build process - the install script suggests it supports this. But it doesn't work. So BeagleBox has a firstboot init script that handles the one-time installation on the first boot of the target.

SGX support is provided for both the frame buffer and Xorg. The default environment on boot is Xorg.

Root file system
Current version: 2012.05

The root file system is generated using Buildroot. The tools selected are primarily aimed at supporting a media server. Gstreamer and the tidsp binaries are enabled for video playback. dBus is enabled to support Connman for managing network connections, along with wpa_supplicant.

Select x11r7 packages are patched to bring their revision up to the level required by the SGX binaries. Synergy is enabled to allow remote systems to control the Xorg session.

A few additional packages have been added that are not part of Buildroot: BUI (a fork of the Matchbox environment), surf (a WebKit enabled browser).

What's still in progress
Audio support has not been investigated as of yet.

DSP support, required for video playback. At the moment I'm using the DSP staging drivers in the kernel and the DSP user space support in Buildroot. This should probably work (and I think it actually did work at one point) but it's not working right now.

Future development will be in user space, integrating the ARM Flash player (if I get permission to use it) into one or more web browsers and then working on BUI, which is the user experience layer that I hope to make similar to the Sony Bravia TV I have.