嵌入式Linux基础教程(第2版)

嵌入式Linux基础教程(第2版) pdf epub mobi txt 电子书 下载 2026

出版者:人民邮电出版社
作者:[美] Christopher Hallinan
出品人:
页数:454
译者:周鹏
出版时间:2012-5
价格:89.00元
装帧:平装
isbn号码:9787115278272
丛书系列:图灵程序设计丛书·Linux/UNIX系列
图书标签:
  • 嵌入式
  • Linux
  • 嵌入式系统
  • 嵌入式Linux基础教程
  • linux
  • 完全是嵌入式的介绍
  • 软件开发
  • 计算机
  • 嵌入式Linux
  • Linux
  • 嵌入式系统
  • 开发
  • 教程
  • 技术
  • 编程
  • ARM
  • 实战
  • 电子工程
想要找书就要到 小美书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

内容简介:

广泛的硬件支持、高效稳定的内核、开源共享的软件、优秀的开发工具、完善的网络通信和文件管理机制等特点,使嵌入式Linux获得了广泛应用,已成为嵌入式开发的主流平台。

本书是嵌入式Linux领域的名著。全面深入而又简明地阐述了构建嵌入式Linux系统的精髓。书中不仅剖析了嵌入式Linux系统,而且讲述了处理器、内核、引导加载程序、设备驱动程序、文件系统等关键组件,介绍了嵌入式Linux系统的开发工具、调试技术。作者多年积累总结的嵌入式Linux开发技巧和提示,无论对初学者还是有经验的开发人员,都弥足珍贵。这一版不仅对原有章节进行了全面的修订、更新和改进,还新增了udev、USB和开源构建系统等内容。

作者简介

作者简介:

Christopher Hallinan 著名嵌入式Linux技术专家。现任Mentor Graphics公司技术市场工程师,曾任MontaVista软件公司现场应用工程师,3Com公司工程总监,Crosscomm公司工程总监。他有25年以上网络和通信产品的软硬件开发经验。曾担任Linux咨询师,提供定制Linux主板接口、设备驱动程序和引导装入程序等方面的解决方案

目录信息

