搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
嵌入式Linux基础教程
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787115215222
  • 作      者:
    (美)Christopher Hallinan著
  • 出 版 社 :
    人民邮电出版社
  • 出版日期:
    2009
收藏
编辑推荐
  广泛的硬件支持、高效稳定的内核、开源共享的软件、优秀的开发工具、完善的网络通信和文件管理机制等特点,使嵌入式Linux获得了广泛应用,已成为嵌入式开发的主流平台。
  《嵌入式Linux基础教程》是嵌入式Linux领域名著。全面深入而又简明地阐述了构建嵌入式LirIUX系统的精髓。书中不仅剖析了嵌入式Linux系统,而且描述了处理器、内核、引导装入程序、设备驱动程序、文件系统等关键组件。介绍了嵌入式LirlUX系统的开发工具和调试技术。书中作者多年积累总结的嵌入式Linux开发技巧和提示,无论对初学者还是有经验的开发人员,都弥足珍贵。
  译者特别提供了《嵌入式Linux基础教程》内容的答疑服务,网址为http://www.farsight.com.cn/FarsightBBS/irldex.aspo
  嵌入式Linux权威著作
  Amazon全五星评价
  全面剖析嵌入式Linux开发,揭示大量技术内幕
展开
作者简介
  Christopher Hallinan,著名嵌入式Linux技术专家。Monta Vistata件公司现场应用工程师,曾任3Com公司工程总监。他有25年以上网络和通信产品的软硬件开发经验,曾担任Linux咨询师,提供定制Linux主板接口、设备驱动程序和引导装入程序等方面的解决方案。
  译者简介:
  华清远见嵌入式培训中心(http://www.farsight.com.cn)是享有盛誉的嵌入式高端培训企业,目前已成为ARM、Altera、Atmel、Microsoft、Symbian等全球知名嵌入式企业授权培训中心。每年为Samsung、NEC、Philips、Motorola等世界500强企业提供嵌入式技术企业培训服务,同时也致力于推广与普及嵌入式技术。数万名技术人员由此受益。
展开
内容介绍
  《嵌入式Linux基础教程》是嵌入式Linux的经典教程,介绍了引导装入程序、系统初始化、文件系统、闪存和内核、应用程序调试技巧等,还讲述了构建Linux系统的工作原理,用于驱动不同体系结构的配置,Linux内核源码树的特性,如何根据需求配制内核运行时的行为,如何扩展系统功能等内容。更重要的是,《嵌入式Linux基础教程》阐述了如何修改系统使之满足读者自己的需求,使读者能从中学习一些嵌入式工程中非常有用的提示和技巧。
  《嵌入式Linux基础教程》适合Linux程序员阅读,也可作为高等院校相关专业师生的参考读物。
展开
精彩书评
  “这本书很令我振奋,它为那些想在嵌入式系统中使用Linux的开发人员提供了极好的学习路线指导。本书内容简洁、准确,组织合理,
  Christopher的知识和见解贯穿全书,你不仅能得到很多信息和帮助,也能享受到阅读的乐趣。”
  ——Arnold Robbins,著名Linux专家
  “本书涵盖了嵌入式Linux开发的方方面面……强烈推荐每一位嵌入式Linux开发人员阅读。”
  ——LinuxQuestions.org
展开
精彩书摘
  Linux内核依靠硬件内存管理单元的优势实现了支持虚拟内存的操作系统。虚拟内存技术能够带来的最大好处是,可以更加有效地利用物理内存,并给用户提供远远大于实际物理内存的更大的可用地址空间。另一个好处是,内核可以为分配给某个任务或进程的地址空间设置访问权限,以阻止一个进程由于误操作而非法访问其他进程或整个操作系统的地址和资源。
  让我们来看看它是如何工作的。对虚拟内存系统整体性的介绍已经超出了本书的范围①,在这里我们将按照嵌入式系统开发者在实际工作中所接触的顺序,来逐一介绍虚拟内存的相关知识。
  2.3.6运行上下文
  在Linux启动运行的最初阶段,必须要做的一项工作,就是要配置好处理器的内存管理单元并初始化与之配套的数据结构,以支持虚拟地址到物理地址的转换。当这一步完成之后,内核就运行在它自己的虚拟地址空间中了。在最新的版本中,内核开发人员规定的内核虚拟地址默认为OxC0000000。在大多数体系结构中,这个地址被设置成可配置参数②。如果我们看一下内核符号表,将会发现所有的内核符号都以0xCOxxxxxx来编址。由此可见,当内核在内核空间执行代码时,处理器的IP指针都将指向这个地址范围中。
  在Linux中,根据指定线程③的运行环境,我们可以把它分为两个独立的运行上下文。当线程完全运行在内核空间时,我们称之为内核上下文,而应用程序则运行在用户空间上下文。
展开
目录
第1章 引言 1
1.1 为什么使用Linux 1
1.2 嵌入式Linux现状 2
1.3 开源和GPL 2
1.4 标准和相关机构 3
1.4.1 LSB 3
1.4.2 OSDL 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.2 NAND闪存 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.1 Linux商业发行版 21
2.4.2 Linux自定义发行版 21
2.5 小结 21
参考资源 22

第3章 处理器基础 23
3.1 单机处理器 23
3.1.1 IBM 970FX 24
3.1.2 Intel Pentium M 24
3.1.3 Freescale MPC7448 25
3.1.4 配套芯片组 25
3.2 集成化处理器:片上系统 27
3.2.1 PowerPC 27
3.2.2 AMCC PowerPC 27
3.2.3 Freescale PowerPC 30
3.2.4 MIPS 33
3.2.5 Broadcom MIPS 33
3.2.6 AMD MIPS 34
3.2.7 其他类型的MIPS 35
3.2.8 ARM 35
3.2.9 TI ARM 35
3.2.10 Freescale ARM 37
3.2.11 Intel ARM XScale 37
3.2.12 其他ARM 38
3.2.13 其他体系结构 38
3.3 硬件平台 38
3.3.1 CompactPCI 38
3.3.2 ATCA 39
3.4 小结 39
参考资源 40

第4章 Linux内核——不同视角 41
4.1 背景知识 41
4.1.1 内核的版本 42
4.1.2 内核源码库 43
4.2 Linux内核构造 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.3 makefile的目标 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 Image目标文件 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.5 init线程 82
5.5.1 通过initcall初始化 83
5.5.2 引导的最后步骤 84
5.6 小结 85
参考资源 85

第6章 系统初始化 86
6.1 根文件系统 86
6.1.1 FHS 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.3 init进程 92
6.3.1 inittab 95
6.3.2 Web服务器启动脚本示例 96
6.4 初始RAM磁盘 97
6.4.1 初始RAM磁盘的目的 98
6.4.2 使用initrd引导 98
6.4.3 引导装入程序对于initrd的支持 98
6.4.4 initrd的奥妙所在:linuxrc文件 100
6.4.5 initrd探究 100
6.4.6 构建initrd映像文件 101
6.5 使用initramfs 102
6.6 关机 103
6.7 小结 103
参考资源 104

第7章 引导装入程序 105
7.1 引导装入程序的作用 105
7.2 引导装入程序的挑战 106
7.2.1 DRAM控制器 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.2 U-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.2 U-Boot的makefile配置目标 115
7.4.3 EP405处理器初始化 116
7.4.4 特定开发板的初始化 117
7.4.5 移植概要 120
7.4.6 U-Boot映像格式 120
7.5 其他引导装入程序 122
7.5.1 Lilo 122
7.5.2 GRUB 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.1 insmod 133
8.2.2 模块参数 133
8.2.3 lsmod 134
8.2.4 modprobe 135
8.2.5 depmod 136
8.2.6 rmmod 136
8.2.7 modinfo 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.1 Linux文件系统的概念 146
9.2 ext2文件系统 147
9.2.1 挂载文件系统 148
9.2.2 文件系统完整性检查 149
9.3 ext3文件系统 150
9.4 ReiserFS文件系统 152
9.5 JFFS2文件系统 153
9.6 cramfs文件系统 155
9.7 NFS文件系统 156
9.8 伪文件系统 160
9.8.1 proc文件系统 160
9.8.2 sysfs文件系统 162
9.9 其他文件系统 164
9.10 构建简单的文件系统 165
9.11 小结 166
参考资源 166

第10章 MTD子系统 168
10.1 启用MTD服务 168
10.2 MTD基础知识 170
10.3 MTD分区 172
10.3.1 Redboot分区表 173
10.3.2 内核命令行分区 176
10.3.3 映射驱动程序 177
10.3.4 闪存芯片驱动程序 178
10.3.5 特定开发板的初始化 179
10.4 MTD实用程序 180
10.5 小结 184
参考资源 184

第11章 BusyBox 186
11.1 BusyBox简介 186
11.2 BusyBox配置 187
11.3 BusyBox操作 189
11.3.1 BusyBox之init 191
11.3.2 rcS初始化脚本示例 193
11.3.3 在目标平台安装BusyBox 193
11.3.4 BusyBox命令 195
11.4 小结 196
参考资源 196

第12章 嵌入式开发环境 197
12.1 交叉开发环境 197
12.2 主机系统需求 200
12.3 为目标板提供服务 201
12.3.1 TFTP服务器 201
12.3.2 BOOTP/DHCP服务器 202
12.3.3 NFS服务器 204
12.3.4 使用NFS为目标板挂载根文件系统 205
12.3.5 U-Boot NFS根挂载示例 206
12.4 小结 208
参考资源 208

第13章 开发工具 209
13.1 GDB 209
13.1.1 调试核心转储 210
13.1.2 调用GDB 211
13.1.3 GDB调试会话 213
13.2 DDD 214
13.3 cbrowser/cscope 216
13.4 追踪和程序分析工具 217
13.4.1 strace 217
13.4.2 strace的变体 220
13.4.3 ltrace 221
13.4.4 ps 222
13.4.5 top 224
13.4.6 mtrace 225
13.4.7 dmalloc 226
13.4.8 内核oops 228
13.5 二进制实用程序 230
13.5.1 readelf 230
13.5.2 使用readelf检查调试信息 232
13.5.3 objdump 233
13.5.4 objcopy 234
13.6 其他二进制实用程序 234
13.6.1 strip 234
13.6.2 addr2line 235
13.6.3 strings 235
13.6.4 ldd 235
13.6.5 nm 236
13.6.6 prelink 236
13.7 小结 237
参考资源 237

第14章 内核调试技术 238
14.1 内核调试的难点 238
14.2 使用KGDB调试内核 239
14.2.1 KGDB内核配置 240
14.2.2 支持KGDB的内核启动 241
14.2.3 有用的内核断点 243
14.3 Linux内核的调试 244
14.3.1 gdb远程串口协议 244
14.3.2 调试优化后的内核代码 247
14.3.3 gdb用户定义命令 251
14.3.4 有用的内核gdb宏 252
14.3.5 调试可加载模块 258
14.3.6 printk调试 262
14.3.7 Magic 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.3 KGDB捕捉崩溃 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.1 Linux源代码的组织 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.3 Linux 调度 306
17.1.4 中断延迟 306
17.2 内核抢占 307
17.2.1 抢占的缺陷 307
17.2.2 抢占模型 308
17.2.3 SMP内核 309
17.2.4 抢占延迟源 310
17.3 实时内核补丁 310
17.3.1 实时的特性 311
17.3.2 O(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
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证