Home > Store

Embedded Linux Primer: A Practical Real-World Approach, Portable Documents, 2nd Edition

Register your product to gain access to bonus material or receive a coupon.

Embedded Linux Primer: A Practical Real-World Approach, Portable Documents, 2nd Edition

eBook (Watermarked)

  • Sorry, this book is no longer in print.
  • About Watermarked eBooks
  • This PDF will be accessible from your Account page after purchase and requires the free Adobe® Reader® software to read it.

    The eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.

    Watermarked eBook FAQ

Not for Sale

Description

  • Copyright 2011
  • Dimensions: 7" x 9-1/8"
  • Pages: 576
  • Edition: 2nd
  • eBook (Watermarked)
  • ISBN-10: 0-13-259527-3
  • ISBN-13: 978-0-13-259527-8

Up-to-the-Minute, Complete Guidance for Developing Embedded Solutions with Linux

Linux has emerged as today’s #1 operating system for embedded products. Christopher Hallinan’s Embedded Linux Primer has proven itself as the definitive real-world guide to building efficient, high-value, embedded systems with Linux. Now, Hallinan has thoroughly updated this highly praised book for the newest Linux kernels, capabilities, tools, and hardware support, including advanced multicore processors.

Drawing on more than a decade of embedded Linux experience, Hallinan helps you rapidly climb the learning curve, whether you’re moving from legacy environments or you’re new to embedded programming. Hallinan addresses today’s most important development challenges and demonstrates how to solve the problems you’re most likely to encounter.

You’ll learn how to build a modern, efficient embedded Linux development environment, and then utilize it as productively as possible. Hallinan offers up-to-date guidance on everything from kernel configuration and initialization to bootloaders, device drivers to file systems, and BusyBox utilities to real-time configuration and system analysis. This edition adds entirely new chapters on UDEV, USB, and open source build systems.

  • Tour the typical embedded system and development environment and understand its concepts and components.
  • Understand the Linux kernel and userspace initialization processes.
  • Preview bootloaders, with specific emphasis on U-Boot.
  • Configure the Memory Technology Devices (MTD) subsystem to interface with flash (and other) memory devices.
  • Make the most of BusyBox and latest open source development tools.
  • Learn from expanded and updated coverage of kernel debugging.
  • Build and analyze real-time systems with Linux.
  • Learn to configure device files and driver loading with UDEV.
  • Walk through detailed coverage of the USB subsystem.
  • Introduces the latest open source embedded Linux build systems.
  • Reference appendices include U-Boot and BusyBox commands.

Sample Content

Table of Contents

Foreword for the First Edition xxv

Foreword for the Second Edition xxvi

Preface xxvii

Acknowledgments for the First Edition xxxiii

Acknowledgments for the Second Edition xxxv

About the Author xxxvi

Chapter 1 Introduction 1

1.1 Why Linux 2

1.2 Embedded Linux Today 3

1.3 Open Source and the GPL 3

1.3.1 Free Versus Freedom 4

1.4 Standards and Relevant Bodies 5

1.4.1 Linux Standard Base 5

1.4.2 Linux Foundation 6

1.4.3 Carrier-Grade Linux 6

1.4.4 Mobile Linux Initiative: Moblin 7

1.4.5 Service Availability Forum 7

1.5 Summary 8

1.5.1 Suggestions for Additional Reading 8

Chapter 2 The Big Picture 9

2.1 Embedded or Not? 10

2.1.1 BIOS Versus Bootloader 11

2.2 Anatomy of an Embedded System 12

2.2.1 Typical Embedded Linux Setup 13

2.2.2 Starting the Target Board 14

2.2.3 Booting the Kernel 16

2.2.4 Kernel Initialization: Overview 18

2.2.5 First User Space Process: init 19

2.3 Storage Considerations 20

2.3.1 Flash Memory 20

2.3.2 NAND Flash 22

2.3.3 Flash Usage 23

2.3.4 Flash File Systems 24

2.3.5 Memory Space 25

2.3.6 Execution Contexts 26

2.3.7 Process Virtual Memory 28

2.3.8 Cross-Development Environment 30

2.4 Embedded Linux Distributions 32

2.4.1 Commercial Linux Distributions 33

