圖書描述
《嵌入式Linux開發(英文版)》是一部全面易懂的嵌入式Linux開發實用指南。本書集中講解高效、高價值Linux的嵌入式產品所必需的知識,提供最常見技術問題的解決方案,示範如何創建高效的嵌入式Linux環境,並展示如何最有效地使用它,是一本為每一位嵌入式開發人員和工程師而寫的全面易懂的實用指南。主要內容包括:處理器基礎、Linux核心、核心初始化、系統初始化、Bootloader、設備驅動基礎、檔案系統、MTD子系統、BusyBox、嵌入式開發環境、開發工具、核心調試技術、調試嵌入式Linux應用程式、Linux與實時等。
作者簡介
Christopher Hallinan,是MontaVista公司的FAE(現場套用工程師),擁有25年以上的網路和通信行業經驗,做過多種產品的開發工作,在軟體接口方面的深厚的開發背景。加盟MontaVista之前,Chris是一位Linux顧問,擁有4年Linux系統移植、設備驅動和bootloader開發經驗,在U-Boot(一個流行的bootloader)項目中做出了傑出的貢獻。
圖書目錄
Chapter1 Introduction
1.1 WhyLinux? 2
1.2 EmbeddedLinuxToday 3
1.3 OpenSourceandtheGPL 3
1.3.1 FreeVersusFreedom 4
1.4 StandardsandRelevantBodies 5
1.4.1 LinuxStandardBase 5
1.4.2 OpenSourceDevelopmentLabs 5
1.5 ChapterSummary 7
1.5.1 SuggestionsforAdditionalReading 7
Chapter2 YourFirstEmbeddedExperience
2.1 EmbeddedorNot? 10
2.1.1 BIOSVersusBootloader 11
2.2 AnatomyofanEmbeddedSystem 12
2.2.1 TypicalEmbeddedLinuxSetup 14
2.2.2 StartingtheTargetBoard 15
2.2.3 BootingtheKernel 16
2.2.4 KernelInitialization:Overview 17
2.2.5 FirstUserSpaceProcess:init 19
2.3 StorageConsiderations 19
2.3.1 FlashMemory 20
2.3.2 NANDFlash 22
2.3.3 FlashUsage 23
2.3.4 FlashFileSystems 24
2.3.5 MemorySpace 25
2.3.6 ExecutionContexts 26
2.3.7 ProcessVirtualMemory 28
2.3.8 Cross-DevelopmentEnvironment 30
2.4 EmbeddedLinuxDistributions 32
2.4.1 CommercialLinuxDistributions 33
2.4.2 Do-It-YourselfLinuxDistributions 34
2.5 ChapterSummary 34
2.5.1 SuggestionsforAdditionalReading 35
Chapter3 ProcessorBasics
3.1 Stand-aloneProcessors 38
3.1.1 IBM970FX 39
3.1.2 IntelPentiumM 39
3.1.3 FreescaleMPC7448 40
3.1.4 CompanionChipsets 41
3.2 IntegratedProcessors:SystemsonChip 43
3.2.1 PowerPC 44
3.2.2 AMCCPowerPC 44
3.2.3 FreescalePowerPC 47
3.2.4 MIPS 52
3.2.5 BroadcomMIPS 53
3.2.6 AMDMIPS 55
3.2.7 OtherMIPS 56
3.2.8 ARM 56
3.2.9 TIARM 56
3.2.10 FreescaleARM 58
3.2.11 IntelARMXScale 59
3.2.12 OtherARM 60
3.2.13 OtherArchitectures 60
3.3 HardwarePlatforms 61
3.3.1 CompactPCI 61
3.3.2 ATCA 61
3.4 ChapterSummary 62
3.4.1 SuggestionsForAdditionalReading 63
Chapter4 TheLinuxKernel
4.1 Background 66
4.1.1 KernelVersions 67
4.1.2 KernelSourceRepositories 69
4.2 LinuxKernelConstruction 70
4.2.1 Top-LevelSourceDirectory 70
4.2.2 CompilingtheKernel 71
4.2.3 TheKernelProper:vmlinux 73
4.2.4 KernelImageComponents 75
4.2.5 SubdirectoryLayout 79
4.3 KernelBuildSystem 79
4.3.1 TheDot-Config 80
4.3.2 ConfigurationEditor(s) 82
4.3.3 MakefileTargets 85
4.3.4 KernelConfiguration 88
4.3.5 CustomConfigurationOptions 90
4.3.6 KernelMakefiles 94
4.3.7 KernelDocumentation 95
4.4 ObtainingaLinuxKernel 96
4.4.1 WhatElseDoINeed? 96
4.5 ChapterSummary 97
4.5.1 SuggestionsforAdditionalReading 98
Chapter5 KernelInitialization
5.1 CompositeKernelImage:PiggyandFriends 100
5.1.1 TheImageObject 103
5.1.2 ArchitectureObjects 104
5.1.3 BootstrapLoader 105
5.1.4 BootMessages 106
5.2 InitializationFlowofControl 109
5.2.1 KernelEntryPoint:head.o 111
5.2.2 KernelStartup:main.c 113
5.2.3 ArchitectureSetup 114
5.3 KernelCommandLineProcessing 114
5.3.1 The__setupMacro 116
5.4 SubsystemInitialization 121
5.4.1 The*__initcallMacros 122
5.5 TheinitThread 123
5.5.1 Initializationviainitcalls 125
5.5.2 FinalBootSteps 126
5.6 ChapterSummary 128
5.6.1 SuggestionsforAdditionalReading 128
Chapter6 SystemInitialization
6.1 RootFileSystem 130
6.1.1 FHS:FileSystemHierarchyStandard 131
6.1.2 FileSystemLayout 131
6.1.3 MinimalFileSystem 132
6.1.4 TheRootFSChallenge 134
6.1.5 Trial-and-ErrorMethod 135
6.1.6 AutomatedFileSystemBuildTools 135
6.2 Kernel’sLastBootSteps 136
6.2.1 FirstUserSpaceProgram 137
6.2.2 ResolvingDependencies 138
6.2.3 CustomizedInitialProcess 138
6.3 TheInitProcess 139
6.3.1 inittab 142
6.3.2 ExampleWebServerStartupScript 144
6.4 InitialRAMDisk 145
6.4.1 InitialRAMDiskPurpose 146
6.4.2 Bootingwithinitrd 146
6.4.3 BootloaderSupportforinitrd 147
6.4.4 initrdMagic:linuxrc 149
6.4.5 TheinitrdPlumbing 150
6.4.6 BuildinganinitrdImage 151
6.5 Usinginitramfs 152
6.6 Shutdown 153
6.7 ChapterSummary 154
6.7.1 SuggestionsforAdditionalReading 155
Chapter7 Bootloaders
7.1 RoleofaBootloader 158
7.2 BootloaderChallenges 159
7.2.1 DRAMController 159
7.2.2 FlashVersusRAM 160
7.2.3 ImageComplexity 160
7.2.4 ExecutionContext 163
7.3A UniversalBootloader:DasU-Boot 164
7.3.1 SystemConfiguration:U-Boot 164
7.3.2 U-BootCommandSets 167
7.3.3 NetworkOperations 167
7.3.4 StorageSubsystems 170
7.3.5 BootingfromDisk:U-Boot 171
7.4 PortingU-Boot 172
7.4.1 EP405U-BootPort 172
7.4.2 U-BootMakefileConfigurationTarget 174
7.4.3 EP405ProcessorInitialization 174
7.4.4 Board-SpecificInitialization 177
7.4.5 PortingSummary 180
7.4.6 U-BootImageFormat 181
7.5 OtherBootloaders 183
7.5.1 Lilo 183
7.5.2 GRUB 184
7.5.3 StillMoreBootloaders 186
7.6 ChapterSummary 186
7.6.1 SuggestionsforAdditionalReading 187
Chapter8 DeviceDriverBasics
8.1 DeviceDriverConcepts 190
8.1.1 LoadableModules 191
8.1.2 DeviceDriverArchitecture 192
8.1.3 MinimalDeviceDriverExample 192
8.1.4 ModuleBuildInfrastructure 193
8.1.5 InstallingYourDeviceDriver 197
8.1.6 LoadingYourModule 198
8.2 ModuleUtilities 199
8.2.1 insmod 199
8.2.2 ModuleParameters 199
8.2.3 lsmod 201
8.2.4 modprobe 201
8.2.5 depmod 203
8.2.6 rmmod 203
8.2.7 modinfo 204
8.3 DriverMethods 205
8.3.1 DriverFileSystemOperations 205
8.3.2 DeviceNodesandmknod 208
8.4 BringingItAllTogether 209
8.5 DeviceDriversandtheGPL 211
8.6 ChapterSummary 211
8.6.1 SuggestionsforAdditionalReading 212
Chapter9 FileSystems
9.1 LinuxFileSystemConcepts 214
9.1.1 Partitions 214
9.2 ext2 216
9.2.1 MountingaFileSystem 218
9.2.2 CheckingFileSystemIntegrity 219
9.3 ext3 221
9.4 ReiserFS 224
9.5 JFFS2 225
9.6 cramfs 228
9.7 NetworkFileSystem 230
9.7.1 RootFileSystemonNFS 232
9.8 PseudoFileSystems 234
9.8.1 ProcFileSystem 234
9.8.2 sysfs 238
9.9 OtherFileSystems 240
9.10 BuildingaSimpleFileSystem 242
9.11 ChapterSummary 243
9.11.1 SuggestionsforAdditionalReading 244
Chapter10 MTDSubsystem
10.1 EnablingMTDServices 248
10.1.1 BuildingMTD 250
10.2 MTDBasics 251
10.2.1 ConfiguringMTD 253
10.3 MTDPartitions 253
10.3.1 RedbootPartitionTablePartitioning 255
10.3.2 KernelCommandLinePartitioning 259
10.3.3 MappingDriver 260
10.3.4 FlashChipDrivers 262
10.3.5 Board-SpecificInitialization 263
10.4 MTDUtilities 265
10.4.1 JFFS2RootFileSystem 268
10.5 ChapterSummary 270
10.5.1 SuggestionsforAdditionalReading 271
Chapter11 BusyBox
11.1 IntroductiontoBusyBox 274
11.1.1 BusyBoxisEasy 275
11.2 BusyBoxConfiguration 275
11.2.1 Cross-CompilingBusyBox 277
11.3 BusyBoxOperation 278
11.3.1 BusyBoxInit 281
11.3.2 ExamplercSInitializationScript 283
11.3.3 BusyBoxTargetInstallation 284
11.3.4 BusyBoxCommands 286
11.4 ChapterSummary 288
11.4.1 SuggestionsforAdditionalReading 288
Chapter12 EmbeddedDevelopment
12.1 Cross-DevelopmentEnvironment 290
12.1.1 “HelloWorld”——Embedded 291
12.2 HostSystemRequirements 295
12.2.1 HardwareDebugProbe 296
12.3 HostingTargetBoards 296
12.3.1 TFTPServer 296
12.3.2 BOOTP/DHCPServer 298
12.3.3 NFSServer 300
12.3.4 TargetNFSRootMount 302
12.3.5 U-BootNFSRootMountExample 304
12.4 ChapterSummary 306
12.4.1 SuggestionsforAdditionalReading 307
Chapter13 DevelopmentTools
13.1 GNUDebugger(GDB) 310
13.1.1 DebuggingaCoreDump 311
13.1.2 InvokingGDB 313
13.1.3 DebugSessioninGDB 315
13.2 DataDisplayDebugger 317
13.3 cbrowser/cscope 319
13.4 TracingandProfilingTools 321
13.4.1 strace 321
13.4.2 straceVariations 325
13.4.3 ltrace 327
13.4.4 ps 328
13.4.5 top 330
13.4.6 mtrace 332
13.4.7 dmalloc 334
13.4.8 KernelOops 337
13.5 BinaryUtilities 340
13.5.1 readelf 340
13.5.2 ExaminingDebugInfoUsingreadelf 342
13.5.3 objdump 344
13.5.4 objcopy 345
13.6 MiscellaneousBinaryUtilities 346
13.6.1 strip 346
13.6.2 addr2line 346
13.6.3 strings 347
13.6.4 ldd 347
13.6.5 nm 348
13.6.6 prelink 349
13.7 ChapterSummary 349
13.7.1 SuggestionsforAdditionalReading 350
Chapter14 KernelDebuggingTechniques
14.1 ChallengestoKernelDebugging 352
14.2 UsingKGDBforKernelDebugging 353
14.2.1 KGDBKernelConfiguration 355
14.2.2 TargetBootwithKGDBSupport 355
14.2.3 UsefulKernelBreakpoints 358
14.3 DebuggingtheLinuxKernel 360
14.3.1 gdbRemoteSerialProtocol 361
14.3.2 DebuggingOptimizedKernelCode 364
14.3.3 gdbUser-DefinedCommands 369
14.3.4 UsefulKernelgdbMacros 370
14.3.5 DebuggingLoadableModules 378
14.3.6 printkDebugging 383
14.3.7 MagicSysReqKey 384
14.4 Hardware-AssistedDebugging 385
14.4.1 ProgrammingFlashUsingaJTAGProbe 387
14.4.2 DebuggingwithaJTAGProbe 389
14.5 WhenItDoesn’tBoot 392
14.5.1 EarlySerialDebugOutput 393
14.5.2 DumpingtheprintkLogBuffer 394
14.5.3 KGDBonPanic 396
14.6 ChapterSummary 397
14.6.1 SuggestionsforAdditionalReading 398
Chapter15 DebuggingEmbedded
15.1 TargetDebugging 400
15.2 Remote(Cross)Debugging 400
15.2.1 gdbserver 403
15.3 DebuggingwithSharedLibraries 405
15.3.1 SharedLibraryEventsinGDB 407
15.4 DebuggingMultipleTasks 411
15.4.1 DebuggingMultipleProcesses 411
15.4.2 DebuggingMultithreadedApplications 414
15.4.3 DebuggingBootloader/FlashCode 417
15.5 AdditionalRemoteDebugOptions 417
15.5.1 DebuggingviaSerialPort 418
15.5.2 AttachingtoaRunningProcess 418
15.6 ChapterSummary 419
15.6.1 SuggestionsforAdditionalReading 419
Chapter16 PortingLinux
16.1 LinuxSourceOrganization 422
16.1.1 TheArchitectureBranch 422
16.2 CustomLinuxforYourBoard 424
16.2.1 PrerequisitesandAssumptions 426
16.2.2 CustomizingKernelInitialization 427
16.2.3 StaticKernelCommandLine 429
16.3 PlatformInitialization 431
16.3.1 EarlyVariableAccess 435
16.3.2 BoardInformationStructure 436
16.3.3 Machine-DependentCalls 438
16.4 PuttingItAllTogether 439
16.4.1 OtherArchitectures 442
16.5 ChapterSummary 442
16.5.1 SuggestionsforAdditionalReading 443
Chapter17 LinuxandRealTime
17.1 WhatIsRealTime? 446
17.1.1 SoftRealTime 446
17.1.2 HardRealTime 446
17.1.3 LinuxScheduling 447
17.1.4 Latency 447
17.2 KernelPreemption 449
17.2.1 ImpedimentstoPreemption 449
17.2.2 PreemptionModels 451
17.2.3 SMPKernel 452
17.2.4 SourcesofPreemptionLatency 453
17.3 Real-TimeKernelPatch 453
17.3.1 Real-TimeFeatures 455
17.3.2 O(1)Scheduler 458
17.3.3 CreatingaReal-TimeProcess 458
17.3.4 CriticalSectionManagement 459
17.4 DebuggingtheReal-TimeKernel 460
17.4.1 SoftLockupDetection 460
17.4.2 PreemptionDebugging 461
17.4.3 DebugWakeupTiming 461
17.4.4 WakeupLatencyHistory 462
17.4.5 InterruptOffTiming 462
17.4.6 InterruptOffHistory 462
17.4.7 LatencyTracing 464
17.4.8 DebuggingDeadlockConditions 466
17.4.9 RuntimeControlofLockingMode 467
17.5 ChapterSummary 467
17.5.1 SuggestionsforAdditionalReading 467
AppendixA:GNUPublicLicense 469
AppendixB:U-BootConfigurableCommands 479
AppendixC:BusyBoxCommands 483
AppendixD:SDRAMInterfaceConsiderations 491
D.1 SDRAMBasics 492
D.1.1 SDRAMRefresh 493
D.2 Clocking 494
D.3 SDRAMSetup 495
D.4 Summary 500
D.4.1 SuggestionsforAdditionalReading 500
AppendixE:OpenSourceResources 501
AppendixF:SampleBDI-2000ConfigurationFile 505
Index 513
……