Linux is everywhere. Not only is it the foundation of this whole interweb thing but also it is in devices all around you. Things like DVD players, Satnav, phones and Wifi routers all have their own "Inner Penguin".
You will find Linux inside a wide range of devices today. Yet, it was not intended to be used as an embedded operating system at the beginning. In trying to understand how Linux moved out of the pure PC environment and into the fabric of our technology I have put together the following timeline showing what I consider to be the important milestones. I am aware that it is missing many details, and I would welcome feedback and comments from all who may read this. Either post a comment at the bottom or mail me at "chris dot simmonds at 2net dot co dot uk".
For those people who attended my lectures at the Embedded Live in Earl's Court, London this week, and for anyone else who is interested, here are my slides.
At the end of one of my training courses recently we got into a discussion about how to continue working with the code and configurations developed during the course after everybody had gone home and they no longer had a target board. I said, you could use qemu to emulate an ARM target that is rather similar to the one we actually use. Thinking about it a bit more, I realise that the situation is general and common enough to be useful to many people (or so I hope) and so I have written this tutorial.
In this article I will show you how to use Eclipse to cross compile a program and run it on a development board. I am running the Helios release of Eclipse on Ubuntu 10.04 but it will work as described on a wide variety of versions of Linux and Eclipse. My target board has an ARM 926JE core and I am using an Ångström toolchain and root file system (http://www.angstrom-distribution.org/) but once again the information is generic and should work with pretty much any embedded Linux target and toolchain.
Android is an interesting platform for embedded devices of many types, not just phones. There are ports for various development boards, including the Beagleboard. To get an idea of how easy it is to implement on a new platform, I ported it to the Digi Wi-i.MX51 Jumpstart board which I reviewed earlier (see http://www.embedded-linux.co.uk/hardware/ccwi.imx51). I will post full details to Inner Penguin later. In this article I just want to show the end result.
Android was developed initially as an operating system for smartphones, but now it is popping up in other devices such as netbooks, sat nav and ereaders, not to mention development boards like the ubiquitous Beagleboard. So, why would you choose Android over any other version of embedded Linux? I think it comes down to critical mass. Android is a known quantity, promoted by a well-known and wealthy organisation which creates a standard platform where non existed before. Whereas each implementation of Linux on an embedded device is (more or less) unique, implementations of Android are going to be (more or less) the same.
Recently I had a chance to try out this kit and I thought I would share my experiences.
This is an “SoM” (System on Module), based on a Freescale i.MX515 processor (ARM Cortex A-8), clocked at 800 MHz, with 512 MiB SDRAM and 512 MiB NAND flash. As such it is ideal for driving a graphical display or for multimedia processing, but it is also cheap enough for simpler tasks that just need a lot of compute power such as encrypted communications. The module itself is about the size of a business card:
For those people who attended my lectures at the Embedded Systems Conference in the UK this week, and for anyone else who is interested, here are my slides.
Linux flash file systems: JFFS2 vs UBIFS
Power saving in Linux devices
Why Linux is not an RTOS:porting hints
Hope you find them interesting: if not tell me about it...
It is very common for real-time applications to have tasks that need to run periodically, for example to scan inputs or to generate regular outputs. A crude solution is to use a processing loop with a sleep at the end, but the periodicity will vary as the execution time varies. To create accurate periodic tasks you need to use timers. In this article I will show how timers work in Linux, especially with regard to multi-threaded applications.