《嵌入式LINUX基础教程》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)ChristopherHallinan编著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2009
  • ISBN:9787115215222
  • 页数:341 页
图书介绍:本书是嵌入式Linux系统的经典教程,介绍了引导装入程序、系统初始化、文件系统、闪存和内核、应用程序调试技巧等等。更重要的是,书中阐述了如何修改系统使之满足读者自己的需求,使读者从中学习一些嵌入式工程中非常有用的提示和技巧。

第1章 引言 1

1.1为什么使用Linux 1

1.2嵌入式Linux现状 2

1.3开源和GPL 2

1.4标准和相关机构 3

1.4.1LSB 3

1.4.2OSDL 3

1.5小结 4

参考资源 4

第2章 嵌入式初体验 5

2.1需要嵌入式系统吗 5

2.2嵌入式系统剖析 6

2.2.1典型嵌入式Linux系统设置 7

2.2.2启动目标板 8

2.2.3启动内核 9

2.2.4内核初始化概述 10

2.2.5第一个用户空间进程:init 11

2.3存储的思考 12

2.3.1闪存 12

2.3.2NAND闪存 13

2.3.3闪存的用途 14

2.3.4闪存文件系统 14

2.3.5存储器空间 15

2.3.6运行上下文 16

2.3.7进程中的虚拟内存 17

2.3.8交叉开发环境 19

2.4嵌入式Linux的发行版 20

2.4.1Linux商业发行版 21

2.4.2Linux自定义发行版 21

2.5小结 21

参考资源 22

第3章 处理器基础 23

3.1单机处理器 23

3.1.1IBM 970FX 24

3.1.2Intel Pentium M 24

3.1.3Freescale MPC7448 25

3.1.4配套芯片组 25

3.2集成化处理器:片上系统 27

3.2.1PowerPC 27

3.2.2AMCC PowerPC 27

3.2.3Freescale PowerPC 30

3.2.4MIPS 33

3.2.5Broadcom MIPS 33

3.2.6AMD MIPS 34

3.2.7其他类型的MIPS 35

3.2.8ARM 35

3.2.9TI ARM 35

3.2.10Freescale ARM 37

3.2.11Intel ARM XScale 37

3.2.12其他ARM 38

3.2.13其他体系结构 38

3.3硬件平台 38

3.3.1CompactPCI 38

3.3.2ATCA 39

3.4小结 39

参考资源 40

第4章 Linux内核——不同视角 41

4.1背景知识 41

4.1.1内核的版本 42

4.1.2内核源码库 43

4.2Linux内核构造 44

4.2.1顶层资源目录 44

4.2.2编译内核 45

4.2.3严格意义上的内核:vmlinux 46

4.2.4内核映像组件 47

4.2.5子目录结构 50

4.3内核构建系统 50

4.3.1.config文件 51

4.3.2配置编辑器 52

4.3.3makefile的目标 55

4.3.4内核配置 58

4.3.5自定义配置选项 59

4.3.6内核makefile 62

4.3.7内核文档 62

4.4获取Linux内核 63

4.5小结 64

参考资源 64

第5章 内核初始化 65

5.1合成内核映像:piggy及其他 65

5.1.1工mage目标文件 67

5.1.2体系结构相关的目标文件 68

5.1.3第二阶段引导装入程序 69

5.1.4引导信息 69

5.2初始化控制流 72

5.2.1内核入口点:head.o 73

5.2.2内核启动:main.c 74

5.2.3体系结构设置 75

5.3内核命令行处理 75

5.4子系统初始化 80

5.5init线程 82

5.5.1通过initcall初始化 83

5.5.2引导的最后步骤 84

5.6小结 85

参考资源 85

第6章 系统初始化 86

6.1根文件系统 86

6.1.1FHS 87

6.1.2文件系统布局 87

6.1.3最小文件系统 88

6.1.4根文件系统带来的挑战 89

6.1.5试错法 90

6.1.6自动化文件系统构建工具 90

6.2内核的最后引导过程 90

