具体描述
《嵌入式Linux基础教程(第2版)(英文版)》是嵌入式Linux的经典教程,介绍了引导装入程序、系统初始化、文件系统、闪存和内核、应用程序调试技巧等,还讲述了构建Linux系统的工作原理,用于驱动不同体系结构的配置,Linux内核源码树的特性,如何根据需求配制内核运行时的行为,如何扩展系统功能,用于构建完整嵌入式Linux发行版的常用构建系统,USB子系统和系统配置工具udev等内容。更重要的是,《嵌入式Linux基础教程(第2版•英文版)》阐述了如何修改系统使之满足读者自己的需求,使读者能从中学习一些嵌入式工程中非常有用的提示和技巧。
《嵌入式Linux基础教程(第2版)(英文版)》适合Linux程序员阅读,也可作为高等院校相关专业师生的参考读物。
作者简介
Christopher Hallinan 著名嵌入式Linux技术专家。现任Mentor Graphics公司技术市场工程师,曾任Monta Vista软件公司现场应用工程师,3Com公司工程总监,Crosscomm公司工程总监。他有25年以上网络和通信产品的软硬件开发经验。曾担任 Linux咨询师,提供定制Linux主板接口、设备驱动程序和引导装入程序等方面的解决方案。
目录信息
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.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.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.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.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 154
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.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.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.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
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
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.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.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
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.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.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
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
· · · · · · (收起)
读后感
什么亚马逊全五星评价,扯淡。 我来一看,满共就两个人评价,一看就是托。书超烂,且翻译的绝对垃圾。 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
什么亚马逊全五星评价,扯淡。 我来一看,满共就两个人评价,一看就是托。书超烂,且翻译的绝对垃圾。 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
A great book for newbies who want to pick up embedded linux development quickly. This book offers an excellent big picture and enough details about embedded linux. The knowledge is this area is so wide and the author nicely chains all necessary topics tog...
什么亚马逊全五星评价,扯淡。 我来一看,满共就两个人评价,一看就是托。书超烂,且翻译的绝对垃圾。 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
什么亚马逊全五星评价,扯淡。 我来一看,满共就两个人评价,一看就是托。书超烂,且翻译的绝对垃圾。 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
用户评价
我是一名对嵌入式Linux系统底层原理充满好奇的学习者,而《嵌入式Linux基础教程(第2版•英文版)》这本书,恰恰满足了我对深入探索的渴望。它没有满足于仅仅教会我如何使用Linux,而是带领我深入了解Linux的“灵魂”。书中关于Linux内核架构的讲解,虽然篇幅有限,但却抓住了核心要点,让我对内核的各个子系统,例如进程调度、内存管理、文件系统、设备驱动模型等,都有了清晰的认识。它没有回避Linux的复杂性,而是通过逻辑清晰的阐述和精炼的图示,将这些抽象的概念变得易于理解。我尤其喜欢它对Linux进程间通信(IPC)机制的讲解。IPC是实现分布式系统和多进程协同工作的基础,而Linux提供了多种多样的IPC机制。这本书详细介绍了管道、消息队列、共享内存、信号量等IPC机制的工作原理、使用方法以及它们各自的优缺点。它还通过实际的代码示例,演示了如何在嵌入式Linux系统中有效地利用IPC机制来实现进程间的通信和协作。这对于我理解和开发复杂的嵌入式应用程序非常有帮助。此外,书中还对Linux的可视化工具和调试方法进行了介绍,例如如何利用Eclipse CDT等IDE进行嵌入式Linux应用程序的开发和调试。这让我能够更高效地进行代码编写、编译、链接和调试,从而加快我的开发进程。这本书的英文原版,更是让我感受到了原汁原味的技术魅力,没有了翻译可能带来的信息损失。它的语言风格严谨而不失幽默,让学习过程变得更加愉快。总而言之,这本书是一部真正能够帮助学习者深入理解嵌入式Linux系统精髓的权威著作,它让我对Linux的底层运作机制有了更深刻的认识。
我是一名对嵌入式系统充满热情,但又时常感到力不从心的学生。《嵌入式Linux基础教程(第2版•英文版)》这本书,就像一位循循善诱的良师益友,在我迷茫和困惑的时候,总能给予我最及时、最有力的指导。我尤其看重书中对于嵌入式Linux开发流程的全面梳理。从最初的硬件选型、交叉编译环境的搭建,到系统的移植、应用程序的开发,再到最后的调试和优化,这本书都给予了详尽的介绍。它没有回避任何一个环节的复杂性,而是以一种“化繁为简”的方式,将每一个步骤都分解成可操作的单元,并配以大量的实例和图解。我曾经在进行一个嵌入式项目时,对整个开发流程感到非常迷茫,不知道从何下手。是这本书,让我看到了一个清晰的蓝图,让我知道每一个环节需要做什么,以及如何去完成。它关于Linux内核裁剪和配置的部分,尤其令我印象深刻。对于嵌入式系统而言,精简的系统资源是至关重要的,而如何有效地裁剪内核,以满足特定硬件和应用的需求,一直是一个挑战。这本书提供了一套系统的方法论,让我能够根据实际需求,选择最合适的内核模块,从而达到最优的性能和资源占用。此外,书中对Bootloader的讲解也相当到位。Bootloader是嵌入式系统启动的第一步,它的稳定性和可靠性至关重要。这本书对U-Boot等常用Bootloader的配置和移植进行了详细的阐述,让我能够更好地理解和掌握Bootloader的工作原理。总而言之,这本书是一本真正从开发者角度出发编写的教材,它不仅传授了知识,更传递了一种解决问题的思维方式。它让我从一个被动接受知识的学习者,转变成了一个主动探索和解决问题的开发者。
这本书的出现,无疑为我这个在嵌入式Linux领域摸爬滚打多年的老兵,注入了一股新的活力。虽然我早已熟悉了Linux的基本操作和一些高级应用,但始终觉得在底层原理和系统架构方面,自己 still there is a lot to learn. 《嵌入式Linux基础教程(第2版•英文版)》恰恰弥补了这一块的短板。它没有停留在“会用”的层面,而是深入到了“理解”的层面。书中对于Linux进程管理、内存管理、I/O调度等核心概念的阐述,逻辑严谨,条理清晰,让我对这些曾经模糊不清的理论有了更深刻的认识。它通过详细的图示和精辟的文字,将这些抽象的概念具象化,让我能够更好地理解它们在实际系统运行中所扮演的角色。我尤其欣赏它对系统性能优化部分的讲解。在实际的嵌入式项目开发中,性能往往是至关重要的考量因素。这本书提供了一些实用的性能分析工具和优化方法,例如如何使用`top`、`vmstat`等命令来监控系统资源,如何通过调整内核参数来提升系统响应速度,以及如何优化应用程序的内存使用等等。这些宝贵的经验,让我能够更好地定位和解决性能瓶颈问题,从而提升产品的整体用户体验。此外,书中还对实时Linux的概念进行了介绍,这对于开发对时间精度有严格要求的嵌入式系统尤为重要。它详细讲解了PREEMPT_RT补丁的原理和应用,让我对如何构建一个硬实时嵌入式系统有了初步的认识。这本书的英文原版,更是保证了其内容的准确性和前沿性,让我能够接触到最原汁原味的知识。总而言之,这本书就像一位经验丰富的导师,它不会给你直接的答案,但会指引你找到方向,教会你思考的方法,帮助你突破瓶颈,达到新的高度。
在我看来,《嵌入式Linux基础教程(第2版•英文版)》这本书,是一本集理论深度与实践广度于一体的优秀教材。作为一名初涉嵌入式Linux领域的学习者,我曾经对各种概念感到陌生和困惑。然而,这本书以其严谨的逻辑和清晰的结构,逐步引导我建立了完整的知识体系。它不是那种把所有内容堆砌在一起的“大杂烩”,而是有条理地组织了从基础到进阶的各种知识点。我特别欣赏书中关于嵌入式Linux系统移植的章节。系统移植是嵌入式Linux开发中至关重要的一个环节,它涉及到对硬件的深刻理解以及对Linux内核的裁剪和配置。这本书详细介绍了如何选择合适的Linux发行版,如何配置和编译内核,以及如何制作根文件系统。它通过大量的实例,手把手地教我如何将Linux系统移植到不同的开发板上,并成功地引导系统启动。这让我从理论层面走向了实践层面,大大增强了我的动手能力。此外,书中还对嵌入式Linux系统的用户界面和图形化开发进行了介绍。虽然这不是这本书的重点,但它提供的关于Qt等图形化框架的基础知识,让我对如何在嵌入式设备上实现用户交互有了一个初步的认识。这为我后续学习更复杂的图形化开发打下了基础。这本书的英文原版,更是保证了其内容的准确性和前沿性,让我能够接触到最原汁原味的知识。总而言之,这本书是一本非常适合初学者入门的教材,它循序渐进,内容翔实,能够帮助你快速掌握嵌入式Linux开发的核心技能。
说实话,在拿到这本《嵌入式Linux基础教程(第2版•英文版)》之前,我对其抱有一种怀疑的态度。市面上关于嵌入式Linux的书籍琳琅满目,质量参差不齐,很多都存在内容陈旧、讲解含糊不清的问题。然而,当我翻开这本书的第一页,我的疑虑便烟消云散了。这本书的英文原版本身就代表着一种严谨和权威,而第二版更是经过了时代的沉淀和技术的更新。书中对于Linux内核的讲解,虽然没有深入到源码层面,但却抓住了核心要点,让我对内核的宏观架构有了清晰的认识。它没有回避Linux的复杂性,但通过巧妙的组织和逻辑性的阐述,将那些看似难以理解的概念变得触手可及。我印象最深刻的是关于设备驱动模型的部分。设备驱动一直是嵌入式开发中最具挑战性的环节之一,但这本书用非常系统化的方式介绍了Linux设备驱动的开发流程,从字符设备、块设备到网络设备,都给出了清晰的框架和实际的例子。特别是对GPIO、I2C、SPI等常用接口的驱动讲解,让我看到了理论与实践结合的力量。书中提供的代码示例,虽然精炼,却包含了关键的API调用和逻辑,非常适合初学者模仿和学习。我曾经在编写一个简单的SPI驱动时遇到了瓶颈,反复阅读了书中的相关章节,结合它的代码,终于找到了问题的关键,并成功解决了。这本书还对嵌入式Linux的文件系统进行了深入浅出的分析,包括了各种文件系统的特点、挂载方式以及一些高级的应用。这让我对嵌入式系统中存储数据的机制有了更全面的理解。总的来说,这本书不仅仅是教你如何“用”Linux,更是让你理解Linux的“为什么”,它培养的是一种解决问题的能力,而不仅仅是技能的堆砌。它是一本值得反复研读的经典之作,无论你是初学者还是有一定基础的开发者,都能从中获益匪浅。
这本书简直是我的救星!自从踏入嵌入式Linux的世界,我就像一只无头苍蝇,到处碰壁。各种零散的资料、晦涩难懂的官方文档,让我一度想要放弃。直到我发现了这本《嵌入式Linux基础教程(第2版•英文版)》。不得不说,这本教材的设计真是太贴心了。它不是那种上来就扔一堆理论然后让你自行领悟的风格,而是循序渐进,从最基础的概念讲起,比如Linux的起源、文件系统结构、基本命令等等,就像一位耐心无比的老师,一步一步引导你入门。我尤其喜欢它讲解shell脚本的部分,以前觉得shell脚本是黑魔法,现在看这本书,才发现原来可以如此直观易懂。它通过大量生动的例子,让我体会到shell脚本的强大和灵活性,学会了如何编写脚本来自动化一些重复性的任务,这在嵌入式开发中简直是神器。而且,书中对于交叉编译器的讲解也非常到位,这对于新手来说绝对是一个巨大的挑战,但这本书用清晰的图示和详细的步骤,一步一步教我如何搭建和使用交叉编译环境,让我不再对这个环节感到恐惧。我曾经花了好几天时间在交叉编译环境的搭建上,却收效甚微,而看了这本书之后,不到一个下午就搞定了,这种成就感真是无与伦比。此外,书中还涉及了嵌入式Linux系统移植的一些基础知识,虽然不是深入的讲解,但对于建立整体概念非常有帮助。它让我了解了整个移植的流程和关键点,为我后续更深入的学习打下了坚实的基础。总而言之,这本书让我从一个对嵌入式Linux一无所知的菜鸟,变成了一个能够独立完成一些基本开发任务的入门者,极大地提升了我的学习效率和信心。我强烈推荐给所有想要学习嵌入式Linux的朋友,特别是那些和我一样,觉得这个领域门槛很高,但又充满好奇心的学习者。它就像一座桥梁,将你与嵌入式Linux的奇妙世界连接起来。
我得说,这是一本让我眼前一亮的教材。作为一名在嵌入式领域摸索了几年,但总感觉知识体系不够完善的学习者,《嵌入式Linux基础教程(第2版•英文版)》的出现,就像一场及时雨。我一直对网络通信在嵌入式系统中的应用情有独钟,而这本书在这方面的内容,绝对是亮点中的亮点。它不仅详细讲解了TCP/IP协议栈的基础知识,还深入剖析了Socket编程在嵌入式Linux下的实现。从最基本的TCP和UDP通信,到更高级的HTTP、FTP等应用层协议,书中都给出了详尽的解释和实用的代码示例。我曾经在实现一个嵌入式设备与服务器之间的数据传输时遇到了很多困难,反复查阅了大量资料,都觉得不够系统。而这本书,用一种由浅入深、层层递进的方式,将整个网络通信的知识体系展现在我面前。它让我理解了数据包的传输过程,学会了如何编写高效的网络应用程序,以及如何处理各种异常情况。特别是关于多线程和多进程网络编程的部分,它清晰地阐述了它们在处理并发连接时的优缺点,并提供了相应的解决方案。这对于构建一个能够同时处理多个客户端请求的嵌入式设备至关重要。此外,书中还涉及了嵌入式Linux系统的网络配置和调试,包括了IP地址设置、路由配置、防火墙规则等等。这些知识让我能够更灵活地管理和控制我的嵌入式设备在网络中的行为。这本书的英文原版,更是让我感受到了原汁原味的技术魅力,没有了翻译可能带来的信息损失。它的语言风格严谨而不失幽默,让学习过程变得更加愉快。这本书是我近期学习生涯中的一大收获,它让我对嵌入式Linux的网络通信能力有了全新的认识,也为我未来的项目开发提供了坚实的技术支撑。
这本《嵌入式Linux基础教程(第2版•英文版)》让我感受到了知识的力量。作为一名已经从事嵌入式开发一段时间的工程师,我一直在寻找一本能够系统性梳理嵌入式Linux知识体系,并能提供进阶思考方向的书籍。这本书恰恰满足了我的需求。它不仅仅停留在概念的讲解,而是深入到了技术的“应用”层面。书中关于嵌入式Linux系统监控和日志分析的内容,让我受益匪浅。在实际的嵌入式项目开发中,系统的稳定性和可靠性是至关重要的。了解如何对系统进行有效的监控,以及如何分析系统日志来定位问题,是保证系统稳定运行的关键。这本书提供了多种实用的监控工具和日志分析方法,例如如何使用Syslog来记录系统日志,如何利用Nagios等监控系统来实时监测设备状态,以及如何通过日志分析来排查各种潜在的故障。它让我理解了“预防胜于治疗”的理念,能够通过提前的监控和及时的日志分析,将潜在的问题扼杀在摇篮里。此外,书中还对嵌入式Linux系统的更新和维护策略进行了探讨。随着产品的迭代升级,嵌入式系统的更新和维护变得越来越频繁。这本书提供了一些关于OTA(Over-the-Air)更新的解决方案,以及如何安全有效地进行系统升级。这让我能够更好地规划和实施嵌入式设备的生命周期管理。这本书的英文原版,更是让我感受到了原汁原味的技术魅力,没有了翻译可能带来的信息损失。它的语言风格严谨而不失幽默,让学习过程变得更加愉快。总而言之,这本书是一部集理论、实践、工具和理念于一体的权威著作,它不仅能帮助你掌握嵌入式Linux的核心技术,更能培养你成为一名优秀的嵌入式系统维护和管理者。
对于一名在嵌入式Linux领域寻求进阶的学习者来说,《嵌入式Linux基础教程(第2版•英文版)》这本书,无疑提供了一个绝佳的跳板。我一直对嵌入式Linux系统的性能调优和故障排除感到困惑,这本书在这方面的内容,给了我巨大的启发。它没有空泛地讲述理论,而是提供了一系列切实可行的方法和工具。书中详细介绍了如何利用各种调试工具,例如GDB、Valgrind等,来定位和解决应用程序中的bug。它清晰地阐述了这些工具的使用方法和常见命令,让我能够更有效地进行代码调试。我曾经在一个项目中遇到了一个难以捉摸的内存泄漏问题,花了很多天的时间都未能解决。在阅读了这本书关于Valgrind的章节后,我茅塞顿开,利用Valgrind成功地找到了内存泄漏的根源,并迅速修复了问题。这种实操性的指导,是我之前在其他书籍中很少见到的。此外,书中还对嵌入式Linux系统的性能分析和优化进行了深入的讲解。它介绍了如何使用各种性能分析工具,例如`perf`、`strace`等,来监控系统的运行状态,找出性能瓶颈,并提出相应的优化建议。例如,它详细讲解了如何通过优化算法、减少系统调用、合理使用缓存等方式来提升应用程序的执行效率。这对于资源受限的嵌入式设备来说,具有非常重要的指导意义。这本书的英文原版,更是保证了其内容的专业性和严谨性,让我能够学习到最原汁原味的技术知识。总而言之,这本书是一本真正能够帮助开发者提升技能、解决实际问题的宝典,它让我对嵌入式Linux的调试和优化能力有了质的飞跃。
在我看来,《嵌入式Linux基础教程(第2版•英文版)》这本书,绝对是嵌入式Linux领域的一部“宝典”。它不是那种只停留在表面概念的浅尝辄止,而是深入到了技术的骨髓。我对书中关于嵌入式Linux系统集成和定制的内容尤为欣赏。在实际的嵌入式项目开发中,我们常常需要将Linux系统与特定的硬件相结合,并根据应用需求进行高度定制。这本书提供了非常实用的方法和工具,帮助我们完成这一艰巨的任务。它详细介绍了如何使用Yocto Project等嵌入式Linux构建系统,来创建完全定制化的Linux发行版。从软件包的管理、依赖关系的解决,到生成最终的镜像文件,Yocto Project的整个流程都得到了清晰的讲解。我曾经在尝试使用Yocto Project时遇到了很多困难,是这本书,成为了我最得力的助手。它提供的详细步骤和代码示例,让我能够一步一步地搭建自己的Linux发行版,并成功地将其移植到目标硬件上。此外,书中还对嵌入式Linux的安全性进行了深入的探讨。随着嵌入式设备越来越普及,安全性问题也日益凸显。这本书介绍了一些常用的安全加固技术,例如用户和权限管理、SELinux的使用、网络安全配置等等。这些知识让我能够更好地保护我的嵌入式设备免受潜在的攻击。它培养了一种“安全第一”的开发理念,这在当今的物联网时代尤为重要。这本书的英文原版,更保证了其内容的准确性和时效性,让我能够接触到最前沿的技术动态。总而言之,这本书是一部集理论、实践、工具和理念于一体的权威著作,它不仅能帮助你掌握嵌入式Linux的核心技术,更能培养你成为一名优秀的嵌入式系统开发者。
每天上午半小时到一小时,用了半个多月,粗粗翻了一遍。这本书的特点是大而全,基本涵盖了嵌入式Linux开发的方方面面,当然,副作用便是每个主题都未深入展开,但仍不失为嵌入式Linux开发的一份优质大纲,推荐从事嵌入式Linux开发的朋友一看。
好书,浅显易懂,不要被中文书名坑了啊。。。差点错了 很全面,很好的基础书
全面,对我来说正好够用...
好书,浅显易懂,不要被中文书名坑了啊。。。差点错了 很全面,很好的基础书
全面,对我来说正好够用...