Home > Store

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

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

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

Book

  • Sorry, this book is no longer in print.
Not for Sale

Description

  • Copyright 2011
  • Dimensions: 7" x 9-1/8"
  • Pages: 656
  • Edition: 2nd
  • Book
  • ISBN-10: 0-13-701783-9
  • ISBN-13: 978-0-13-701783-6

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.

Extras

Author's Site

Visit the companion web site at www.embeddedlinuxprimer.com.

Sample Content

Online Sample Chapter

Bootloaders in Embedded Linux Systems

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