6.2.1用户空间下第一个程序 91

6.2.2解决依赖 92

6.2.3定制初始化进程 92

6.3init进程 92

6.3.1inittab 95

6.3.2Web服务器启动脚本示例 96

6.4初始RAM磁盘 97

6.4.1初始RAM磁盘的目的 98

6.4.2使用initrd引导 98

6.4.3引导装入程序对于initrd的支持 98

6.4.4initrd的奥妙所在:linuxrc文件 100

6.4.5initrd探究 100

6.4.6构建initrd映像文件 101

6.5使用ini tramfs 102

6.6关机 103

6.7小结 103

参考资源 104

第7章 引导装入程序 105

7.1引导装入程序的作用 105

7.2引导装入程序的挑战 106

7.2.1DRAM控制器 106

7.2.2闪存与RAM 106

7.2.3映像的复杂性 107

7.2.4执行上下文 108

7.3通用的引导装入程序:Das U-Boot 109

7.3.1执行上下文 109

7.3.2U-Boot命令集 111

7.3.3网络操作 111

7.3.4存储子系统 113

7.3.5从磁盘启动:U-Boot 113

7.4移植U-Boot 114

7.4.1为EP405开发板移植U-Boot 114

7.4.2U-Boot的makefile配置目标 115

7.4.3EP405处理器初始化 116

7.4.4特定开发板的初始化 117

7.4.5移植概要 120

7.4.6U-Boot映像格式 120

7.5其他引导装入程序 122

7.5.1Lilo 122

7.5.2GRUB 123

7.5.3其他引导装入程序 124

7.6小结 124

参考资源 124

第8章 设备驱动程序基础 126

8.1设备驱动程序基本概念 126

8.1.1可加载模块 127

8.1.2设备驱动程序的体系结构 127

8.1.3最小设备驱动程序示例 128

8.1.4模块构建的基础设施 129

8.1.5安装设备驱动程序 131

8.1.6加载设备驱动程序模块 132

8.2模块实用程序 133

8.2.1insmod 133

8.2.2模块参数 133

8.2.3lsmod 134

8.2.4modprobe 135

8.2.5depmod 136

8.2.6rmmod 136

8.2.7modinfo 137

8.3驱动程序方法 137

8.3.1驱动程序文件系统操作 138

8.3.2设备节点与mknod 140

8.4汇总 141

8.5设备驱动程序与GPL 143

8.6小结 143

参考资源 144

第9章 文件系统 145

9.1Linux文件系统的概念 146

9.2ext2文件系统 147

9.2.1挂载文件系统 148

9.2.2文件系统完整性检查 149

9.3ext3文件系统 150

9.4ReiserFS文件系统 152

9.5JFFS2文件系统 153

9.6cramfs文件系统 155

9.7NFS文件系统 156

9.8伪文件系统 160

9.8.1proc文件系统 160

9.8.2sysfs文件系统 162

9.9其他文件系统 164

9.10构建简单的文件系统 165

9.11小结 166

参考资源 166

第10章 MTD子系统 168

10.1启用MTD服务 168

10.2MTD基础知识 170

10.3MTD分区 172

10.3.1Redboot分区表 173

10.3.2内核命令行分区 176

10.3.3映射驱动程序 177

10.3.4闪存芯片驱动程序 178

10.3.5特定开发板的初始化 179

10.4MTD实用程序 180

10.5小结 184

参考资源 184

第11章 BusyBox 186

11.1BusyBox简介 186

11.2BusyBox配置 187

11.3BusyBox操作 189

11.3.1BusyBox之init 191

11.3.2rcS初始化脚本示例 193

11.3.3在目标平台安装BusyBox 193

11.3.4BusyBox命令 195

11.4小结 196

参考资源 196

第12章 嵌入式开发环境 197

12.1交叉开发环境 197

12.2主机系统需求 200

12.3为目标板提供服务 201

12.3.1TFTP服务器 201

12.3.2BOOTP/DHCP服务器 202

12.3.3NFS服务器 204

