
PRENTICEHALLPRENTICEHALL OPEN SOURCE SOFTWAREDEVELOPMENT SERIESEmbeddedLinux PrimerSecond EditionAPracticalReal-WorldApproachChristopherHallinan
ptg

ContentsForeword for the First Edition.CXForeword for the Second Edition.xxviPrefacexviiAcknowledgments for theFirst Edition..xxxiiAcknowledgmentsfortheSecondEdition..xxxVAbout the Author.xxxviChapter1 Introduction.1.1WhyLinux?..21.2EmbeddedLinuxToday31.3OpenSourceandtheGPL3.41.3.1FreeVersusFreedom1.4Standards and Relevant Bodies.51.4.1LinuxStandardBase51.4.2Linux Foundation61.4.36Carrier-Grade Linux1.4.4MobileLinuxInitiative:Moblin.71.4.57Service AvailabilityForum.81.5Summary81.5.1Suggestions forAdditional Readingvii
ptg vii 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 Download at www.wowebook.com

viliEmbedded Linux Primer, Second EditionChapter 2The Big Picture.L2.1 Embedded or Not?10112.1.1 BIOS Versus Bootloader122.2AnatomyofanEmbeddedSystem..132.2.1Typical Embedded Linux Setup.142.2.2Starting theTarget Board2.2.3 Booting the Kernel...162.2.4 Kernel Initialization:Overview.18.. 192.2.5First User Space Process: init....202.3StorageConsiderations.202.3.1Flash Memory.222.3.2NANDFlash...232.3.3Flash Usage....242.3.4FlashFile Systems2.3.525MemorySpace...262.3.6Execution Contexts..282.3.7Process Virtual Memory...302.3.8Cross-DevelopmentEnvironment.322.4Embedded LinuxDistributions.32.4.1Commercial LinuxDistributions.......332.4.2Do-It-Yourself Linux Distributions..342.5Summary.352.5.1 Suggestions forAdditionalReadingChapter3ProcessorBasics...37383.1Stand-AloneProcessorIBM970FX393.1.13.1.2IntelPentiumM.39
ptg viii Embedded Linux Primer, Second Edition 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 Download at www.wowebook.com

ixContents3.1.3IntelAtomTM40.403.1.4FreescaleMPC7448..413.1.5CompanionChipsets.433.2Integrated Processors: Systems on Chip..443.2.1 Power Architecture...443.2.2FreescalePowerArchitecture..453.2.3FreescalePowerQUICCI..463.2.4FreescalePowerQUICCII..473.2.5PowerQUICCIIPro..FreescalePowerQUICCIII..483.2.6Freescale QorIQTM.483.2.7.503.2.8AMCCPowerArchitecture3.2.9MIPS....53..543.2.10BroadcomMIPS3.2.11OtherMIPS..55ARM..553.2.123.2.13TIARM..563.2.14.58FreescaleARM.3.2.15OtherARMProcessors59..593.3Other Architectures....603.4HardwarePlatforms..603.4.1CompactPCI3.4.2ATCA..60..613.5Summary.623.5.1 Suggestions forAdditional Reading
ptg Contents ix 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 Download at www.wowebook.com

Embedded Linux Primer, Second Edition.63Chapter4TheLinuxKernel:ADifferentPerspective.644.1Background.654.1.1 Kernel Versions4.1.2Kernel SourceRepositories..67.684.1.3UsinggittoDownloadaKernel...684.2LinuxKernel Construction..694.2.1Top-Level Source Directory.694.2.2CompilingtheKernel..724.2.3TheKernel Proper:vmlinux4.2.4Kernel Image Components.....734.2.5SubdirectoryLayout..774.3Kernel Build System..78...784.3.1 TheDot-Config....804.3.2 ConfigurationEditor(s).834.3.3MakefileTargets894.4Kernel Configuratior4.4.1 Custom Configuration Options.......914.4.2Kernel Makefiles.95964.5KernelDocumentation4.6ObtainingaCustomLinuxKernel..964.6.1What Else DoI Need?.974.7Summary.974.7.1 SuggestionsforAdditionalReading..98..99Chapter5 Kernel Initialization..1005.1CompositeKernel Image:PiggyandFriends1035.1.1TheImage Object..5.1.2Architecture Objects.......104
ptg x Embedded Linux Primer, Second Edition 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 Download at www.wowebook.com

