0% found this document useful (0 votes)
27 views

Embedded Linux Systems With The Yocto Projects

This document discusses the Yocto Project, an open source collaboration project that provides templates, tools and methods to help developers create custom Linux-based systems for embedded products regardless of the hardware architecture. It provides an overview of building custom Linux distributions for embedded systems using the Yocto Project build tools and OpenEmbedded build system. The document covers topics like the Yocto Project build process, the OpenEmbedded build system architecture, using the BitBake build engine, and writing recipes to build software packages.

Uploaded by

Bill Gates
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
27 views

Embedded Linux Systems With The Yocto Projects

This document discusses the Yocto Project, an open source collaboration project that provides templates, tools and methods to help developers create custom Linux-based systems for embedded products regardless of the hardware architecture. It provides an overview of building custom Linux distributions for embedded systems using the Yocto Project build tools and OpenEmbedded build system. The document covers topics like the Yocto Project build process, the OpenEmbedded build system architecture, using the BitBake build engine, and writing recipes to build software packages.

Uploaded by

Bill Gates
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

Embedded Linux

Systems with the


Yocto Project"

Rudolf J. Streif

PRENTICE
HALL

Boston • Columbus •
Indianapolis • New York • San Francisco •
Amsterdam •
Cape Town

Dubai •
London •
Madrid •
Milan •
Munich •
Paris •
Montreal •
Toronto • Delhi • Mexico City
Sao Paulo •
Sidney •
Hong Kong •
Seoul •
Singapore •
Taipei •
Tokyo
Contents

Foreword xv

Preface xvii

Acknowledgments xxi

About the Author xxiii

1 Linux for Embedded Systems 1

1.1 Why Linux for Embedded Systems? 1

1.2 Embedded Linux Landscape 3

1.2.1 Embedded Linux Distributions 3

1.2.2 Embedded Linux Development Tools 5

1.3 A Custom Linux Distribution—Why Is It Hard? 8

1.4 A Word about Open Source Licensing 9

1.5 Organizations, Relevant Bodies, and


Standards 11

1.5.1 The Linux Foundation 11

1.5.2 The Apache Software Foundation 11

1.5.3 Eclipse Foundation 12

1.5.4 Linux Standard Base 12

1.5.5 Consumer Electronics Workgroup 13

1.6 Summary 13

1.7 References 14

2 The Yocto Project 15

2.1 Jumpstarting Your First Yocto Project Build 15

2.1.1 Prerequisites 16

2.1.2 Obtaining the Yocto Project Tools 17

2.1.3 Setting Up the Build Host 18

2.1.4 Configuring a Build Environment 20

2.1.5 Launching the Build 23

2.1.6 Verifying the Build Results 24

2.1.7 Yocto Project Build Appliance 24

2.2 The Yocto Project Family 26

2.3 A Little Bit of History 28

2.3.1 OpenEmbedded 29

2.3.2 BitBake 29

2.3.3 Poky Linux 29


viii Contents

2.3.4 The Yocto Project 30

2.3.5 The OpenEmbedded and Yocto Project

Relationship 30

2.4 Yocto Project Terms 31

2.5 Summary 33

2.6 References 34

3 OpenEmbedded Build System 35

3.1 Building Open Source Software Packages 35

3.1.1 Fetch 36

3.1.2 Extract 36

3.1.3 Patch 37

3.1.4 Configure 37

3.1.5 Build 38

3.1.6 Install 38

3.1.7 Package 38

3.2 OpenEmbedded Workflow 39

3.2.1 Metadata Files 41

3.2.2 Workflow Process Steps 43

3.3 OpenEmbedded Build System Architecture 45

3.3.1 Build System Structure 47

3.3.2 Build Environment Structure 50

3.3.3 Metadata Layer Structure 53

3.4 Summary 56

3.5 References 57

4 BitBake Build Engine 59

4.1 Obtaining and Installing BitBake 59

4.1.1 Using a Release Snapshot 60

4.1.2 Cloning the BitBake Development


Repository 60

4.1.3 Building and Installing BitBake 60

4.2 Running BitBake 61

4.2.1 BitBake Execution Environment 61

4.2.2 BitBake Command Line 63

4.3 BitBake Metadata 70

