Mastering Embedded Linux Programming
Frank Vasquez, Chris Simmonds
- 758 pages
- English
- ePUB (mobile friendly)
- Available on iOS & Android
Mastering Embedded Linux Programming
Frank Vasquez, Chris Simmonds
About This Book
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.
]]>
Frequently asked questions
Information
Section 1:
Elements of Embedded Linux
- 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
- 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
- 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.
When not to choose Linux
- 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.