Linux is an extremely flexible and powerful operating system and I suspect we've yet to truly see it used to full advantage in the embedded world. One possible reason is that there are many different facets to it and the learning curves can be steep and time consuming.
Its possible to figure your way own through the world of Embedded Linux, as I myself have done over the past decade, however I am pleased to see people like Chris putting together books like this which give people a good grounding on many useful topics. I certainly could have used a guide like this back when I started!
I obviously have a personal bias to the You-to Project, it being my major contribution and attempt to make a difference to the Embedded Linux world. One of its core objectives is to try and make things easier for people building Embedded Linux systems. We've had some successes; there are also areas we know work is still needed. We're continually trying to simplify barriers to entry and let more people get involved, make the technology more accessible and encourage adoption.
In writing this book, Chris is supporting the same objectives. l hope you enjoy the book, enjoy L:inux and that ultimately that we might see you becoming a part of the vibrant open source communities that make up many of the components you're about to learn about.
Preface
Chapter 1: Starting Out
Selecting the right operating system
The players
Project lifecycle
The four elements of embedded Linux
Open source
Licenses
Hardware for embedded Linux
Hardware used in this book
The BeagleBone Black
QEMU
Software used in this book
Summary
Chapter 2: Learning About Toolchains
What is a toolchain?
Types of toolchain - native versus cross toolchain
CPU architectures
Choosing the C library
Finding a toolchain
Building a toolchain using crosstooI-NG
Installing crosstooI-NG
Selecting the toolchain
Anatomy of a toolchain
Finding out about your cross compiler
The sysroot, library, and header files
Other tools in the toolchain
Looking at the components of the C library
Linking with libraries: static and dynamic linking
Static libraries
Shared libraries
Understanding shared library version numbers
The art of cross compiling
Simple makefiles
Autotools
An example: SQLite
Package configuration
Problems with cross compiling
Summary
Chapter 3: All About Bootloaders
What does a bootloader do?
The boot sequence
Phase 1: ROM code
Phase 2: SPL
Phase 3: TPL
Booting with UEFI firmware
Moving from bootloader to kernel
Introducing device trees
Device tree basics
The reg property
Phandles and interrupts
Device tree include files
Compiling a device tree
Choosing a bootloader
U-Boot
Building U-Boot
Installing U-Boot
Using U-Boot
Environment variables
Boot image format
Loading images
Booting Linux
Automating the boot with U-Boot scripts
Porting U-Boot to a new board
Kconfig and U-Boot
Board-specific files
Configuration header files
Building and testing
……
Chapter 4 Porting and configuring the Kernel
Chapter 5 Building a Root Filesystem
Chapter 6 Selecting a Build System
Chapter 7 Creating a Storage Strategy
Chapter 8 Introducing Device Drivers
Chapter 9 Starting up-the init Program
Chapter 10 Learning About Processes and Threads
Chapter 11 Managing Memory
Chapter 12 Debugging with GDB
Chapter 13 Profiling and Tracing
Chapter 14 Real-time Programming