Bites

"If you want to hack-a-bone you have to bite!"

We have these next biting exercises in mind, although the only one currently avaiable through the web is the Embedded Linux Training.


Linux Introduction (Available if it is demanded)

If you do not have experience working with a Linux system at command line level, we offer you an introduction to the basic concepts and how to interact with the system through a shell. We do not try to cover every single part of the Linux environment but to help you to enter in this world through exercises and (we hope) nice and clear explanations. It will be up to you to dig on some of the concepts or the commands you are more interested in.

Embedded Linux

Linux is everywhere from supercomputers to small devices. We will cover the main components used in embedded systems: bootloaders, kernel and root file system. Each one is complex by itself and we will try to explain what they are for and how to work with them. The root file system (RFS) is likely the most important one and where your decissions can have a bigger impact. We will see not just how to build an embedded Linux system but how to do the maintenance once it is on production. Also some concepts related to optimization, real time, security and debugging are covered.

Kernel Device Drivers

Most of the code at the Linux kernel source tree is from device drivers. The kernel offers an API for device driver development along with a Linux Device Model which helps for initialization, hot plugging and power management. We will present the kernel API and how to implement device drivers with Linux. The complexity of a device driver depends mostly on the device functionality. Learning through examples, from the simplest to more complex ones, will help you to face the learning curve. And you will be able, if interested, to implement and test some drivers for the Carbone project.

Real Time programming

Deterministic behaviour is a requeriment for some embedded systems, mostly those doing some sort of machine control or data acquisition. Linux is not designed for this deterministic behaviour, kwown as real time programming, but there are a good number of embedded systems with this real time requeriment, and using Linux. We will show you how Linux implements the functionality required for this kind of programming, and how to use the API for time-based programming. And of course, we will see how the RTPreempt patches make Linux a more deterministic operating system. Another approach to achieve deterministic with Linux is through virtualization: we will introduce RTLinux, a hard real time microkernel, which was the first system using interrupts emulation for coexisting with the Linux kernel in the same machine.

Linux programming

Nowadays there exist possibilities for connecting an embedded system to the Internet, or maybe closed networks but using same Internet protocol. How Linux works with the network, offering an interface to user space, is important for understading things like performance and security. But this training is not specifc about embedded Linux. The same networking possibilities are there which Linux based supercomputers or cloud computing rely on, and even some not usually seen in those sectors. We will explain you how Linux does networking, how packets are send and receive, kernel configuration options, firewaill, virtualization, ... . Maybe your current Embedded Linux project is a small one, but do not dismiss this knowledge for future ones.

Linux security

Is it necessary to say how important is this aspect in the current technology world? With Linux you can control what is happening in your system. It is not easy and it depends on the complexity and amount of things going on, but in the embedded Linux world this is the idea: to have the control. We do not have black boxes and the kernel has a good amount of possibilities for harnessing all that control power. We will cover how embedded systems boot in a Secure way, where Linux is one part of that Secure Boot. We will introduce the kernel options and user space tools for knowing what is going on, or in other words, if the system is doing something not expected like a process creating another one which turns out to be an ssh client in reverse tunneling mode or maybe accessing a directory it should not. Protecting the system is important but as you have likely heard, there is no full protection, so you need to know when someone has found a breach leading to intruders or more likely a Denegation of Service (DoS) attack.