Embedded Software Development: Hardware, Realtime, and Memory Management

Linux, being “a flavor of UNIX”, builds upon the strong concepts of the OS family. Yet Linux has proven to be an embedded OS too - hardware support is amazingly complete, realtime capabilities are in place, memory management is as fine grained as embedded developers like it.

This course introduces into the OS and its system programming APIs, with an emphasis on typical embedded topics like hardware, memory management, and realtime.

Target Audience

  • Embedded software developers

  • Electronic engineers who work together with software developers, and occasionally have to get in touch with what those produce

  • System architects whose job is to make good decisions

Attendees are invited to bring their own material - development boards with their favorite processor architecture, breadboards, and all that’s needed for tinkering. Usually the trainer brings a couple of Raspberry Pi computers, a pile of sensors, and wiring material.

Course Outline

  • Linux and the commandline (taken from this course).

    • Remote login with SSH

    • Basics: the shell, and tools like sed, grep, find

    • Diagnosing problems: netstat and ss, top, dedicated filesystems like procfs and sysfs, the strace tool, …

  • Programming (taken from Linux Systems Programming (Course Series)).

    • Files and file IO. Be aware that file descriptors can describe almost anything (not just open files), and that the file IO topic is just the beginning. (More …)

    • Processes. Address spaces and scheduling. (More …)

    • Multithreading. (More …)

    • Network programming. The socket interface not only covers TCP/IP, but also Bluetooth, CAN, and other protocols. (More …)

    • Memory Management. Virtual memory: shared memory, memory mapped IO, and IPC techniques. (More …)

    • Realtime. Linux is a realtime OS, and we’ll learn what that means

      (More …)

    • Kernel hacking. Not the center of this course, but it’s always good to know how things that I use are implemented. (More …)

  • Hardware.

    • The General Purpose IO (GPIO) subsystem.

    • I2C userspace API

    • SPI userspace API

    • CAN, via the socket API (“SocketCAN”)

    • UART communication

Prerequisites

  • Programming experience in C and/or Python

  • A feel for hardware