A nice, cheap and tiny x86 embedded board that runs Linux and just consumes 1W. It has all the basic connectivity you need in an embedded system.
As you may already know, we maintain a list of attractive and Linux friendly embedded boards. Whenever we find a new board that is attractive and meets our strict criteria (supporting Linux or other free kernels, public pricelist, public documentation and website with an English version), we add this board to our list. This way, we don’t forget about any useful board, and we can offer useful guidance to our customers and to any embedded system developer looking for a suitable hardware platform.
Somebody at Bifferos.com has just contacted us to let us know about their Bifferboard product. Here are its announced features:
- 150MHz RDC CPU, Intel 486SX compatible
- 1 watt power consumption (200mA @5v)
- 68mm x 28mm x 19mm
- 32MB SDRAM/1MB Flash
- OHCI/EHCI USB 2.0
- 10/100 Ethernet
- Serial console 115200 baud
- 4-pin JTAG (can be used as GPIO)
- 2 GPIO (1 LED, 1 button)
- Linux 22.214.171.124 + OpenWrt
- 29 UK pounds
The board has two components: the CPU board, and the I/O one, offering Ethernet and USB host connectivity. For a serial port, you can order a special cable from their shop, which connects to a USB port on your workstation.
Thanks to its low power consumption, the Bifferboard can even be powered by USB. According to its makers, the board can do anything a NSLU2 device can do. It is just cheaper (approximately 33 EUR at the time of this writing).
Last but not least, most Bifferboard hardware can be emulated with QEMU.
While it could also be suitable for mass production projects, it can be at least a nice platform for prototypes, hobby, research and educational projects.
Of course, if you know about other attractive boards that we could add to our list, please post a comment or send us e-mail.
Here are the contributions that we made to the user and developer community in 2008, thanks to the customers who ordered our engineering and training services.
As you can see, we do our best to have all our contributions merged into mainline sources. So, if you need a new feature in the Linux kernel (supporting your new boards, for example), in development tools and libraries (Buildroot, QEMU…), and want to enjoy this feature in all future updates and releases, don’t hesitate to ask us. We will be glad to work with the community and find a long lasting solution.
- [x86] use ELF section to list CPU vendor specific code (commit)
- [MTD] fix minor typo in the MTD map driver for SHARP SL series (commit)
- [x86] configurable DMI scanning code (commit)
- [mm] directly use kmalloc() and kfree() in init/initramfs.c (commit)
- [x86] consolidate the definition of the force_mwait variable (commit)
- inflate: refactor inflate malloc code (commit)
- fs/buffer.c: uninline __remove_assoc_queue() (commit)
- [x86] make movsl_mask definition non-CPU specific (commit).
- [x86] move cmpxchg fallbacks to a generic place (commit)
- [x86] configuration options to compile out x86 CPU support code (commit)
- Configure out file locking features (commit)
- Fix comment in include/linux/mmc/host.h (commit)
- Configure out AIO support (commit)
- [PCI] allow quirks to be compiled out (commit)
- [x86] remove PC speaker code (commit)
- [Doc] improvement to Documentation/SubmittingPatches (commit)
- Work on multicast and ethtool configurability. Not merged yet.
- 65 e-mails sent to the kernel newbies mailing list to help new kernel developers.
Thomas Petazzoni became official committer in November 2008. In addition to contributions, patch review and integration of patches into the official Buildroot repository, and discussions on the mailing list.
- Thumb support, not integrated yet (post)
- Fixed URL for fakeroot sources, integrated (post)
- Bumped libpng version, integrated (post)
- Added the DirectFB examples package, integrated (post)
- Bumped up libgtk2 version, integrated (post)
- Work on external toolchain support, integrated. Several iterations, patches and discussions.
- External toolchain support improvements, integrated (post)
- More external toolchain fixes, integrated (post)
- External toolchain C++ cross-compiler fix, integrated (post)
- Kernel build fix related to external toolchain use, integrated (post)
- Fixed external toolchain build, integrated, and replaced later with an improved version (post)
- Fix Qtopia build issues, integrated and then replaced by an improved version (post)
- Another external toolchain support solution, integrated (post)
- Fixed TARGET_PATH for external toolchain builds, integrated (post)
- Fixed strange problems in pango configure target, integrated (post)
- Strip libgtk2 in the target, integrated (post)
- Strip pango libraries on the target, integrated (post)
- Strip gettext libraries on the target, integrated (post)
- Fix matchbox build, integrated (post)
- Create zlib installation directory in the staging dir, integrated (post)
- Bump up lite version, integrated (post)
- Added a parallel compilation fix for fontconfig, integrated (post)
- Documentation fixes (post, post)
- Increased write buffer size in pflash emulation, integrated (post)
- Reset wcycle after erase confirm, integrated (post)
- Improved pflash cfi01 debug messages, integrated (post)
- Added missing parenthesis in qemu_ram_alloc(), integrated (post)
- Add Flash support to the Versatile PB platform (post)
- Linux Tiny – Penguin Weight Watchers, Embedded Linux Conference 2008, United States
- Publication of an extensive report of the Embedded Linux Conference.
- Building a multimedia embedded Linux system from scratch, Linux Symposium, Canada
- Developing the Linux kernel: who? when? how? what?, Libre Software Meeting 2008, France
- News and trends in Linux 2.6, Libre Software Meeting 2008, France
- Choosing Free Software Graphical Libraries for Embedded Devices, ELC Europe 2008, The Nederlands
- Update on filesystems for flash storage, ELC Europe 2008, The Netherlands
- World domination for dummies (in French) and Filesystems for flash storage, JM2L event, France.
- Publication of videos from many technical conferences (Free and Open Source Developer European Meeting, Embedded Linux Conference, Libre Software Meeting, Ottawa Linux Symposium, Embedded Linux Conference Europe)
New training materials
All our training materials can now be found on our docs page. Some of them are not new, but have undergone substantial updates.
See our recent post for details.
We support organizations promoting Free Software:
You may also count our subscriptions to the most useful LWN.net resource.
A tiny embedded Linux system running on the qemu arm emulator, with a DirectFB interface, everything in 2.1 MB (including the kernel)!
This demo embedded Linux system has the following features:
- Very easy to run demo, just 1 file to download and 1 command line to type!
- Runs on qemu (easy to get for most GNU/Linux distributions), emulating an ARM Versatile PB board.
- Available through a single file (kernel and root filesystem), sizing only 2.1 MB!
- DirectFB graphical user interface.
- Demonstrates the capabilities of qemu, the Linux kernel, BusyBox, DirectFB, and
shows the benefits of system size and boot time reduction techniques as advertised and supported by the CE Linux Forum.
- License: GNU GPL for root filesystem scripts. Each software component has its own license.
How to run the demo
FAQ / Troubleshooting
- Q: I get
Could not initialize SDL - exiting when I try to run qemu.
That’s a qemu issue (qemu used the SDL library). Check that you can start graphical applications from your terminal (try
xterm for example). You may also need to check that you have name servers listed in
/etc/resolv.conf. Anyway, you will find solutions for this issue on the Internet.
How to rebuild this demo
All the files needed to rebuild this demo are available here:
- You can rebuild or upgrade the (Vanilla) kernel by using the given kernel configuration file.
- The configuration file expects to find an initramfs source directory in
you can create by extracting the contents of the rootfs.tar.7z archive.
- Of course, you can make changes to this root filesystem!
Tools and optimization techniques used in this demo
Software and development tools
- The demo was built using Scratchbox, a fantastic development tool that makes cross-compiling transparent!
- The demo includes BusyBox 1.4.1, an toolbox implementing most UNIX commands in a few hundreds of KB. In our case, BusyBox includes the most common commands (like a vi implementation), and only sizes 192 KB!
- The root filesystem is shipped within the Linux kernel image, using the initramfs technique, which makes the kernel simpler and saves a dramatic amount of RAM (compared to an init ramdisk).
- The demo is interfaced by DirectFB example programs (version 0.9.25, with DirectFB 1.0.0-rc4), which demonstrate the amazing capabilities of this library, created to meet the needs of embedded systems.
Size optimization techniques
The below optimization techniques were used to reduce the filesystem size from 74 MB to 3.3 MB (before compression in the Linux kernel image):
- Removing development files: C headers and manual pages copied when installing tools and libraries,
.a library files,
- Files not used by the demo programs:
libstdc++, and any library or resource file.
- Stripping and even super stripping (see sstrip) executables and libraries.
- Reducing the kernel size using
CONFIG_EMBEDDED switches, mainly from the
Linux Tiny project.
Techniques to reduce boot time
We used the below techniques to reduce boot time:
- Disabled console output (
quiet boot option,
printk support was disabled anyway), which saves time scrolling the framebuffer console.
- Use the Preset Loops per Jiffy technique to disable delay loop calculation, by feeding the kernel with a value measured in an earlier boot (
lpj setting, which you may update according to the speed of your own workstation).
All these optimization techniques and other ones we haven’t tried yet are described either on the elinux.org Wiki or in our embedded Linux optimizations presentation.
We plan to implement a generic tool which would apply some of these techniques in an automatic way, to shrink an existing GNU/Linux or embedded Linux root filesystem without any loss in functionality. More in the next weeks or months!