2.4.2 Do-It-Yourself Linux Distributions 33

2.5 Summary 34

2.5.1 Suggestions for Additional Reading 35

Chapter 3 Processor Basics 37

3.1 Stand-Alone Processors 38

3.1.1 IBM 970FX 39

3.1.2 Intel Pentium M 39

3.1.3 Intel Atom™ 40

3.1.4 Freescale MPC7448 40

3.1.5 Companion Chipsets 41

3.2 Integrated Processors: Systems on Chip 43

3.2.1 Power Architecture 44

3.2.2 Freescale Power Architecture 44

3.2.3 Freescale PowerQUICC I 45

3.2.4 Freescale PowerQUICC II 46

3.2.5 PowerQUICC II Pro 47

3.2.6 Freescale PowerQUICC III 48

3.2.7 Freescale QorIQ™ 48

3.2.8 AMCC Power Architecture 50

3.2.9 MIPS 53

3.2.10 Broadcom MIPS 54

3.2.11 Other MIPS 55

3.2.12 ARM 55

3.2.13 TI ARM 56

3.2.14 Freescale ARM 58

3.2.15 Other ARM Processors 59

3.3 Other Architectures 59

3.4 Hardware Platforms 60

3.4.1 CompactPCI 60

3.4.2 ATCA 60

3.5 Summary 61

3.5.1 Suggestions for Additional Reading 62

Chapter 4 The Linux Kernel: A Different Perspective 63

4.1 Background 64

4.1.1 Kernel Versions 65

4.1.2 Kernel Source Repositories 67

4.1.3 Using git to Download a Kernel 68

4.2 Linux Kernel Construction 68

4.2.1 Top-Level Source Directory 69

4.2.2 Compiling the Kernel 69

4.2.3 The Kernel Proper: vmlinux 72

4.2.4 Kernel Image Components 73

4.2.5 Subdirectory Layout 77

4.3 Kernel Build System 78

4.3.1 The Dot-Config 78

