Mastering Embedded Linux Programming
eBook - ePub

Mastering Embedded Linux Programming

Frank Vasquez, Chris Simmonds

  1. 758 páginas
  2. English
  3. ePUB (apto para móviles)
  4. Disponible en iOS y Android
eBook - ePub

Mastering Embedded Linux Programming

Frank Vasquez, Chris Simmonds

Detalles del libro
Vista previa del libro

Información del libro

Harness the power of Linux to create versatile and robust embedded solutions

Key Features

  • Learn how to develop and configure robust embedded Linux devices
  • Explore the new features of Linux 5.4 and the Yocto Project 3.1 (Dunfell)
  • Discover different ways to debug and profile your code in both user space and the Linux kernel

Book Description

If you're looking for a book that will demystify embedded Linux, then you've come to the right place. Mastering Embedded Linux Programming is a fully comprehensive guide that can serve both as means to learn new things or as a handy reference.The first few chapters of this book will break down the fundamental elements that underpin all embedded Linux projects: the toolchain, the bootloader, the kernel, and the root filesystem. After that, you will learn how to create each of these elements from scratch and automate the process using Buildroot and the Yocto Project. As you progress, the book will show you how to implement an effective storage strategy for flash memory chips and install updates to a device remotely once it's deployed.You'll also learn about the key aspects of writing code for embedded Linux, such as how to access hardware from apps, the implications of writing multi-threaded code, and techniques to manage memory in an efficient way. The final chapters demonstrate how to debug your code, whether it resides in apps or in the Linux kernel itself.You'll also cover the different tracers and profilers that are available for Linux so that you can quickly pinpoint any performance bottlenecks in your system.By the end of this Linux book, you'll be able to create efficient and secure embedded devices using Linux.

What you will learn

  • Use Buildroot and the Yocto Project to create embedded Linux systems
  • Troubleshoot BitBake build failures and streamline your Yocto development workflow
  • Update IoT devices securely in the field using Mender or balena
  • Prototype peripheral additions by reading schematics, modifying device trees, soldering breakout boards, and probing pins with a logic analyzer
  • Interact with hardware without having to write kernel device drivers
  • Divide your system up into services supervised by BusyBox runit
  • Debug devices remotely using GDB and measure the performance of systems using tools such as perf, ftrace, eBPF, and Callgrind

Who this book is for

If you're a systems software engineer or system administrator who wants to learn how to implement Linux on embedded devices, then this book is for you. It's also aimed at embedded systems engineers accustomed to programming for low-power microcontrollers, who can use this book to help make the leap to high-speed systems on chips that can run Linux. Anyone who develops hardware that needs to run Linux will find something useful in this book – but before you get started, you'll need a solid grasp on POSIX standard, C programming, and shell scripting.


Preguntas frecuentes

¿Cómo cancelo mi suscripción?
Simplemente, dirígete a la sección ajustes de la cuenta y haz clic en «Cancelar suscripción». Así de sencillo. Después de cancelar tu suscripción, esta permanecerá activa el tiempo restante que hayas pagado. Obtén más información aquí.
¿Cómo descargo los libros?
Por el momento, todos nuestros libros ePub adaptables a dispositivos móviles se pueden descargar a través de la aplicación. La mayor parte de nuestros PDF también se puede descargar y ya estamos trabajando para que el resto también sea descargable. Obtén más información aquí.
¿En qué se diferencian los planes de precios?
Ambos planes te permiten acceder por completo a la biblioteca y a todas las funciones de Perlego. Las únicas diferencias son el precio y el período de suscripción: con el plan anual ahorrarás en torno a un 30 % en comparación con 12 meses de un plan mensual.
¿Qué es Perlego?
Somos un servicio de suscripción de libros de texto en línea que te permite acceder a toda una biblioteca en línea por menos de lo que cuesta un libro al mes. Con más de un millón de libros sobre más de 1000 categorías, ¡tenemos todo lo que necesitas! Obtén más información aquí.
¿Perlego ofrece la función de texto a voz?
Busca el símbolo de lectura en voz alta en tu próximo libro para ver si puedes escucharlo. La herramienta de lectura en voz alta lee el texto en voz alta por ti, resaltando el texto a medida que se lee. Puedes pausarla, acelerarla y ralentizarla. Obtén más información aquí.
¿Es Mastering Embedded Linux Programming un PDF/ePUB en línea?
Sí, puedes acceder a Mastering Embedded Linux Programming de Frank Vasquez, Chris Simmonds en formato PDF o ePUB, así como a otros libros populares de Informatique y Systèmes d'exploitation. Tenemos más de un millón de libros disponibles en nuestro catálogo para que explores.



