Building Embedded Linux Systems
Read it now on the O’Reilly learning platform with a 10-day free trial.
O’Reilly members get unlimited access to books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.
Book description
Linux® is being adopted by an increasing number of embedded systems developers, who have been won over by its sophisticated scheduling and networking, its cost-free license, its open development model, and the support offered by rich and powerful programming tools. While there is a great deal of hype surrounding the use of Linux in embedded systems, there is not a lot of practical information. Building Embedded Linux Systems is the first in-depth, hard-core guide to putting together an embedded system based on the Linux kernel. This indispensable book features arcane and previously undocumented procedures for:
- Building your own GNU development toolchain
- Using an efficient embedded development framework
- Selecting, configuring, building, and installing a target-specific kernel
- Creating a complete target root filesystem
- Setting up, manipulating, and using solid-state storage devices
- Installing and configuring a bootloader for the target
- Cross-compiling a slew of utilities and packages
- Debugging your embedded system using a plethora of tools and techniques
Publisher resources
Table of contents
- Dedication
- Preface
- Audience of This Book
- Scope and Background Information
- Organization of the Material
- Hardware Used in This Book
- Software Versions
- Book Web Site
- Typographical Conventions
- Contact Information
- Acknowledgments
- 1.1. Definitions
- 1.1.1. What Is Linux?
- 1.1.2. What Is Embedded Linux?
- 1.1.3. What Is Real-Time Linux?
- 1.2.1. Types of Embedded Linux Systems
- 1.2.1.1. Size
- 1.2.1.2. Time constraints
- 1.2.1.3. Networkability
- 1.2.1.4. User interaction
- 1.2.2.1. Accelerator control
- 1.2.2.2. Computer-aided training system
- 1.2.2.3. Ericsson “blip”
- 1.2.2.4. SCADA protocol converter
- 1.2.2.5. Sharp Zaurus
- 1.2.2.6. Space vehicle control
- 1.2.4.1. Quality and reliability of code
- 1.2.4.2. Availability of code
- 1.2.4.3. Hardware support
- 1.2.4.4. Communication protocol and software standards
- 1.2.4.5. Available tools
- 1.2.4.6. Community support
- 1.2.4.7. Licensing
- 1.2.4.8. Vendor independence
- 1.2.4.9. Cost
- 1.2.5.1. Free software and open source community
- 1.2.5.2. Industry
- 1.2.5.3. Organizations
- 1.2.5.4. Resources
- 1.2.6.1. Textbook GPL
- 1.2.6.2. Pending issues
- 1.2.6.3. RTLinux patent
- 1.2.7.1. To use or not to use
- 1.2.7.2. How to choose a distribution
- 1.2.7.3. What to avoid doing with a distribution
- 1.3.1. General Architecture
- 1.3.2. Requirements of Each Component
- 1.3.2.1. Data acquisition module
- 1.3.2.2. Control module
- 1.3.2.3. System management module
- 1.3.2.4. User interface modules
- 1.4.1. Creating a Target Linux System
- 1.4.2. Setting Up and Using Development Tools
- 1.4.3. Developing for the Embedded
- 1.4.4. Networking
- 2.1. Types of Hosts
- 2.1.1. Linux Workstation
- 2.1.2. Unix Workstation
- 2.1.3. Windows (2000, NT, 98, etc.) Workstation
- 2.2.1. Linked Setup
- 2.2.2. Removable Storage Setup
- 2.2.3. Standalone Setup
- 2.6.1. Solid State Storage Media
- 2.6.2. Disk
- 2.6.3. Network
- 3.1. Processor Architectures
- 3.1.1. x86
- 3.1.2. ARM
- 3.1.3. IBM/Motorola PowerPC
- 3.1.4. MIPS
- 3.1.5. Hitachi SuperH
- 3.1.6. Motorola 68000
- 3.2.1. ISA
- 3.2.2. PCI
- 3.2.3. PCMCIA
- 3.2.4. PC/104
- 3.2.5. VME
- 3.2.6. CompactPCI
- 3.2.7. Parallel Port
- 3.2.8. SCSI
- 3.2.9. USB
- 3.2.10. IEEE1394 (FireWire)
- 3.2.11. GPIB
- 3.2.12. I2C
- 3.3.1. Serial Port
- 3.3.2. Parallel Port
- 3.3.3. Modem
- 3.3.4. Data Acquisition
- 3.3.5. Process Control
- 3.3.6. Home Automation
- 3.3.7. Keyboard
- 3.3.8. Mouse
- 3.3.9. Display
- 3.3.10. Sound
- 3.3.11. Printer
- 3.4.1. Memory Technology Devices
- 3.4.2. ATA-ATAPI (IDE)
- 3.4.3. SCSI
- 3.5.1. Ethernet
- 3.5.2. IrDA
- 3.5.3. IEEE 802.11 (Wireless)
- 3.5.4. Bluetooth
- 3.6.1. CAN
- 3.6.2. ARCnet
- 3.6.3. Modbus
- 3.6.4. A Word on the Other Industrial Networks
- 4.1. Using a Practical Project Workspace
- 4.2. GNU Cross-Platform Development Toolchain
- 4.2.1. GNU Toolchain Basics
- 4.2.1.1. Component versions
- 4.2.1.2. Build requirements
- 4.2.1.3. Build overview
- 4.2.1.4. Workspace setup
- 4.2.1.5. Preparing the build-tools directory
- 4.2.1.6. Resources
- 4.2.1.7. A word on prebuilt cross-platform toolchains
- 4.3.1. uClibc
- 4.3.1.1. Library setup
- 4.3.1.2. Usage
- 4.3.2.1. Library setup
- 4.3.2.2. Usage
- 4.4.1. The Blackdown Project
- 4.4.2. Open Source Virtual Machines
- 4.4.3. The GNU Java Compiler
- 4.5.1. Microperl
- 4.5.2. Miniperl
- 4.10.1. Accessing the Serial Port
- 4.10.2. Minicom
- 4.10.3. UUCP cu
- 4.10.4. C-Kermit
- 5.1. Selecting a Kernel
- 5.2. Configuring the Kernel
- 5.2.1. Configuration Options
- 5.2.2. Configuration Methods
- 5.2.3. Managing Multiple Configurations
- 5.2.4. Using the EXTRAVERSION Variable
- 5.3.1. Building Dependencies
- 5.3.2. Building the Kernel
- 5.3.3. Building the Modules
- 5.4.1. Managing Multiple Kernel Images
- 5.4.2. Installing Kernel Modules
- 5.5.1. Dealing with Kernel Failure
- 6.1. Basic Root Filesystem Structure
- 6.2. Libraries
- 6.2.1. glibc
- 6.2.2. uClibc
- 6.6.1. Complete Standard Applications
- 6.6.2. BusyBox
- 6.6.2.1. Setup
- 6.6.2.2. Usage
- 6.6.3.1. Setup
- 6.6.3.2. Usage
- 6.6.4.1. Setup
- 6.6.4.2. Usage
- 6.8.1. Standard System V init
- 6.8.2. BusyBox init
- 6.8.3. Minit
- 7.1. MTD-Supported Devices
- 7.1.1. MTD Usage Basics
- 7.1.1.1. MTD /dev entries
- 7.1.1.2. Configuring the kernel
- 7.1.1.3. The MTD utilities
- 7.1.1.4. Installing the MTD utilities for the host
- 7.1.1.5. Installing the MTD utilities for the target
- 7.1.2.1. Kernel configuration
- 7.1.2.2. Partitioning
- 7.1.2.3. Required /dev entries
- 7.1.2.4. Erasing
- 7.1.2.5. Writing and reading
- 7.1.3.1. Preliminary manipulations
- 7.1.3.2. Kernel configuration
- 7.1.3.3. Required /dev entries
- 7.1.3.4. Erasing
- 7.1.3.5. Installing bootloader image
- 7.1.3.6. NFTL formatting
- 7.1.3.7. Partitioning
- 7.2.1. CompactFlash
- 7.2.2. Floppy Disk
- 7.2.3. Hard Disk
- 8.1. Selecting a Filesystem
- 8.1.1. Characterizing Filesystems
- 8.1.2. Guidelines for Filesystem Selection
- 8.1.3. Filesystems for Disk Devices
- 8.8.1. The rsync Utility
- 8.8.2. Package Management Tools
- 8.8.3. Ad Hoc Scripts
- 8.8.3.1. Installing the patch utility
- 8.8.3.2. Scripts for performing updates
- 9.1. Bootloaders Galore
- 9.1.1. LILO
- 9.1.2. GRUB
- 9.1.3. ROLO
- 9.1.4. loadlin
- 9.1.5. EtherBoot
- 9.1.6. LinuxBIOS
- 9.1.7. Compaq’s bootldr
- 9.1.8. blob
- 9.1.9. PMON
- 9.1.10. sh-Boot
- 9.1.11. U-Boot
- 9.1.12. RedBoot
- 9.2.1. Setting Up the DHCP Daemon
- 9.2.2. Setting Up the TFTP Daemon
- 9.2.3. Mounting a Root Filesystem on an NFS Server
- 9.4.1. Configuring and Building GRUB for the DOC
- 9.4.2. Installing GRUB on a DOC
- 9.4.3. Configuring GRUB to Boot from a DOC
- 9.5.1. Compiling and Installing
- 9.5.2. Booting with U-Boot
- 9.5.3. Using U-Boot’s Environment Variables
- 9.5.4. Creating Boot Scripts
- 9.5.5. Preparing Binary Images
- 9.5.6. Booting Using BOOTP/DHCP, TFTP, and NFS
- 9.5.7. Downloading Binary Images to Flash
- 9.5.8. Booting Using a RAM Disk
- 9.5.9. Booting from CompactFlash Devices
- 9.5.10. Updating U-Boot
- 10.1. The Internet Super-Server
- 10.1.1. inetd
- 10.1.2. xinetd
- 10.3.1. netkit-telnetd
- 10.3.2. utelnetd
- 10.4.1. OpenSSH
- 10.4.2. A Word on Other SSH Implementations
- 10.5.1. Boa
- 10.5.2. thttpd
- 10.5.3. A Word on Apache
- 11.1. Debugging Applications with gdb
- 11.1.1. Building and Installing gdb Components
- 11.1.2. Using the gdb Components to Debug Target Applications
- 11.1.3. Interfacing with a Graphical Frontend
- 11.2.1. Single Process Tracing
- 11.2.2. System Tracing
- 11.2.2.1. Preliminary manipulations
- 11.2.2.2. Patching the kernel
- 11.2.2.3. Building the trace daemon
- 11.2.2.4. Installing the visualization tool
- 11.2.2.5. Tracing the target and visualizing its behavior
- 11.3.1. Process Profiling
- 11.3.2. Code Coverage
- 11.3.3. System Profiling
- 11.3.3.1. Basic /proc figures
- 11.3.3.2. Complete profile using LTT
- 11.4.1. Electric Fence
- 11.4.2. MEMWATCH
- A.1. Project Identification
- A.2. Hardware Summary
- A.3. Development Tools
- A.4. Kernel
- A.5. Root filesystem
- A.6. Storage Device Organization
- A.7. Bootloader Configuration and Use
- A.8. Networking services
- A.9. Custom Project Software
- A.10. Debug Notes
- A.11. Additional Notes
- A.12. Embedded Linux Systems Worksheet
- B.1. Online
- B.2. Books
- B.3. Publications
- B.4. Organizations
- B.5. Linux and Open-Source-Oriented Hardware Projects
- C.1. Exclusion of User-Space Applications from Kernel’s GPL
- C.2. Notices on Binary Kernel Modules
- C.2.1. First Posting by Linus in Kernel Interface Thread
- C.2.2. Second Posting by Linus in Kernel Interface Thread
- C.2.3. Post by Alan Cox in Kernel Hooks Thread
- C.2.4. First Post by Linus in Security Hooks License Thread
- C.2.5. Second Post by Linus in Security Hooks License Thread
Product information
- Title: Building Embedded Linux Systems
- Author(s): Karim Yaghmour
- Release date: April 2003
- Publisher(s): O’Reilly Media, Inc.
- ISBN: 9780596002220
- 7.1.1. MTD Usage Basics
- 4.2.1. GNU Toolchain Basics