目 录
第1章 入门 1
1.1 为什么选择Linux 1
1.2 嵌入式Linux现状 2
1.3 开源和GPL 2
1.4 标准及相关组织 3
1.4.1 Linux标准基础 3
1.4.2 Linux基金会 4
1.4.3 电信级Linux 4
1.4.4 移动Linux计划:Moblin 4
1.4.5 服务可用性论坛 5
1.5 小结 5
第2章 综述 6
2.1 嵌入与非嵌入 6
2.2 剖析嵌入式系统 7
2.2.1 典型的嵌入式Linux开发环境 8
2.2.2 启动目标板 9
2.2.3 引导内核 10
2.2.4 内核初始化:概述 12
2.2.5 第一个用户空间进程:init 13
2.3 存储 14
2.3.1 闪存 14
2.3.2 NAND型闪存 15
2.3.3 闪存的用途 16
2.3.4 闪存文件系统 17
2.3.5 内存空间 17
2.3.6 执行上下文 19
2.3.7 进程虚拟内存 20
2.3.8 交叉开发环境 21
2.4 嵌入式Linux发行版 22
2.4.1 商业Linux发行版 24
2.4.2 打造自己的Linux发行版 24
2.5 小结 24
第3章 处理器基础 26
3.1 独立处理器 26
3.1.1 IBM 970FX 27
3.1.2 英特尔奔腾M 27
3.1.3 英特尔凌动TM 28
3.1.4 飞思卡尔MPC7448 28
3.1.5 配套芯片组 28
3.2 集成处理器:片上系统 30
3.2.1 Power架构 30
3.2.2 飞思卡尔Power架构 30
3.2.3 飞思卡尔PowerQUICC I 31
3.2.4 飞思卡尔PowerQUICC II 32
3.2.5 PowerQUICC II Pro 32
3.2.6 飞思卡尔PowerQUICC III 33
3.2.7 飞思卡尔QorIQTM 34
3.2.8 AMCC Power架构 36
3.2.9 MIPS 38
3.2.10 Broadcom MIPS 38
3.2.11 其他MIPS 39
3.2.12 ARM 40
3.2.13 德州仪器ARM 40
3.2.14 飞思卡尔ARM 42
3.2.15 其他ARM处理器 43
3.3 其他架构 43
3.4 硬件平台 43
3.4.1 CompactPCI 43
3.4.2 ATCA 44
3.5 小结 44
第4章 Linux内核:不同的视角 46
4.1 背景知识 46
4.1.1 内核版本 47
4.1.2 内核源码库 48
4.1.3 使用git下载内核代码 49
4.2 Linux内核的构造 49
4.2.1 顶层源码目录 49
4.2.2 编译内核 50
4.2.3 内核主体:vmlinux 52
4.2.4 内核镜像的组成部分 53
4.2.5 子目录的布局 56
4.3 内核构建系统 57
4.3.1 .config文件 57
4.3.2 配置编辑器 58
4.3.3 Makefile目标 61
4.4 内核配置 66
4.4.1 定制配置选项 68
4.4.2 内核Makefile 71
4.5 内核文档 72
4.6 获得定制的Linux内核 72
4.7 小结 73
第5章 内核初始化 75
5.1 合成内核镜像:Piggy及其他 75
5.1.1 Image对象 78
5.1.2 与具体架构相关的对象 78
5.1.3 启动加载程序 79
5.1.4 引导消息 80
5.2 初始化时的控制流 83
5.2.1 内核入口:head.o 84
5.2.2 内核启动:main.c 85
5.2.3 架构设置 86
5.3 内核命令行的处理 87
5.4 子系统初始化 92
5.5 init线程 94
5.5.1 通过initcalls进行初始化 95
5.5.2 initcall_debug 96
5.5.3 最后的引导步骤 97
5.6 小结 98
第6章 用户空间初始化 100
6.1 根文件系统 100
6.1.1 FHS:文件系统层次结构标准 101
6.1.2 文件系统布局 101
6.1.3 最小化的文件系统 102
6.1.4 嵌入式根文件系统带来的挑战 103
6.1.5 试错法 104
6.1.6 自动化文件系统构建工具 104
6.2 内核的最后一些引导步骤 104
6.2.1 第一个用户空间程序 106
6.2.2 解决依赖关系 106
6.2.3 定制的初始进程 107
6.3 init进程 107
6.3.1 inittab 109
6.3.2 Web服务器启动脚本示例 111
6.4 初始RAM磁盘 112
6.4.1 使用initrd进行引导 113
6.4.2 引导加载程序对initrd的支持 113
6.4.3 initrd的奥秘所在:
linuxrc 115
6.4.4 initrd探究 116
6.4.5 构造initrd镜像 116
6.5 使用initramfs 117
6.6 关机 119
6.7 小结 120
第7章 引导加载程序 122
7.1 引导加载程序的作用 122
7.2 引导加载程序带来的挑战 123
7.2.1 DRAM控制器 123
7.2.2 闪存与RAM 123
7.2.3 镜像的复杂性 124
7.2.4 执行环境 126
7.3 通用引导加载程序:Das U-Boot 126
7.3.1 获取U-Boot 127
7.3.2 配置U-Boot 127
7.3.3 U-Boot的监控命令 129
7.3.4 网络操作 130
7.3.5 存储子系统 132
7.3.6 从磁盘引导 133
7.4 移植U-Boot 133
7.4.1 EP405的U-Boot移植 133
7.4.2 U-Boot Makefile中的配置目标 134
7.4.3 EP405的第一次构建 135
7.4.4 EP405 处理器初始化 136
7.4.5 与具体板卡相关的初始化 138
7.4.6 移植总结 141
7.4.7 U-Boot镜像格式 141
7.5 设备树对象(扁平设备树) 143
7.5.1 设备树源码 145
7.5.2 设备树编译器 148
7.5.3 使用DTB的其他内核镜像 148
7.6 其他引导加载程序 149
7.6.1 Lilo 149
7.6.2 GRUB 150
7.6.3 其他更多的引导加载程序 151
7.7 小结 152
第8章 设备驱动程序基础 154
8.1 设备驱动程序的概念 154
8.1.1 可加载模块 155
8.1.2 设备驱动程序架构 155
8.1.3 最小设备驱动程序示例 156
8.1.4 模块构建的基础设施 157
8.1.5 安装设备驱动程序 160
8.1.6 加载模块 160
8.1.7 模块参数 161
8.2 模块工具 162
8.2.1 insmod 162
8.2.2 lsmod 163
8.2.3 modprobe 163
8.2.4 depmod 164
8.2.5 rmmod 165
8.2.6 modinfo 165
8.3 驱动程序方法 166
8.3.1 驱动程序中的文件系统操作 166
8.3.2 设备号的分配 169
8.3.3 设备节点和mknod 169
8.4 综合应用 170
8.5 在内核源码树外构建驱动 171
8.6 设备驱动程序和GPL 172
8.7 小结 173
第9章 文件系统 174
9.1 Linux文件系统概念 175
9.2 ext2 176
9.2.1 挂载文件系统 177
9.2.2 检查文件系统的完整性 178
9.3 ext3 180
9.4 ext4 182
9.5 ReiserFS 182
9.6 JFFS2 183
9.7 cramfs 185
9.8 网络文件系统 187
9.9 伪文件系统 190
9.9.1 /proc文件系统 191
9.9.2 sysfs 194
9.10 其他文件系统 196
9.11 创建简单的文件系统 197
9.12 小结 199
第10章 MTD子系统 201
10.1 MTD概述 201
10.1.1 开启MTD服务 202
10.1.2 MTD基础 203
10.1.3 在目标板上配置MTD 205
10.2 MTD分区 205
10.2.1 使用Redboot分区表进行
分区 206
10.2.2 使用内核命令行传递分区
信息 210
10.2.3 映射驱动 211
10.2.4 闪存芯片驱动 213
10.2.5 与具体板卡相关的初始化 214
10.3 MTD工具 215
10.4 UBI文件系统 219
10.4.1 配置UBIFS 219
10.4.2 构建UBIFS镜像 220
10.4.3 使用UBIFS作为根文件系统 222
10.5 小结 222
第11章 BusyBox 224
11.1 BusyBox简介 224
11.2 BusyBox的配置 225
11.3 BusyBox的操作 227
11.3.1 BusyBox的init 230
11.3.2 rcS初始化脚本示例 232
11.3.3 BusyBox在目标板上的安装 233
11.3.4 BusyBox小应用 235
11.4 小结 235
第12章 嵌入式开发环境 237
12.1 交叉开发环境 237
12.2 对主机系统的要求 241
12.3 为目标板提供服务 242
12.3.1 TFTP服务器 242
12.3.2 BOOTP/DHCP 服务器 243
12.3.3 NFS服务器 245
12.3.4 目标板使用NFS挂载根文件系统 247
12.3.5 U-Boot中使用NFS挂载根文件系统的例子 248
12.4 小结 250
第13章 开发工具 252
13.1 GNU调试器(GDB) 252
13.1.1 调试核心转储 253
13.1.2 执行GDB 255
13.1.3 GDB中的调试会话 257
13.2 数据显示调试器 258
13.3 cbrowser/cscope 260
13.4 追踪和性能评测工具 261
13.4.1 strace 261
13.4.2 strace命令行选项 264
13.4.3 ltrace 266
13.4.4 ps 267
13.4.5 top 269
13.4.6 mtrace 270
13.4.7 dmalloc 272
13.4.8 内核oops 274
13.5 二进制工具 276
13.5.1 readelf 277
13.5.2 使用readelf查看调试信息 278
13.5.3 objdump 280
13.5.4 objcopy 281
13.6 其他二进制实用程序 281
13.6.1 strip 281
13.6.2 addr2line 282
13.6.3 strings 282
13.6.4 ldd 282
13.6.5 nm 283
13.6.6 prelink 283
13.7 小结 284
第14章 内核调试技术 286
14.1 内核调试带来的挑战 286
14.2 使用KGDB进行内核调试 287
14.2.1 KGDB的内核配置 288
14.2.2 在开启KGDB时引导目标板 289
14.2.3 一些有用的内核断点 293
14.2.4 KGDB与控制台共享一个串行端口 294
14.2.5 调试非常早期的内核代码 295
14.2.6 主线内核对KGDB的支持 296
14.3 内核调试技术 297
14.3.1 gdb远程串行协议 298
14.3.2 调试优化的内核代码 300
14.3.3 GDB的用户自定义命令 307
14.3.4 有用的内核GDB宏 307
14.3.5 调试可加载模块 315
14.3.6 printk调试 319
14.3.7 Magic SysReq key 320
14.4 硬件辅助调试 321
14.4.1 使用JTAG探测器对闪存进行编程 322
14.4.2 使用JTAG探测器进行调试 323
14.5 不能启动的情况 326
14.5.1 早期的串行端口调试输出 326
14.5.2 转储printk的日志缓冲区 327
14.5.3 使用KGDB调试内核异常 328
14.6 小结 329
第15章 调试嵌入式Linux应用程序 331
15.1 目标调试 331
15.2 远程(交叉)调试 331
15.3 调试共享程序库 335
15.4 调试多个任务 340
15.4.1 调试多个进程 340
15.4.2 调试多线程应用程序 342
15.4.3 调试引导加载程序/闪存代码 345
15.5 其他远程调试选项 345
15.5.1 使用串行端口进行调试 345
15.5.2 附着到运行的进程上 346
15.6 小结 346
第16章 开源构建系统 348
16.1 为什么使用构建系统 348
16.2 Scratchbox 349
16.2.1 安装Scratchbox 349
16.2.2 创建一个交叉编译目标 350
16.3 Buildroot 351
16.3.1 安装Buildroot 352
16.3.2 配置Buildroot 352
16.3.3 构建Buildroot 353
16.4 OpenEmbedded 354
16.4.1 OpenEmbedded的组成 355
16.4.2 BitBake元数据 355
16.4.3 配方基础 356
16.4.4 任务 358
16.4.5 类 359
16.4.6 配置元数据 360
16.4.7 构建镜像 361
16.5 小结 362
第17章 实时Linux 363
17.1 什么是实时 363
17.1.1 软实时 363
17.1.2 硬实时 364
17.1.3 Linux调度 364
17.1.4 延时 364
17.2 内核抢占 365
17.2.1 抢占的障碍 366
17.2.2 抢占模式 367
17.2.3 SMP内核 368
17.2.4 抢占延时的根源 369
17.3 实时内核补丁 369
17.3.1 实时补丁的特性 370
17.3.2 O(1)调度器 371
17.3.3 创建实时进程 372
17.4 实时内核的性能分析 373
17.4.1 使用Ftrace追踪内核行为 373
17.4.2 检测抢占被关闭的延时 374
17.4.3 检测唤醒延时 375
17.4.4 检测中断被关闭的延时 377
17.4.5 检测Soft Lockup 378
17.5 小结 378
第18章 通用串行总线 379
18.1 USB概述 379
18.1.1 USB的物理拓扑结构 379
18.1.2 USB的逻辑拓扑结构 381
18.1.3 USB版本 382
18.1.4 USB连接器 382
18.1.5 USB线缆 383
18.1.6 USB模式 384
18.2 配置USB 384
18.3 sysfs和USB设备命名 388
18.4 实用的USB工具 390
18.4.1 USB文件系统 390
18.4.2 使用usbview 392
18.4.3 USB 实用程序(lsusb) 394
18.5 通用USB子系统 395
18.5.1 USB大容量存储类 395
18.5.2 USB HID类 397
18.5.3 USB CDC类驱动 398
18.5.4 USB网络支持 400
18.6 USB调试 401
18.6.1 usbmon 402
18.6.2 实用USB杂记 403
18.7 小结 403
第19章 udev 405
19.1 什么是udev 405
19.2 设备发现 406
19.3 udev的默认行为 407
19.4 理解udev规则 409
19.4.1 Modalias 411
19.4.2 典型的udev规则配置 414
19.4.3 udev的初始系统设置 415
19.5 加载平台设备驱动程序 417
19.6 定制udev的行为 419
19.7 持久的设备命名 420
19.8 udev和busybox配合使用 423
19.8.1 busybox mdev 423
19.8.2 配置mdev 425
19.9 小结 425
附录A 可配置的U-Boot命令 427
附录B BusyBox命令 430
附录C SDRAM接口注意事项 440
附录D 开源资源 447
附录E 简单的BDI-2000配置文件 449
· · · · · · (收起)