4.3.2 Configuration Editor(s 80

4.3.3 Makefile Targets 83

4.4 Kernel Configuration 89

4.4.1 Custom Configuration Options 91

4.4.2 Kernel Makefiles 95

4.5 Kernel Documentation 96

4.6 Obtaining a Custom Linux Kernel 96

4.6.1 What Else Do I Need 97

4.7 Summary 97

4.7.1 Suggestions for Additional Reading 98

Chapter 5 Kernel Initialization 99

5.1 Composite Kernel Image: Piggy and Friends 100

5.1.1 The Image Object 103

5.1.2 Architecture Objects 104

5.1.3 Bootstrap Loader 105

5.1.4 Boot Messages 106

5.2 Initialization Flow of Control 109

5.2.1 Kernel Entry Point: head.o 111

5.2.2 Kernel Startup: main.c 113

5.2.3 Architecture Setup 114

5.3 Kernel Command-Line Processing 115

5.3.1 The __setup Macro 116

5.4 Subsystem Initialization 122

5.4.1 The *__initcall Macros 122

5.5 The init Thread 125

5.5.1 Initialization Via initcalls 126

5.5.2 initcall_debug 127

5.5.3 Final Boot Steps 127

5.6 Summary 129

5.6.1 Suggestions for Additional Reading 130

Chapter 6 User Space Initialization 131

6.1 Root File System 132

6.1.1 FHS: File System Hierarchy Standard 133

6.1.2 File System Layout 133

6.1.3 Minimal File System 134

6.1.4 The Embedded Root FS Challenge 136

6.1.5 Trial-and-Error Method 137

6.1.6 Automated File System Build Tools 137

6.2 Kernel’s Last Boot Steps 137

6.2.1 First User Space Program 139

6.2.2 Resolving Dependencies 139

6.2.3 Customized Initial Process 140

6.3 The init Process 140

6.3.1 inittab 143

6.3.2 Sample Web Server Startup Script 145

6.4 Initial RAM Disk 146

6.4.1 Booting with initrd 147

6.4.2 Bootloader Support for initrd 148

6.4.3 initrd Magic: linuxrc 150

6.4.4 The initrd Plumbing 151

6.4.5 Building an initrd Image 152

6.5 Using initramfs 153

6.5.1 Customizing initramfs 154

6.6 Shutdown 156

6.7 Summary 156

6.7.1 Suggestions for Additional Reading 157

Chapter 7 Bootloaders 159

7.1 Role of a Bootloader 160

7.2 Bootloader Challenges 161

7.2.1 DRAM Controller 161

7.2.2 Flash Versus RAM 162

7.2.3 Image Complexity 162

7.2.4 Execution Context 165

7.3 A Universal Bootloader: Das U-Boot 166

7.3.1 Obtaining U-Boot 166

7.3.2 Configuring U-Boot 167

7.3.3 U-Boot Monitor Commands 169

7.3.4 Network Operations 170

7.3.5 Storage Subsystems 173

7.3.6 Booting from Disk 174

7.4 Porting U-Boot 174

7.4.1 EP405 U-Boot Port 175

7.4.2 U-Boot Makefile Configuration Target 176

7.4.3 EP405 First Build 177

7.4.4 EP405 Processor Initialization 178

7.4.5 Board-Specific Initialization 181

7.4.6 Porting Summary 184

7.4.7 U-Boot Image Format 185

7.5 Device Tree Blob (Flat Device Tree 187

7.5.1 Device Tree Source 189

7.5.2 Device Tree Compiler 192

7.5.3 Alternative Kernel Images Using DTB 193

7.6 Other Bootloaders 194

7.6.1 Lilo 194

7.6.2 GRUB 195

7.6.3 Still More Bootloaders 197

7.7 Summary 197

7.7.1 Suggestions for Additional Reading 198

Chapter 8 Device Driver Basics 201

8.1 Device Driver Concepts 202

8.1.1 Loadable Modules 203

8.1.2 Device Driver Architecture 204

8.1.3 Minimal Device Driver Example 204

8.1.4 Module Build Infrastructure 205

8.1.5 Installing a Device Driver 209

8.1.6 Loading a Module 210

8.1.7 Module Parameters 211

8.2 Module Utilities 212

8.2.1 insmod 212

8.2.2 lsmod 213

8.2.3 modprobe 213

8.2.4 depmod 214

8.2.5 rmmod 215

8.2.6 modinfo 216

8.3 Driver Methods 217

8.3.1 Driver File System Operations 217

8.3.2 Allocation of Device Numbers 220

8.3.3 Device Nodes and mknod 220

8.4 Bringing It All Together 222

8.5 Building Out-of-Tree Drivers 223

8.6 Device Drivers and the GPL 224

8.7 Summary 225

8.7.1 Suggestions for Additional Reading 226

Chapter 9 File Systems 227

9.1 Linux File System Concepts 228

9.1.1 Partitions 229

9.2 ext2 230

9.2.1 Mounting a File System 232

9.2.2 Checking File System Integrity 233

9.3 ext3 235

9.4 ext4 237

9.5 ReiserFS 238

9.6 JFFS2 239

9.6.1 Building a JFFS2 Image 240

9.7 cramfs 242

9.8 Network File System 244

9.8.1 Root File System on NFS 246

9.9 Pseudo File Systems 248

9.9.1 /proc File System 249

9.9.2 sysfs 252

9.10 Other File Systems 255

9.11 Building a Simple File System 256

9.12 Summary 258

9.12.1 Suggestions for Additional Reading 259

Chapter 10 MTD Subsystem 261

10.1 MTD Overview 262

10.1.1 Enabling MTD Services 263

10.1.2 MTD Basics 265

10.1.3 Configuring MTD on Your Target 267

10.2 MTD Partitions 267

10.2.1 Redboot Partition Table Partitioning 269

10.2.2 Kernel Command-Line Partitioning 273

10.2.3 Mapping Driver 274

10.2.4 Flash Chip Drivers 276

10.2.5 Board-Specific Initialization 276

10.3 MTD Utilities 279

10.3.1 JFFS2 Root File System 281

10.4 UBI File System 284

10.4.1 Configuring for UBIFS 284

10.4.2 Building a UBIFS Image 284

10.4.3 Using UBIFS as the Root File System 287

10.5 Summary 287

10.5.1 Suggestions for Additional Reading 288

Chapter 11 BusyBox 289

11.1 Introduction to BusyBox 290

11.1.1 BusyBox Is Easy 291

11.2 BusyBox Configuration 291

11.2.1 Cross-Compiling BusyBox 293

11.3 BusyBox Operation 293

11.3.1 BusyBox init 297

11.3.2 Sample rcS Initialization Script 299

11.3.3 BusyBox Target Installation 300

11.3.4 BusyBox Applets 302

11.4 Summary 303

11.4.1 Suggestions for Additional Reading 304

Chapter 12 Embedded Development Environment 305

12.1 Cross-Development Environment 306

12.1.1 “Hello World” Embedded 307

12.2 Host System Requirements 311

12.2.1 Hardware Debug Probe 311

12.3 Hosting Target Boards 312

12.3.1 TFTP Server 312

12.3.2 BOOTP/DHCP Server 313

12.3.3 NFS Server 316

12.3.4 Target NFS Root Mount 318

12.3.5 U-Boot NFS Root Mount Example 320

12.4 Summary 322

12.4.1 Suggestions for Additional Reading 323

Chapter 13 Development Tools 325

13.1 GNU Debugger (GDB) 326

13.1.1 Debugging a Core Dump 327

13.1.2 Invoking GDB 329

13.1.3 Debug Session in GDB 331

13.2 Data Display Debugger 333

13.3 cbrowser/cscope 335

13.4 Tracing and Profiling Tools 337

13.4.1 strace 337

13.4.2 strace Variations 341

13.4.3 ltrace 343

13.4.4 ps 344

13.4.5 top 346

13.4.6 mtrace 348

13.4.7 dmalloc 350

13.4.8 Kernel Oops 353

13.5 Binary Utilities 355

13.5.1 readelf 355

13.5.2 Examining Debug Information Using readelf 357

13.5.3 objdump 359

13.5.4 objcopy 360

13.6 Miscellaneous Binary Utilities 361

13.6.1 strip 361

13.6.2 addr2line 361

13.6.3 strings 362

13.6.4 ldd 362

13.6.5 nm 363

13.6.6 prelink 364

13.7 Summary 364

13.7.1 Suggestions for Additional Reading 365

Chapter 14 Kernel Debugging Techniques 367

14.1 Challenges to Kernel Debugging 368

14.2 Using KGDB for Kernel Debugging 369

14.2.1 KGDB Kernel Configuration 371

14.2.2 Target Boot with KGDB Support 372

14.2.3 Useful Kernel Breakpoints 376

14.2.4 Sharing a Console Serial Port with KGDB 377

14.2.5 Debugging Very Early Kernel Code 379

14.2.6 KGDB Support in the Mainline Kernel 380

14.3 Kernel Debugging Techniques 381

14.3.1 gdb Remote Serial Protocol 382

14.3.2 Debugging Optimized Kernel Code 385

14.3.3 GDB User-Defined Commands 392

14.3.4 Useful Kernel GDB Macros 393

14.3.5 Debugging Loadable Modules 402

14.3.6 printk Debugging 407

14.3.7 Magic SysReq Key 409

14.4 Hardware-Assisted Debugging 410

14.4.1 Programming Flash Using a JTAG Probe 411

14.4.2 Debugging with a JTAG Probe 413

14.5 When It Doesn’t Boot 417

14.5.1 Early Serial Debug Output 417

14.5.2 Dumping the printk Log Buffer 417

14.5.3 KGDB on Panic 420

14.6 Summary 421

14.6.1 Suggestions for Additional Reading 422

Chapter 15 Debugging Embedded Linux Applications 423

15.1 Target Debugging 424

15.2 Remote (Cross) Debugging 424

15.2.1 gdbserver 427

15.3 Debugging with Shared Libraries 429

15.3.1 Shared Library Events in GDB 431

15.4 Debugging Multiple Tasks 435

15.4.1 Debugging Multiple Processes 435

15.4.2 Debugging Multithreaded Applications 438

15.4.3 Debugging Bootloader/Flash Code 441

15.5 Additional Remote Debug Options 442

15.5.1 Debugging Using a Serial Port 442

15.5.2 Attaching to a Running Process 442

15.6 Summary 443

15.6.1 Suggestions for Additional Reading 444

Chapter 16 Open Source Build Systems 445

16.1 Why Use a Build System? 446

16.2 Scratchbox 447

16.2.1 Installing Scratchbox 447

16.2.2 Creating a Cross-Compilation Target 448

16.3 Buildroot 451

16.3.1 Buildroot Installation 451

16.3.2 Buildroot Configuration 451

16.3.3 Buildroot Build 452

16.4 OpenEmbedded 454

16.4.1 OpenEmbedded Composition 455

16.4.2 BitBake Metadata 456

16.4.3 Recipe Basics 456

16.4.4 Metadata Tasks 460

16.4.5 Metadata Classes 461

16.4.6 Configuring OpenEmbedded 462

16.4.7 Building Images 463

16.5 Summary 464

16.5.1 Suggestions for Additional Reading 464

Chapter 17 Linux and Real Time 465

17.1 What Is Real Time 466

17.1.1 Soft Real Time 466

17.1.2 Hard Real Time 467

17.1.3 Linux Scheduling 467

17.1.4 Latency 467

17.2 Kernel Preemption 469

17.2.1 Impediments to Preemption 469

17.2.2 Preemption Models 471

17.2.3 SMP Kernel 472

17.2.4 Sources of Preemption Latency 473

17.3 Real-Time Kernel Patch 473

17.3.1 Real-Time Features 475

17.3.2 O(1) Scheduler 476

17.3.3 Creating a Real-Time Process 477

17.4 Real-Time Kernel Performance Analysis 478

17.4.1 Using Ftrace for Tracing 478

17.4.2 Preemption Off Latency Measurement 479

17.4.3 Wakeup Latency Measurement 481

17.4.4 Interrupt Off Timing 483

17.4.5 Soft Lockup Detection 484

17.5 Summary 485

17.5.1 Suggestion for Additional Reading 485

Chapter 18 Universal Serial Bus 487

18.1 USB Overview 488

18.1.1 USB Physical Topology 488

18.1.2 USB Logical Topology 490

18.1.3 USB Revisions 491

18.1.4 USB Connectors 492

18.1.5 USB Cable Assemblies 494

18.1.6 USB Modes 494

18.2 Configuring USB 495

18.2.1 USB Initialization 497

18.3 sysfs and USB Device Naming 500

18.4 Useful USB Tools 502

18.4.1 USB File System 502

18.4.2 Using usbview 504

18.4.3 USB Utils (lsusb 507

18.5 Common USB Subsystems 508

18.5.1 USB Mass Storage Class 508

18.5.2 USB HID Class 511

18.5.3 USB CDC Class Drivers 512

18.5.4 USB Network Support 515

18.6 USB Debug 516

18.6.1 usbmon 517

18.6.2 Useful USB Miscellanea 518

18.7 Summary 519

18.7.1 Suggestions for Additional Reading 519

Chapter 19 udev 521

19.1 What Is udev? 522

19.2 Device Discovery 523

19.3 Default udev Behavior 525

19.4 Understanding udev Rules 527

19.4.1 Modalias 530

19.4.2 Typical udev Rules Configuration 533

19.4.3 Initial System Setup for udev 535

19.5 Loading Platform Device Drivers 538

19.6 Customizing udev Behavior 540

19.6.1 udev Customization Example: USB Automounting 540

19.7 Persistent Device Naming 541

19.7.1 udev Helper Utilities 542

19.8 Using udev with busybox 545

19.8.1 busybox mdev 545

19.8.2 Configuring mdev 547

19.9 Summary 548

19.9.1 Suggestions for Additional Reading 548

Appendix A GNU Public License 549

Preamble 550

Terms and Conditions for Copying, Distribution, and Modification 551

No Warranty 555

Appendix B U-Boot Configurable Commands 557

Appendix C BusyBox Commands 561

Appendix D SDRAM Interface Considerations 571

D.1 SDRAM Basics 572

D.1.1 SDRAM Refresh 573

D.2 Clocking 574

D.3 SDRAM Setup 575

D.4 Summary 580

D.4.1 Suggestions for Additional Reading 580

Appendix E Open Source Resources 581

Source Repositories and Developer Information 582

Mailing Lists 582

Linux News and Developments 583

Open Source Legal Insight and Discussion 583

Appendix F Sample BDI-2000 Configuration File 585

Index 593

Updates

Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020