Contentsxi1055.1.3BootstrapLoader.1065.1.4 Boot Messages..1095.2 InitializationFlowof Control.1115.2.1KernelEntryPoint:head.01135.2.2 Kernel Startup:main.c..1145..3Architecture Setup....1155.3KernelCommand-LineProcessing1165.3.1ThesetupMacro..1225.4 SubsystemInitialization...1225.4.1The*__initcallMacros.1255.5Theinit Thread.1265.5.1Initialization Via initcalls..1275.5.2initcall_debug...1275.5.3Final Boot Steps.1295.6Summary5.6.1Suggestions for Additional Reading.130.131Chapter6UserSpaceInitialization1326.1RootFileSystem.1336.1.1FHS:File System HierarchyStandard..1336.1.2File System Layout...1346.1.3Minimal File System..1366.1.4TheEmbedded RootFSChallenge..6.1.5Trial-and-Error Method..1376.1.6AutomatedFileSystemBuildTools.137
ptg Contents xi 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 Download at www.wowebook.com

xiiEmbedded Linux Primer, Second Edition6.2Kernel'sLastBoot Steps137..1396.2.1 First User Space Program..1396.2.2 Resolving Dependencies.6.2.3CustomizedInitialProcess.1406.3TheinitProcess..140...1436.3.1inittab..1456.3.2SampleWebServerStartupScript.1466.4Initial RAMDisk..1476.4.1 Booting with initrd..1486.4.2Bootloader Supportfor initrd....1506.4.3initrdMagic:linuxrc.1516.4.4 The initrd Plumbing.....1526.4.5 Building an initrd Imag......1536.5 Using initramfs.1546.5.1 Customizinginitramfs..1566.6Shutdown..1566.7 Summary..6.7.1 Suggestions forAdditional Reading.157Chapter7Bootloaders.159..1607.1 Role of a Bootloader...7.2Bootloader Challenges.1617.2.1 DRAM Controller161.1627.2.2 Flash Versus RAM...1627.2.3ImageComplexity.1657.2.4ExecutionContext
ptg xii Embedded Linux Primer, Second Edition 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 Download at www.wowebook.com

Contentsxili1667.3A Universal Bootloader: Das U-Boot..1667.3.1 ObtainingU-Boot..1677.3.2Configuring U-Boot..1697.3.3U-BootMonitorCommands.1707.3.4NetworkOperations..1737.3.5Storage Subsystems.....1747.3.6 Booting from Disk..1747.4Porting U-Boot..1757.4.1EP405U-Boot Port...1767.4.2U-Boot Makefile ConfigurationTarget1777.4.3EP405FirstBuild1787.4.4EP405ProcessorInitialization..1817.4.5Board-SpecificInitialization....1847.4.6Porting Summary1857.4.7U-Boot ImageFormat.7.5DeviceTreeBlob (Flat DeviceTree),.187.1897.5.1 Device Tree Source..1927.5.2Device Tree Compiler1937.5.3AlternativeKernel ImagesUsingDTB..1947.6OtherBootloaders.....1947.6.1Lilo1957.6.2GRUBStill MoreBootloaders.1977.6.3..1977.7Summary.1987.7.1Suggestions forAdditional Reading
ptg Contents xiii 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 Download at www.wowebook.com

xivEmbedded Linux Primer, Second Edition201Chapter8DeviceDriverBasics..2028.1 DeviceDriverConcepts.2038.1.1 LoadableModules.2048.1.2DeviceDriverArchitecture.2048.1.3Minimal DeviceDriverExampleModule Build Infrastructure...2058.1.4.2098.1.5Installing a Device Driver8.1.6210Loading a Module8.1.7Module Parameters.2118.2Module Utilities.2128.2.1.212insmod2138.2.21smod8.2.3..213modprobe.8.2.4..214depmod.8.2.5215rmmod8.2.6.216modinfo..2178.3DriverMethods..2178.3.1DriverFileSystemOperations2208.3.2Allocation of DeviceNumbers8.3.3DeviceNodesandmknod..220.2228.4Bringing It All Together..2238.5Building Out-of-Tree Drivers..2248.6Device Drivers and the GPL.8.7..225Summary.2268.7.1Suggestions for Additional Reading
ptg xiv Embedded Linux Primer, Second Edition 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 Download at www.wowebook.com

ContentsXVChapter9FileSystems227.2289.1LinuxFileSystemConcepts2299.1.1Partitions2309.2ext22329.2.1MountingaFileSystem..2339.2.2Checking File System Integrity ...2359.3ext39.4ext42379.5ReiserFS...2389.6.239JFFS22409.6.1Building a JFFS2 Image.2429.7cramfs..2449.8NetworkFileSystem...2469.8.1Root File System on NFS.2489.9Pseudo File Systems...2499.9.1/proc File System.....2529.9.2sysfs.2559.10OtherFileSystems2569.11Building a Simple File System..2589.12Summary2599.12.1 Suggestions forAdditional Reading.261Chapter10MTDSubsystem....26210.1MTDOverview..26310.1.1EnablingMTDServices..26510.1.2MTDBasic10.1.3Configuring MTD on YourTarget267
ptg Contents xv 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 Download at www.wowebook.com