Section 1:
Elements of Embedded Linux

The objective of Section 1 is to help the reader set up their development environment and create a working platform for the later phases. It is often referred to as the "board bring-up" phase.
This part of the book comprises the following chapters:
  • Chapter 1, Starting Out
  • Chapter 2, Learning About Toolchains
  • Chapter 3, All About Bootloaders
  • Chapter 4, Configuring and Building the Kernel
  • Chapter 5, Building a Root Filesystem
  • Chapter 6, Selecting a Build System
  • Chapter 7, Developing with Yocto
  • Chapter 8, Yocto Under the Hood

Chapter 1: Starting Out

You are about to begin working on your next project, and this time it is going to be running Linux. What should you think about before you put finger to keyboard? Let's begin with a high-level look at embedded Linux and see why it is popular, what are the implications of open source licenses, and what kind of hardware you will need to run Linux.
Linux first became a viable choice for embedded devices around 1999. That was when Axis ( released their first Linux-powered network camera and TiVo ( their first Digital Video Recorder (DVR). Since 1999, Linux has become ever more popular, to the point that today it is the operating system of choice for many classes of product. In 2021, there were over two billion devices running Linux. That includes a large number of smartphones running Android, which uses a Linux kernel, and hundreds of millions of set-top boxes, smart TVs, and Wi-Fi routers, not to mention a very diverse range of devices such as vehicle diagnostics, weighing scales, industrial devices, and medical monitoring units that ship in smaller volumes.
In this chapter, we will cover the following topics:
  • Choosing Linux
  • When not to choose Linux
  • Meeting the players
  • Moving through the project life cycle
  • Navigating open source
  • Selecting hardware for embedded Linux
  • Obtaining the hardware for this book
  • Provisioning your development environment

Choosing Linux

Why is Linux so pervasive? And why does something as simple as a TV need to run something as complex as Linux just to display streaming video on a screen?
The simple answer is Moore's Law: Gordon Moore, co-founder of Intel, observed in 1965 that the density of components on a chip will double approximately every 2 years. That applies to the devices that we design and use in our everyday lives just as much as it does to desktops, laptops, and servers. At the heart of most embedded devices is a highly integrated chip that contains one or more processor cores and interfaces with main memory, mass storage, and peripherals of many types. This is referred to as a System on Chip, or SoC, and SoCs are increasing in complexity in accordance with Moore's Law. A typical SoC has a technical reference manual that stretches to thousands of pages. Your TV is not simply displaying a video stream as the old analog sets used to do.
The stream is digital, possibly encrypted, and it needs processing to create an image. Your TV is (or soon will be) connected to the internet. It can receive content from smartphones, tablets, and home media servers. It can be (or soon will be) used to play games and so on. You need a full operating system to manage this degree of complexity.
Here are some points that drive the adoption of Linux:
  • Linux has the necessary functionality. It has a good scheduler, a good network stack, support for USB, Wi-Fi, Bluetooth, many kinds of storage media, good support for multimedia devices, and so on. It ticks all the boxes.
  • Linux has been ported to a wide range of processor architectures, including some that are very commonly found in SoC designs – Arm, MIPS, x86, and PowerPC.
  • Linux is open source, so you have the freedom to get the source code and modify it to meet your needs. You, or someone working on your behalf, can create a board support package for your particular SoC board or device. You can add protocols, features, and technologies that may be missing from the mainline source code. You can remove features that you don't need to reduce memory and storage requirements. Linux is flexible.
  • Linux has an active community; in the case of the Linux kernel, very active. There is a new release of the kernel every 8 to 10 weeks, and each release contains code from more than 1,000 developers. An active community means that Linux is up to date and supports current hardware, protocols, and standards.
  • Open source licenses guarantee that you have access to the source code. There is no vendor tie-in.
For these reasons, Linux is an ideal choice for complex devices. But there are a few caveats I should mention here. Complexity makes it harder to understand. Coupled with the fast-moving development process and the decentralized structures of open source, you have to put some effort into learning how to use it and to keep on re-learning as it changes. I hope that this book will help in the process.

When not to choose Linux

Is Linux suitable for your project? Linux works well where the problem being solved justifies the complexity. It is especially good where connectivity, robustness, and complex user interfaces are required. However, it cannot solve every problem, so here are some things to consider before you jump in:
  • Is your hardware up to the job? Compared to a traditional real-time operating system (RTOS) such as VxWorks or QNX, Linux requires a lot more resources. It needs at least a 32-bit processor and lots more memory. I will go into more detail in the section on typical hardware requirements.
  • Do you have the right skill set? The early parts of a project, board bring-up, require detailed knowledge of Linux and how it relates to your hardware. Likewise, when debugging and tuning your application, you will need to be able to interpret the results. If you don't have the skills in-house, you may want to outsource some of the work. Of course, reading this book helps!
  • Is your system real-time? Linux can handle many real-time activities so long as
    you pay attention to certain details, which I will cover in detail in Chapter 21,
    Real-Time Programming.
  • Will your code require regulatory approval (medical, automotive, aerospace, and so on)? The burden of regulatory verification and validation might make another OS a better choice. Even if you do choose Linux for use in these environments, it may make sense to purchase a commercially available distribution from a company that has supplied Linux for existing products, like the one you are building.
Consider these points carefully. Probably the best indicator of success is to look around for similar products that run Linux and see how they have done it; follow best practice.

Meeting the players

Where does open source software come from? Who writes it? In particular, how does this relate to the key components of embedded development—the toolchain, b...


  1. Mastering Embedded Linux Programming Third Edition
  2. Contributors
  3. Preface
  4. Section 1: Elements of Embedded Linux
  5. Chapter 1: Starting Out
  6. Chapter 2: Learning about Toolchains
  7. Chapter 3: All about Bootloaders
  8. Chapter 4: Configuring and Building the Kernel
  9. Chapter 5: Building a Root Filesystem
  10. Chapter 6: Selecting a Build System
  11. Chapter 7: Developing with Yocto
  12. Chapter 8: Yocto Under the Hood
  13. Section 2: System Architecture and Design Decisions
  14. Chapter 9: Creating a Storage Strategy
  15. Chapter 10: Updating Software in the Field
  16. Chapter 11: Interfacing with Device Drivers
  17. Chapter 12: Prototyping with Breakout Boards
  18. Chapter 13: Starting Up – The init Program
  19. Chapter 14: Starting with BusyBox runit
  20. Chapter 15: Managing Power
  21. Section 3: Writing Embedded Applications
  22. Chapter 16: Packaging Python
  23. Chapter 17: Learning about Processes and Threads
  24. Chapter 18: Managing Memory
  25. Section 4: Debugging and Optimizing Performance
  26. Chapter 19: Debugging with GDB
  27. Chapter 20: Profiling and Tracing
  28. Chapter 21: Real-Time Programming
  29. Other Books You May Enjoy
Estilos de citas para Mastering Embedded Linux Programming

APA 6 Citation

Vasquez, F., & Simmonds, C. (2021). Mastering Embedded Linux Programming - Third Edition (3rd ed.). Packt Publishing. Retrieved from (Original work published 2021)

Chicago Citation

Vasquez, Frank, and Chris Simmonds. (2021) 2021. Mastering Embedded Linux Programming - Third Edition. 3rd ed. Packt Publishing.

Harvard Citation

Vasquez, F. and Simmonds, C. (2021) Mastering Embedded Linux Programming - Third Edition. 3rd edn. Packt Publishing. Available at: (Accessed: 15 October 2022).

MLA 7 Citation

Vasquez, Frank, and Chris Simmonds. Mastering Embedded Linux Programming - Third Edition. 3rd ed. Packt Publishing, 2021. Web. 15 Oct. 2022.