Emdebian vision

In the Emdebian vision someone wishing to build a GNU / Linux based device would:

  1. Port the linux kernel to their hardware (including writing any specific device drivers).
  2. Select the prebuilt emdebian packages needed to support their application.

  3. Package their application as Debian package(s) using Debian and Emdebian tools.
  4. Build a root filesystem using Emdebian tools from the steps above.

Emdebian is involved in steps 2,3,4 above (there are far too many embedded device hardware variations to make prebuilt kernels practical).

Thus EmDebian is a binary distribution for embedded devices (whereas most of the other contenders in this space are source distributions [of course being Debian and open source the source code is still available if required].

What emdebian does

In short, what EmDebian does is wrap around the regular debian package building tools to provide a more fine grained control over package selection, size, dependencies and content to enable creation of very small and efficient debian packages for use on naturally resource limited embedded targets.

We adapt Debian tools so you can build/cross-compile Debian packages or adapted packages with info on how to cross-build and build smaller packages.

We currently have two separate distributions - a post-processed binary-compatible distribution called Emdebian Grip for intermediate installations and a much smaller, much more involved cross-built distribution called Emdebian Crush. Each distribution can be further optimised for systems that would benefit from a static configuration by removing the maintainer scripts - this flavour is called Emdebian Baked.

Emdebian is experimenting with different approaches to cross-building and small-system-friendly packages in order to produce sustainable and robust long-term solutions. For cross-building there are two main approaches: Scratchbox (pkg), which allows cross-builds to appear to be native to the apps being built, and dpkg-cross (pkg) which allows conventional cross-builds to occur in a Debian-compatible way using emdebian-tools (pkg).

For package meta-data making packages more suitable for shrinking, two approaches are currently being investigated. The STAG approach uses a $(DEBIAN_DIR) directory to overlay changed info from the /debian directory, and is used by STAGE. The udeb approach of Debian-installer gives a tighter integration with Debian, with embedded packages having changed names so they can exist in the debian package namespace. Both mechanisms have pros and cons which are discussed in EmdebianMetaData.

New packages can be added to Grip using the emdebian-grip-server package. Adding new packages or new architectures to Crush is currently stalled until the EmdebianCodeAudit can be completed in order to resolve issues around packages with modified functionality.

Distribution status

Crush 2.0 is currently stalled due to build system problems - see EmdebianCrush for details of why, how this could be fixed and current experiments. If things stay as they are, there will be no release of Crush 2.0 (based on Debian 6.0 "squeeze"), instead development will target Crush 3.0 (based on Debian 7.0 - wheezy), reliant upon delivery of an implementation of Multiarch with sufficient support for cross-building.

Grip development is continuing. Grip 2.0 has been released alongside Debian 6.0 "squeeze" on six architectures (armel, mips, mipsel, i386, amd64, powerpc) and with some 2,000 packages. Work is ongoing alongside Debian for Emdebian Grip 3.0 based on Debian GNU/Linux 7.0 Wheezy.

Baked is as ready as it can be - Baked is primarily a do-it-yourself distribution but some starter packages are available.

Project Website


August 17th 2006: The server has moved to a new machine in Europe instead of the US.

Wiki SiteMap

Emdebian Web Layout

Frequently Asked Questions (FAQ)


Quick Start Guide



EmdebianTracker - quick notes about issues that need a fix within the Emdebian packages (issues unrelated to cross building). e.g. a postinst script that calls a binary that is not available or with an unknown option, conflicts between packages that only show up when Essential is ignored, extra dependencies needed when Essential is ignored, etc.)

Code Audit

EmdebianCodeAudit - coordinating a complete audit of all patches required for Emdebian Crush 1.0 to support the implementation of the patches within the relevant Debian packages.



Example workflows


Wiki pages in continuous devel



Cross Toolchains

Emdebian builds cross-toolchains for use on standard Debian development machines. Repository details. Toolchains for Etch.


EmdebianPackagingGuidelines is a document explaining to package maintainers the sorts of things they should be aware of in their packaging to make their packages 'Embedded-friendly'. This includes cross-building and small-system-building.