读后感

评分

什么亚马逊全五星评价,扯淡。 我来一看,满共就两个人评价,一看就是托。书超烂,且翻译的绝对垃圾。 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...

评分

第一版出来时,我就找来看了。很快就看完整本了,后来过了一段时间恰好遇到出版社有别人译好的稿子,我就帮着看了一下,但之后就没消息提到出版的事。再过段时间就出来了英文第二版。 好书,是说配得上它的名字。概念讲得很透彻。适合边动手边看书,再要升级就要自己动手搭个...  

评分

第一版出来时,我就找来看了。很快就看完整本了,后来过了一段时间恰好遇到出版社有别人译好的稿子,我就帮着看了一下,但之后就没消息提到出版的事。再过段时间就出来了英文第二版。 好书,是说配得上它的名字。概念讲得很透彻。适合边动手边看书,再要升级就要自己动手搭个...  

用户评价

评分

这本书最让我感到惊喜的是其对“系统调试与性能分析”的重视程度。在很多初级教程中,这部分往往一笔带过,但对于实际的嵌入式项目而言,调试能力才是决定项目成败的关键。本书用专门的章节详细介绍了如何利用GDB进行远程调试,如何使用Valgrind来检测内存泄漏,以及如何利用Perf工具进行性能瓶颈分析。作者在讲解这些工具时,采用了一种“解决具体问题导向”的叙事方式,比如,一个常见的启动延迟问题,作者如何一步步地通过日志分析、追踪启动脚本,最终定位到某个驱动模块加载耗时过久,这种实战经验的传授,是书本知识无法替代的宝贵财富。此外,书中还穿插了一些关于功耗优化和实时性保障的概述,虽然不够深入,但足以让读者意识到这些是未来专业开发中必须面对的挑战。这本书教会我的不仅仅是写代码,更是如何像一个真正的系统工程师那样去思考和诊断问题。