12.3.4使用NFS为目标板挂载根文件系统 205

12.3.5U-Boot NFS根挂载示例 206

12.4小结 208

参考资源 208

第13章 开发工具 209

13.1GDB 209

13.1.1调试核心转储 210

13.1.2调用GDB 211

13.1.3GDB调试会话 213

13.2DDD 214

13.3cbrowser/cscope 216

13.4追踪和程序分析工具 217

13.4.1strace 217

13.4.2strace的变体 220

13.4.3ltrace 221

13.4.4ps 222

13.4.5top 224

13.4.6mtrace 225

13.4.7dmalloc 226

13.4.8内核oops 228

13.5二进制实用程序 230

13.5.1readelf 230

13.5.2使用readelf检查调试信息 232

13.5.3objdump 233

13.5.4obj copy 234

13.6其他二进制实用程序 234

13.6.1strip 234

13.6.2addr2line 235

13.6.3strings 235

13.6.4ldd 235

13.6.5nm 236

13.6.6prelink 236

13.7小结 237

参考资源 237

第14章 内核调试技术 238

14.1内核调试的难点 238

14.2使用KGDB调试内核 239

14.2.1KGDB内核配置 240

14.2.2支持KGDB的内核启动 241

14.2.3有用的内核断点 243

14.3Linux内核的调试 244

14.3.1gdb远程串口协议 244

14.3.2调试优化后的内核代码 247

14.3.3gdb用户定义命令 251

14.3.4有用的内核gdb宏 252

14.3.5调试可加载模块 258

14.3.6printk调试 262

14.3.7Magic SysReq键 263

14.4硬件辅助调试 263

14.4.1使用JTAG探测器对闪存编程 265

14.4.2用JTAG探测器进行调试 266

14.5无法启动时 268

14.5.1早期串口调试输出 269

14.5.2转储printk日志缓冲区 270

14.5.3KGDB捕捉崩溃 271

14.6小结 272

参考资源 272

第15章 调试嵌入式Linux应用程序 274

15.1目标机调试 274

15.2远程(交叉)调试 274

15.3使用共享库进行调试 278

15.4多任务调试 282

15.4.1多进程的调试 282

15.4.2多线程应用程序的调试 284

15.4.3引导装入程序/闪存代码的调试 286

15.5远程调试的附加选项 287

15.5.1串行端口调试 287

15.5.2绑定到正在运行的进程 287

15.6小结 288

参考资源 288

第16章 移植Linux 289

16.1Linux源代码的组织 289

16.2为开发板定制Linux 291

16.2.1前提和假设 291

16.2.2定制内核初始化 292

16.2.3静态内核命令行 294

16.3平台初始化 295

16.3.1早期变量访问 298

16.3.2开发板信息结构 299

16.3.3机器相关的调用 301

16.4汇总 302

16.5小结 304

参考资源 304

第17章 Linux与实时 305

17.1什么是实时 305

17.1.1软实时 305

17.1.2硬实时 306

17.1.3Linux调度 306

17.1.4中断延迟 306

17.2内核抢占 307

17.2.1抢占的缺陷 307

17.2.2抢占模型 308

17.2.3SMP内核 309

17.2.4抢占延迟源 310

17.3实时内核补丁 310

17.3.1实时的特性 311

17.3.2O(1)调度器 313

17.3.3创建实时进程 313

17.3.4临界区管理 314

17.4调试实时内核 314

17.4.1软锁检测 314

17.4.2抢占调试 315

17.4.3调试唤醒时间 315

17.4.4唤醒延迟历史 315

17.4.5中断响应时间 316

17.4.6中断响应历史 316

17.4.7延迟跟踪 317

17.4.8调试死锁环境 318

17.4.9锁模式的运行时控制权 319

17.5小结 319

参考资源 319

附录A 可配置的U-Boot命令 320

附录B BusyBox命令 322

附录C SDRAM接口的注意事项 328

附录D 开源项目资源 334

附录E BDI-2000配置文件示例 336