Embedded Debian Packaging Infrastructure explains how the Emdebian repositories are organised, where the repositories are located and how to setup your system for emdebian uploads.

Emdebian packaging rules details how emdebian packages should be built and organised.

How Grip relates to Crush

Building packages for Crush (for the EmdebianCodeAudit) now bases the final package on the Grip processing. i.e. the package is cross-built for Crush with limited changes and then the cross-built package is run through the Grip scripts to remove documentation, examples, handle Emdebian TDebs etc. This reduces the number of changes that need to be made in the patches for Crush, simplifying the patches and the build process. As the Audit proceeds, the patches necessary to allow the packages to be cross-built at all will be fed back to Debian via the BTS and included into the packages via maintainer uploads or, if necessary, with NMU's by Emdebian developers. The aim is to reduce the number of patches to only those necessary for the functional changes needed for Crush:

This should allow many Debian packages to be cross-built without special tools and without external patches, with compliance to EmdebianPolicy being achieved after the cross-build is complete.

Multiarch and cross-compile

The goal is that both native and cross-compile behave the same, use files in the same location and use the same compiler flags. This is comparable to setting sysroot=/ now.

Current situation: all -*-cross debs, no multiarch







Soon: all -*-cross debs, some multiarch -*-cross debs







Since multiarch libfoo for foreign archs can't be installed with current dpkg they must still be converted to -*-cross packages by dpkg-cross. That involves moving files out of the multiarch directories into the old cross compile dirs and adjusting .pc and .la files.

Multiarch transition: some -*-cross debs, some -*-cross dummy debs, some multiarch debs


/usr/include + /usr/include/triplet + /usr/triplet/include


/lib/triplet + /usr/lib/triplet + /usr/triplet/lib


/usr/lib/triplet/pkg-config + /usr/triplet/lib/pkg-config

This starts when dpkg can install multiarch libfoo for foreign archs. Dpkg-cross will convert multiarch libfoo to a dummy libfoo-arch-cross that depends on libfoo:arch (= ver) and is completly empty. The dummy libfoo-arch-cross has 2 jobs: Pull in libfoo:arch on upgrade and satisfy reverse dependencies. Over time the reverse dependencies will change to use libfoo:arch directly.

For gcc you have this behaviour already with sysroot=/. But libtool, pkg-config and probably some more will need to be adjusted to this.

Long term goal: no -*-cross debs, all multiarch


/usr/include + /usr/include/triplet


/lib/triplet + /usr/lib/triplet




Things that need doing are:

Set-up a buildd inside scratchbox

Document setting up the buildd so developers and non-developers can try it out for themselves.

Integrate ?uclibc in the story. This will definitely give some size boost toward smaller footprint to the packages.

Once we have proven that this works start pushing things into Debian proper.

Optional :

See also: EmDebian/DeBootstrap and EmDebian/CrossDebootstrap .

Wacky Ideas

There are also a few ideas that may need to be investigated further to decide whether it is a good idea to make them a new TODO item. These are collected on the EmdebianWackyIdeas page.

Donations / Donors

Emdebian Donations and Donors

Meetings, Conferences, Work Sessions

There are IRC meetings roughly every two weeks, for details please see Emdebian/Meetings


February 7th-8th in Brussels, Belgium Fosdem2009


September, Extremadura Work Meeting EmdebianWorkSessionExtremadura2008

June, TCL work session

February 23rd-24th in Brussels, Belgium http://fosdem.org/2008/


June 17-23rd, in Edinburgh, Scotland. DebConf7

February 24&25th, in Brussels, Belgium. Fosdem2007


October 25&26th, in London, UK. London Linux World Expo

May 14th - May 21st, in Mexico. DebConf6EmdebianStuff

April 12-16th, in Extremadura, Spain. DebianEmbeddedWorkSessionExtremadura2006

February 25&26th, in Brussels, Belgium. Fosdem Fosdem2006

CategoryPermalink CategoryEmdebian