评分

这本书的结构布局和内容深度,让我对“教程”二字有了全新的认识。它不仅仅停留在“教你如何做”的层面,更深入地探讨了“为什么这么做”背后的原理。比如,在讲解进程管理和内存映射时,作者引用了大量的实际操作案例和源码片段,让你清晰地看到用户空间程序是如何与内核进行交互的。我特别欣赏其中关于设备树(Device Tree)部分的阐述,在新的嵌入式开发环境中,DTB的重要性不言而喻,但很多资料对此都讲解得比较含糊。而这里,作者不仅详细解释了DTS文件的语法,还结合一个具体的I2C设备的初始化过程,演示了驱动程序如何通过解析DTB获取硬件参数,这种理论与实践的紧密结合,让抽象的概念瞬间具象化。读完这部分,我不再满足于仅仅让设备跑起来,而是开始思考如何优化资源分配和提高系统响应速度。对于那些希望从“会用”跨越到“精通”的工程师来说,这本书无疑提供了必要的理论深度和实践广度,它成功地弥补了许多市面上只重应用、不重底层的书籍的缺陷。

评分

拿到这本厚厚的《嵌入式Linux基础教程(第2版)》时,我原本是抱持着既期待又有点忐忑的心情。毕竟,嵌入式Linux这个领域,对于初学者来说,就像一座知识的迷宫,各种概念、工具链、内核配置,听起来就让人头大。然而,这本书的章节编排设计得非常人性化,它没有一上来就抛出晦涩难懂的底层代码,而是循序渐进地引导读者建立起对整个嵌入式系统的宏观认知。开篇部分对Linux操作系统的基本原理、文件系统结构,以及硬件平台的基本构成做了非常清晰的梳理,这为后续深入学习打下了坚实的基础。特别是作者在讲解交叉编译工具链的搭建时,步骤详尽到令人惊讶,每一个命令、每一个配置文件的修改都配有详尽的解释,让你在遇到错误时也能快速定位问题所在,而不是盲目地复制粘贴。这种手把手的教学方式,极大地降低了初学者上手的门槛,让我感觉自己仿佛真的有位经验丰富的工程师在身边指导。如果说有什么小小的遗憾,可能是在某些特定硬件平台的驱动开发示例上,内容略显保守,但瑕不掩 চরিত্রের,整体而言,它成功地将一个看似高深的技术领域,拆解成了可执行的一步步任务。