4.4 Metadata Syntax 71

4.4.1 Comments 71

4.4.2 Variables 72
4.4.3 Inclusion 76

4.4.4 Inheritance 77

4.4.5 Executable Metadata 79

4.4.6 Metadata Attributes 85

4.4.7 Metadata Name (Key) Expansion


4.5 Source Download 86

4.5.1 Using the Fetch Class 87

4.5.2 Fetcher Implementations 88

4.5.3 Mirrors 94

4.6 HelloWorld—BitBake Style 95

4.7 Dependency Handling 99

4.7.1 Provisioning 99

4.7.2 Declaring Dependencies 101

4.7.3 Multiple Providers 101

4.8 Version Selection 102

4.9 Variants 103

4.10 Default Metadata 103

4.10.1 Variables 103

4.10.2 Tasks 107

4.11 Summary 107

4.12 References 108

5 Troubleshooting 109

5.1 Logging 110

5.1.1 Log Files 110

5.1.2 Using Logging Statements 114

5.2 Task Execution 116

5.2.1 Executing Specific Tasks 118

5.2.2 Task Script Files 118

5.3 Analyzing Metadata 119

5.4 Development Shell 120


5.5 Dependency Graphs 121

5.6 Debugging Layers 122

5.7 Summary 124

6 Linux System Architecture 127

6.1 Linux orGNU/Linux? 127

6.2 Anatomy of a Linux System 128


Contents

6.3 Bootloader 129

6.3.1 Role of the Bootloader 130

6.3.2 Linux Bootloaders 130

6.4 Kernel 134

6.4.1 Major Linux Kernel Subsystems 136

6.4.2 Linux Kernel Startup 140

6.5 User Space 141

6.6 Summary 143

6.7 References 144

7 Building a Custom Linux Distribution 145

7.1 Core Images—Linux Distribution Blueprints 146

7.1.1 Extending a Core Image through Local


Configuration 149

7.1.2 Testing Your Image with QEMU 150

7.1.3 Verifying and Comparing Images Using the Build


History 151

7.1.4 Extending a Core Image with a Recipe 152

7.1.5 Image Features 153

7.1.6 Package Groups 155

7.2 Building Images from Scratch 160

7.3 Image Options 161

7.3.1 Languages and Locales 162

7.3.2 Package Management 162

7.3.3 Image Size 163

7.3.4 Root Filesystem Types 164

7.3.5 Users, Groups, and Passwords 166

7.3.6 Tweaking the Root Filesystem 167

7.4 Distribution Configuration 169

7.4.1 Standard Distribution Policies 169

7.4.2 Poky Distribution Policy 170

7.4.3 Distribution Features 176

7.4.4 System Manager 179

7.4.5 Default Distribution Setup 179

7.5 External Layers 181

7.6 Hob 181

7.7 Summary 184


Contents xi

8 Software Package Recipes 185

8.1 Recipe Layout and Conventions 185

8.1.1 Recipe Filename 186

8.1.2 Recipe Layout 186

8.1.3 Formatting Guidelines 195

8.2 Writing a New Recipe 196

8.2.1 Establish the Recipe 198

8.2.2 Fetch the Source Code 199

8.2.3 Unpack the Source Code 200

8.2.4 Patch the Source Code 201


8.2.5 Add Licensing Information 201

8.2.6 Configure the Source Code 202

8.2.7 Compile 203

8.2.8 Install the Build Output 204

8.2.9 Setup System Services 206

8.2.10 Package the Build Output 207

8.2.11 Custom Installation Scripts 210

8.2.12 Variants 211

8.3 Recipe Examples 212

8.3.1 C File Software Package 212

8.3.2 Makefile-Based Software Package 213

8.3.3 CMake-Based Software Package 215

8.3.4 GNU Autotools-Based Software Package 216

8.3.5 Externally Built Software Package 217

8.4 Devtool 218

8.4.1 Round-Trip Development Using Devtool 219

8.4.2 Workflow for Existing Recipes 223

8.5 Summary 224

8.6 References 224

9 Kernel Recipes 225

9.1 Kernel Configuration 226

9.1.1 Menu Configuration 227

9.1.2 Configuration Fragments 228

9.2 Kernel Patches 231

9.3 Kernel Recipes 233

