Operating Systems for IoT Embedded Systems
This post is an excerpt of the Chapter 4 of “Getting Started with Embedded Systems” in Building the Web of Things, a Manning book by Dominique Guinard and Vlad Trifa.
There are two broad categories of physical objects in the Web of Things: tagged objects and connected objects. The first category comprises various tagging technologies that are attached to a product, such as barcodes, QR codes, NFC or RFID tags, IR/AR and so on. In this case, objects are not directly connected to the web but only passively, because there’s a need for another device or application to interact with the product. Connected objects are directly connected to the Web of Things and are the world of embedded systems or embedded devices, which are essentially small, relatively inexpensive, low-power computers with limited resources and capabilities.
There are hundreds of embedded platforms out there some of them targeting hobbyists such as the Raspberry Pi, BeagleBoards, Intel Edison and the pioneer Arduino platform. On the other hand some of them are targeting industrial and large scale applications such as Marvell, Broadcom/Cypress, Texas Instruments, NXP and Qualcomm.
As you probably noticed on the table above, one thing that distinguishes these platforms is their operating system. To simplify, we can consider two categories of operating system (OS) that are used for embedded devices: real-time OS (RTOS) and, well, not so real-time OS! When it comes to embedded devices, the world of RTOS is dominated by FreeRTOS, an open source real-time operating system, although some viable alternatives exist such as Contiki, TinyOS, mbed OS, or the commercial Intel VxWorks. One of the drawbacks of a real-time OS is that it’s not very good at operating many tasks in parallel, which makes it hard to build complex layers offering simple abstractions. This is where a non-real-time OS can help. It becomes particularly helpful for things that are not so mission critical where user experience and features are more important than a constant, very fast response time.
In this world—even more than in the RTOS world—one operating system rules them all: Linux. Because of its very large community, plethora of tools, abstractions, and supported architectures, Linux is the ideal environment in which to start tinkering and innovating with IoT devices. But don’t get it wrong; it’s also increasingly a solid candidate for real-world and robust IoT applications such as for home automation or to build application gateways. It’s also worth noting that a number of projects offer modified versions of the Linux kernel to transform it into a real-time OS.
In the past few years, Linux has become such a popular operating system used on embedded devices that a project from the Linux Foundation called Yocto is now dedicated to creating custom Linux distributions for embedded devices. Similarly, Google has released Brillo, an extension of Android (which is built on Linux as well) for the IoT, and Ubuntu launched Ubuntu Core for the IoT. Ubuntu Core also shows an interesting way forward with containerization for IoT Operating Systems: allowing to deploy apps in containers, paving the way towards app stores for the IoT (imagine adding capabilities to that elevator after it has been installed in the real-world). In this space our friends at Resin.io pretty much lead the game: with their solution based on Linux Docker containers and we used these solutions to deploy our gateway, THNGHUB. It’s worth noting that although Linux is massively dominating, there are a few alternatives to Linux in this space such as Windows 10 for IoT.
In Building the Web of Things you’ll learn more about the specifics of embedded systems and you’ll learn how to install and customize Linux for platforms such as the Raspberry Pi, BeagleBone or Intel Edison.