评分

作为一本“第2版”的教材,它显然吸收了前一版读者的反馈和嵌入式技术快速迭代的现实需求。我注意到书中对当前主流的Systemd初始化系统、容器化技术(如LXC/Docker在嵌入式场景的应用初步探讨)都有所涉猎,这让这本书的生命力大大增强,避免了许多老旧教程一出版就过时的尴尬境地。阅读体验上,排版清晰,图表质量极高,尤其是在讲解复杂的总线协议(如SPI时序图)时,清晰的波形图胜过千言万语的文字描述。不过,我必须指出,虽然教程的覆盖面很广,但在特定版本内核的API变化处理上,似乎可以更加灵活一些。例如,在介绍某个内核模块编程接口时,如果能附带提及该接口在未来版本中可能被废弃或取代的原因,对读者的前瞻性学习会更有帮助。总的来说,它更像是一份与时俱进的、面向工程实践的知识地图,引导你高效地掌握核心技术栈,而不是沉溺于追逐每一个微小的版本更新细节。

评分

读完这本书后,我最大的感受是,它成功地在“广度”和“深度”之间找到了一个绝佳的平衡点。它没有像某些专业书籍那样,只专注于某个子系统(如内核开发或文件系统),而是提供了一个完整的、可工作的嵌入式Linux系统的全景视图。对于希望快速上手参与实际项目的人来说,书中所提供的那些完整的、可以直接编译运行的示例代码包,是无价之宝。这些代码组织得非常有条理,清晰地划分了BSP层、驱动层和应用层,并且兼容了常见的开发板结构。这种模块化的学习路径,使得读者可以根据自己的兴趣点选择性地深入钻研。如果说这本书的目标是培养能独立构建嵌入式系统的工程师,那么它无疑是达成了目标的。它不是一本用来应付考试的速成手册,而是一本需要你投入时间和精力去实践、去理解的工具书,每一次翻阅都能带来新的领悟,因为它所传授的是一种解决问题的思维框架,而不仅仅是零散的知识点集合。

评分

内容仍然没有什么特别吸引人的地方,值得一提的是,书里提到几个(4个?)启动box,居然没有busybox了——难道busybox那玩意儿已经过时了???

评分

内容比较全面,尤其是启动引导部分比较详细,解决了很多开发板启动的疑问,内容有点老,期望有更新的书出现?

评分

好书 新世界

评分

入门必读

评分

错别字多

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.quotespace.org All Rights Reserved. 小美书屋 版权所有