9.3.1 Building from a Linux Kernel Tree 234

9.3.2 Building from Yocto Project Kernel


Repositories 238
xii Contents

9.4 Out-of-Tree Modules 251


9.4.1 Developing a Kernel Module 251

9.4.2 Creating a Recipe for a Third-Party


Module 254

9.4.3 Including the Module with the Root


Filesystem 256

9.4.4 Module Autoloading 257

9.5 Device Tree 257

9.6 Summary 258

v 9.7 References- 259

10 Board Support Packages 261

10.1 Yocto Project BSP Philosophy 261

10.1.1 BSP Dependency Handling 263

10.2 Building with a BSP 265

10.2.1 Building for the BeagleBone 265

10.2.2 External Yocto Project BSP 272

10.3 Inside a Yocto Project BSP 277

10.3.1 License Files 279

10.3.2 Maintainers File 279

10.3.3 README File 279


:

10.3.4 README.sources File 280

10.3.5 Prebuilt Binaries 280

10.3.6 Layer Configuration File 280

10.3.7 Machine Configuration Files 280

10.3.8 Classes 281

10.3.9 Recipe Files 281

10.4 Creating a Yocto Project BSP 282

10.4.1 Yocto Project BSP Tools 282

10.4.2 Creating a BSP with the Yocto Project BSP


Tools : 286

10.5 Tuning 289


:

10.6 Creating Bootable Media Images 290

10.6.1 Creating an Image with Cooked Mode 292

10.6.2 Creating an Image with Raw Mode 292

10.6.3 Kickstart Files 293

10.6.4 Kickstart File Directives 295

10.6.5 Plugins 297

10.6.6 Transferring Images 298


Contents xiii

10.7 Summary 299

10.8 References 299

11 Application Development 301

11.1 inside a Yocto Project ADT 302

11.2 Setting Up a Yocto Project ADT 304

11.2.1 Building a Too chain installer 304

I
11.2.2 Installing the Tooichain 305

11.2.3 Working with the Tooichain 307


11.2.4 On-Target Execution 310

11.2.5 Remote On-Target Debugging 311

11.3 Building Applications 315

11.3.1 Makefile-Based Applications 315

11.3.2 Autotools-Based Applications 316

11.4 Eclipse integration 317

11.4.1 Installing the Eclipse IDE 317

11.4.2 Integrating a Yocto Project ADT 319

11.4.3 Developing Applications 321

11.4.4 Deploying, Running, and Testing on the

Target 323

11.5 Application Development Using an Emulated


Target 331

11.5.1 Preparing for Application Development


with QEMU 331

11.5.2 Building an Application and Launching It


in QEMU 333

11.6 Summary 333

11.7 References 334

12 Licensing and Compliance 335

12.1 Managing Licenses 335

12.1.1 License Tracking 337

12.1.2 Common Licenses 338

12.1.3 Commercially Licensed Packages 339


12.1.4 License Deployment 340

12.1.5 Blacklisting Licenses 340

12.1.6 Providing License Manifest and Texts 341


12.2 Managing Source Code 341

12.3 Summary 343

12.4 References 344


Contents

13 Advanced Topics 345

13.1 Toaster 345

13.1.1 Toaster Operational Modes 346

13.1.2 Toaster Setup 347

13.1.3 Local Toaster Development 348

13.1.4 Toaster Configuration 349

13.1.5 Toaster Production Deployment 351

13.1.6 Toaster Web User Interface 356

13.2 Build History 358

13.2.1 Enabling Build History 358

13.2.2 Configuring Build History 359

13.2.3 Pushing Build History to a Git Repository


Server 360

13.2.4 Understanding the Build History 361

13.3 Source Mirrors 366


13.3.1 Using Source Mirrors 366

13.3.2 Setting Up Source Mirrors 368

13.4 Autobuilder 368

13.4.1 Installing Autobuilder 369

13.4.2 Configuring Autobuilder 370

13.5 Summary 374

13.6 References 375

A Open Source Licenses 377


A.l MIT License (MIT) 377

A.2 GNU General Public License (GPL) Version 2 378

A.3 GNU General Public License (GPL) Version 3 384

A.4 Apache License Version 2.0 397

B Metadata Reference 403

index 429

You might also like