新書推薦:
《
你漏财了:9种逆向思维算清人生这本账
》
售價:HK$
55.8
《
我们终将老去:认识生命的第二阶段
》
售價:HK$
91.8
《
祛魅:对世界祛魅是一个人变强的开始
》
售價:HK$
62.7
《
家族财富传承
》
售價:HK$
154.6
《
谁是窃书之人 日本文坛新锐作家深绿野分著 无限流×悬疑×幻想小说
》
售價:HK$
55.8
《
一个经济杀手的自白 第3版
》
售價:HK$
110.9
《
8秒按压告别疼痛
》
售價:HK$
87.4
《
津巴多时间心理学:挣脱束缚、改写命运的6种时间观
》
售價:HK$
77.3
|
編輯推薦: |
”内容新颖:以当前流行的开发环境和工具的稳定版本进行讲解。
内容全面:涵盖ARM嵌入式Linux系统开发的大部分重要知识点和典型应用。
由浅入深:从嵌入式系统的软硬件开始讲解,逐步深入嵌入式开发的原理与应用。
重点突出:详细介绍Bootloader和Linux内核的相关功能与移植方法。
注重实践:详解53个典型实例和5个应用实战案例,提高读者的开发水平。
视频讲解:专门为重点内容录制多媒体教学视频,帮助读者高效、直观地学习。
提供习题:每章都提供习题,帮助读者巩固和自测重点内容的掌握情况。
注重技巧:各章都提供思维导图,帮助读者梳理知识点并建立知识体系。
”
|
內容簡介: |
”《ARM嵌入式Linux系统开发详解(第3版)》是获得大量读者好评的“Linux典藏大系”中的《ARM嵌入式Linux系统开发详解》的第3版。本书由浅入深,全面、系统地介绍基于ARM体系结构的嵌入式Linux系统开发涉及的方方面面知识,并给出53个典型实例和5个综合案例供读者实战演练。本书提供707分钟配套教学视频、程序源代码、思维导图、教学PPT、习题参考答案和软件工具等超值配套资源,帮助读者高效、直观地学习。 本书共25章,分为4篇。第1篇基础知识,包括嵌入式系统入门、嵌入式软硬件系统、ARM处理器、嵌入式Linux、软件开发环境搭建、第一个Linux应用程序;第2篇应用开发,包括Linux应用程序开发基础、多进程和多线程开发、网络通信应用、串口通信编程、嵌入式GUI程序开发、软件项目管理;第3篇系统分析,包括ARM体系结构及开发实例、深入Bootloader、解析Linux内核、嵌入式Linux的启动流程、Linux文件系统、交叉编译工具、强大的命令系统BusyBox、Linux内核移植,以及内核和应用程序调试技术;第4篇项目实战,包括Linux设备驱动开发基础知识、网络设备驱动程序开发、Flash设备驱动开发和USB驱动开发。 本书内容丰富,实用性强,适合ARM嵌入式Linux系统开发的初学者、从业者、研究者和爱好者等相关人员阅读,也适合IT培训机构和高等院校的相关专业作为教材。 ”
|
關於作者: |
弓雷 从事嵌入式系统软件开发近20年。擅长计算机通信技术,对操作系统内核与底层技术有深入的研究。熟悉Intel IXA架构网络处理器、ARM体系结构、MIPS体系结构和TCP/IP等网络协议栈。曾经移植Linux 2.6内核到嵌入式设备,参与研发某部队火控武器通信系统、无人驾驶汽车项目通信系统与10GE/POS骨干网流量管理系统等。目前担任嵌入式软件研发工程师和微码软件研发工程师,从事某公司骨干网P2P流量管理设备的研发。
|
目錄:
|
第1篇 基础知识
第1章 嵌入式系统入门 2
1.1 什么是嵌入式系统 2
1.2 嵌入式系统的应用领域 2
1.2.1 家用电器和电子类产品 2
1.2.2 交通工具 3
1.2.3 公共电子设施 3
1.3 嵌入式系统的发展 4
1.3.1 嵌入式微控制器 4
1.3.2 嵌入式微处理器 5
1.3.3 嵌入式系统的发展方向 5
1.4 典型嵌入式系统的组成 6
1.5 小结 6
1.6 习题 7
第2章 嵌入式软硬件系统 8
2.1 电路基础知识 8
2.1.1 什么是模拟电路 8
2.1.2 什么是数字电路 8
2.1.3 数制转换 9
2.2 计算机基础知识 10
2.2.1 计算机体系结构的发展 10
2.2.2 中央处理器 10
2.2.3 存储系统 11
2.2.4 总线系统 11
2.2.5 输入与输出系统 12
2.3 软件基础知识 12
2.3.1 什么是软件 12
2.3.2 软件的开发流程 13
2.3.3 常见的软件开发模型 13
2.3.4 计算机编程语言 14
2.3.5 数据结构 15
2.4 操作系统基础知识 15
2.4.1 什么是操作系统 15
2.4.2 操作系统的发展历史 15
2.4.3 操作系统的组成 16
2.4.4 几种操作系统的设计思路 16
2.4.5 操作系统的分类 17
2.5 小结 17
2.6 习题 17
第3章 ARM处理器 19
3.1 微处理器和微控制器 19
3.2 ARM处理器简介 19
3.2.1 ARM微处理器的应用领域 20
3.2.2 ARM处理器的优点 20
3.3 ARM指令集 21
3.3.1 算术运算指令 21
3.3.2 逻辑运算指令 22
3.3.3 分支指令 23
3.3.4 数据传送指令 23
3.4 ARM体系结构 24
3.4.1 ARM体系结构的命名方法 24
3.4.2 处理器的划分 25
3.4.3 处理器的工作模式 25
3.4.4 存储系统 26
3.4.5 寻址方式 27
3.5 ARM的功能选型 29
3.5.1 ARM的选型原则 29
3.5.2 几种常见的ARM核处理器选型参考 31
3.6 小结 32
3.7 习题 33
第4章 嵌入式Linux 34
4.1 常见的嵌入式操作系统 34
4.1.1 VxWorks简介 34
4.1.2 Windows CE简介 35
4.1.3 PalmOS简介 35
4.1.4 Android简介 35
4.2 嵌入式Linux操作系统 36
4.2.1 什么是Linux 36
4.2.2 Linux与UNIX的不同——GPL版权协议简介 36
4.2.3 Linux发行版 37
4.2.4 常见的嵌入式Linux系统 38
4.3 小结 38
4.4 习题 39
第5章 软件开发环境搭建 40
5.1 安装Linux系统 40
5.1.1 安装Ubuntu Linux 40
5.1.2 安装和卸载软件 43
5.1.3 配置系统服务 43
5.1.4 安装主要的开发工具 44
5.1.5 安装其他开发工具 45
5.2 运行在Windows上的Linux系统 45
5.2.1 什么是Cygwin 45
5.2.2 安装Cygwin 46
5.2.3 安装开发环境 49
5.3 Linux的常用工具 49
5.3.1 Linux Shell及其常用命令 50
5.3.2 文本编辑工具vi 51
5.3.3 搜索工具find和grep 52
5.3.4 FTP工具 56
5.3.5 串口工具minicom 57
5.4 Windows的常用工具 58
5.4.1 代码编辑管理工具Source Insight 59
5.4.2 串口工具Xshell 64
5.5 ARM的集成开发环境ADS 66
5.5.1 ADS集成开发环境简介 66
5.5.2 配置ADS调试环境 67
5.5.3 建立自己的工程 68
5.6 小结 70
5.7 习题 70
第6章 第一个Linux应用程序 71
6.1 向世界问好——Hello,World! 71
6.1.1 用vi编辑源代码文件 71
6.1.2 用gcc命令编译程序 72
6.1.3 执行程序 72
6.2 程序背后做了什么 73
6.2.1 程序执行的过程 73
6.2.2 窥视程序执行中的秘密 73
6.2.3 动态库的作用 75
6.3 程序如何来的——编译的全过程 75
6.3.1 编译源代码 76
6.3.2 链接目标文件到指定的库 77
6.4 更简单的办法——用Makefile管理工程 77
6.4.1 什么是Makefile 77
6.4.2 Makefile是如何工作的 78
6.4.3 如何使用Makefile 78
6.4.4 好的源代码管理习惯 79
6.5 小结 79
6.6 习题 79
第2篇 应用开发
第7章 Linux应用程序开发基础 82
7.1 内存管理和使用 82
7.1.1 堆和栈的区别 82
7.1.2 内存管理函数malloc()和free() 84
7.1.3 实用的内存分配函数calloc()和realloc() 85
7.1.4 内存管理编程实例 86
7.2 ANSI C文件管理 89
7.2.1 文件指针和流 89
7.2.2 存储方式 90
7.2.3 标准输入、标准输出和标准错误 90
7.2.4 缓冲 90
7.2.5 打开和关闭文件 91
7.2.6 读写文件 92
7.2.7 文件流定位 94
7.2.8 ANSI C文件编程实例 95
7.3 POSIX文件I/O编程 96
7.3.1 底层的文件I/O操作 96
7.3.2 文件描述符 96
7.3.3 创建、打开和关闭文件 97
7.3.4 读写文件内容 100
7.3.5 文件内容定位 101
7.3.6 修改已打开文件的属性 102
7.3.7 POSIX文件编程实例 102
7.4 小结 103
7.5 习题 104
第8章 多进程和多线程开发 105
8.1 多进程开发 105
8.1.1 什么是进程 105
8.1.2 进程环境和属性 106
8.1.3 创建进程 107
8.1.4 等待进程结束 109
8.1.5 退出进程 110
8.1.6 常用进程间的通信方法 112
8.1.7 进程编程实例 116
8.2 多线程开发 117
8.2.1 线程的概念 117
8.2.2 进程和线程对比 117
8.2.3 创建线程 118
8.2.4 取消线程 119
8.2.5 等待线程 120
8.2.6 使用pthread库实现多线程操作实例 121
8.3 小结 122
8.4 习题 122
第9章 网络通信应用 124
9.1 网络通信基础 124
9.1.1 TCP/IP簇 124
9.1.2 IP简介 125
9.1.3 TCP简介 126
9.1.4 UDP简介 127
9.1.5 网络协议分析工具Wireshark 127
9.2 Socket通信的基本概念 128
9.2.1 创建Socket对象 128
9.2.2 面向连接的Socket通信 129
9.2.3 面向连接的echo服务编程实例 131
9.2.4 无连接的Socket通信 135
9.2.5 无连接的时间服务编程实例 136
9.3 Socket高级应用 139
9.3.1 Socket超时处理 139
9.3.2 使用Select机制处理多连接 140
9.3.3 使用poll机制处理多连接 141
9.3.4 多线程环境Socket编程 143
9.4 小结 143
9.5 习题 144
第10章 串口通信编程 145
10.1 串口简介 145
10.1.1 什么是串口 145
10.1.2 串口的工作原理 145
10.1.3 串口的流量控制 146
10.2 开发串口应用程序 147
10.2.1 操作串口需要用到的头文件 147
10.2.2 串口操作方法 148
10.2.3 串口属性设置 148
10.2.4 与Windows串口终端通信 152
10.3 串口应用案例——发送手机短信 154
10.3.1 PC与手机连接发送短信的物理结构 154
10.3.2 AT指令简介 155
10.3.3 GSM AT指令集 155
10.3.4 PDU编码方式 156
10.3.5 建立与手机的连接 157
10.3.6 使用AT指令发送短信 158
10.4 小结 161
10.5 习题 161
第11章 嵌入式GUI程序开发 163
11.1 Linux GUI简介 163
11.1.1 Linux GUI的发展 163
11.1.2 常见的嵌入式GUI 164
11.2 开发图形界面程序 165
11.2.1 安装Qt开发环境 165
11.2.2 建立简单的Qt程序 167
11.2.3 Qt库编程结构 170
11.3 深入Qt编程 170
11.3.1 使用Widget 170
11.3.2 对话框程序设计 172
11.3.3 信号与槽系统 176
11.4 将Qt移植到ARM开发板上 177
11.4.1 tslib的移植 177
11.4.2 Qt的移植 178
11.4.3 安装Qt Creator编译环境 179
11.4.4 设置Qt Creator编译环境 184
11.4.5 配置开发板的环境变量 187
11.5 模拟器QEMU 188
11.5.1 使用QEMU搭建ARM嵌入式Linux开发环境 188
11.5.2 使用Qt程序进行测试 191
11.6 小结 191
11.7 习题 191
第12章 软件项目管理 193
12.1 源代码管理 193
12.1.1 软件的版本 193
12.1.2 版本控制的概念 194
12.2 版本控制系统Git 195
12.2.1 在Linux系统中使用Git 195
12.2.2 在Windows系统中使用Git 198
12.3 常见的开发文档 202
12.3.1 可行性研究报告 202
12.3.2 项目开发计划 202
12.3.3 软件需求说明书 202
12.3.4 概要设计 203
12.3.5 详细设计 203
12.3.6 用户手册 203
12.3.7 其他文档 203
12.4 文档维护工具 203
12.4.1 Sphinx工具 203
12.4.2 GitHub工具 206
12.5 Bug跟踪系统 210
12.5.1 Bug管理的概念和作用 210
12.5.2 使用Bugzilla跟踪Bug 211
12.6 小结 214
12.7 习题 214
第3篇 系统分析
第13章 ARM体系结构及开发实例 216
13.1 ARM体系结构 216
13.1.1 ARM体系结构简介 216
13.1.2 ARM指令集简介 217
13.2 编程模型 218
13.2.1 数据类型 218
13.2.2 处理器模式 218
13.2.3 寄存器 219
13.2.4 通用寄存器 219
13.2.5 程序状态寄存器 221
13.2.6 异常处理 221
13.2.7 内存及其I/O映射 222
13.3 内存管理单元 223
13.3.1 内存管理简介 223
13.3.2 内存访问顺序 224
13.3.3 地址翻译过程 224
13.3.4 内存访问权限 225
13.4 常见的接口和控制器 225
13.4.1 GPIO简介 225
13.4.2 中断控制器 226
13.4.3 RTC控制器 226
13.4.4 看门狗定时器 227
13.4.5 使用GPIO点亮LED实例 227
13.5 小结 228
13.6 习题 228
第14章 深入Bootloader 230
14.1 初识Bootloader 230
14.1.1 PC的Bootloader 230
14.1.2 什么是嵌入式系统的Bootloader 231
14.1.3 嵌入式系统常见的Bootloader 231
14.2 U-Boot分析 232
14.2.1 获取U-Boot 232
14.2.2 U-Boot工程结构分析 232
14.2.3 U-Boot的工作流程 233
14.3 U-Boot的启动流程分析 234
14.3.1 _start标号 234
14.3.2 reset标号 237
14.3.3 cpu_init_crit标号 238
14.3.4 lowlevel_init标号 239
14.3.5 main标号 240
14.3.6 board_init_f()函数 243
14.3.7 relocate_code()函数 243
14.3.8 board_init_r()函数 245
14.3.9 main_loop()函数 245
14.4 U-Boot移植 246
14.4.1 U-Boot移植的一般步骤 246
14.4.2 将U-Boot移植到目标开发板上 247
14.4.3 U-Boot移植的常见问题 249
14.5 小结 249
14.6 习题 249
第15章 解析Linux内核 251
15.1 基础知识 251
15.1.1 什么是Linux内核 251
15.1.2 Linux内核的版本 252
15.1.3 如何获取Linux内核代码 252
15.1.4 编译内核 252
15.2 Linux内核的子系统 258
15.2.1 系统调用接口 259
15.2.2 进程管理子系统 260
15.2.3 内存管理子系统 261
15.2.4 虚拟文件系统 261
15.2.5 网络堆栈 262
15.2.6 设备驱动 263
15.2.7 内核体系结构代码分离设计解析 264
15.3 Linux内核代码的工程结构 264
15.3.1 源代码目录布局 264
15.3.2 几个重要的Linux内核文件 266
15.4 内核编译系统 267
15.4.1 内核编译系统的基本架构 267
15.4.2 内核的顶层Makefile文件分析 268
15.4.3 内核编译文件分析 270
15.4.4 目标文件清除机制 273
15.4.5 编译辅助程序 273
15.4.6 Kbuild变量 274
15.5 小结 275
15.6 习题 275
第16章 嵌入式Linux的启动流程 277
16.1 Linux内核的初始化流程 277
16.2 PC的初始化流程 278
16.2.1 PC BIOS的功能和作用 279
16.2.2 磁盘的数据结构 279
16.2.3 PC的完整初始化流程 280
16.3 嵌入式系统的初始化 280
16.4 Linux内核的初始化 282
16.4.1 解压缩内核映像 282
16.4.2 进入内核代码 284
16.5 启动init内核进程 287
16.6 根文件系统的初始化 288
16.6.1 根文件系统简介 288
16.6.2 挂载虚拟文件系统 290
16.7 内核交出权限 295
16.8 systemd进程 295
16.8.1 systemd的Unit 295
16.8.2 配置文件 295
16.8.3 常用命令 297
16.9 初始化RAM Disk 298
16.9.1 RAM Disk简介 298
16.9.2 如何使用RAM Disk 299
16.9.3 使用RAM Disk作为根文件系统实例 299
16.10 小结 300
16.11 习题 301
第17章 Linux文件系统 302
17.1 Linux文件管理 302
17.1.1 文件和目录的概念 302
17.1.2 文件的结构 303
17.1.3 文件的类型 303
17.1.4 文件系统的目录结构 305
17.1.5 文件和目录的存取权限 307
17.1.6 文件系统管理 308
17.2 Linux文件系统的原理 309
17.2.1 非日志文件系统 309
17.2.2 日志文件系统 310
17.3 常见的Linux文件系统 311
17.3.1 Ext2文件系统 311
17.3.2 Ext3文件系统 313
17.3.3 ReiserFS文件系统 314
17.3.4 JFFS文件系统 315
17.3.5 CRAMFS文件系统 317
17.4 其他文件系统 317
17.4.1 网络文件系统 317
17.4.2 /proc影子文件系统 319
17.5 小结 321
17.6 习题 322
第18章 交叉编译工具 323
18.1 什么是交叉编译 323
18.2 交叉编译产生的原因 324
18.3 安装交叉编译工具的条件 324
18.4 如何安装交叉编译工具 324
18.4.1 手动安装 324
18.4.2 使用apt工具安装 326
18.4.3 测试 326
18.5 小结 326
18.6 习题 327
第19章 强大的命令系统BusyBox 328
19.1 BusyBox简介 328
19.1.1 简单易懂的BusyBox 328
19.1.2 BusyBox的工作原理 329
19.1.3 安装BusyBox 330
19.2 交叉编译BusyBox 333
19.3 在目标板上安装BusyBox 335
19.4 小结 337
19.5 习题 337
第20章 Linux内核移植 338
20.1 Linux内核移植的要点 338
20.2 Linux内核的平台代码结构 339
20.3 实现交叉编译 340
20.3.1 加入编译菜单项 342
20.3.2 实现编译 343
20.4 小结 344
20.5 习题 344
第21章 内核和应用程序调试技术 345
21.1 使用gdb调试应用程序 345
21.2 基本的调试技术 345
21.2.1 列出源代码 348
21.2.2 断点管理 350
21.2.3 执行程序 352
21.2.4 显示程序变量 352
21.2.5 信号管理 353
21.2.6 调试实例 354
21.3 多进程调试 354
21.4 调试意外终止的程序 357
21.5 内核调试方法 359
21.5.1 printk打印调试信息 359
21.5.2 动态输出 360
21.5.3 BUG_ON()和WARN_ON()宏 360
21.5.4 使用/proc虚拟文件系统 363
21.6 小结 364
21.7 习题 364
第4篇 项目实战
第22章 Linux设备驱动开发基础知识 366
22.1 设备驱动简介 366
22.2 Linux内核模块简介 367
22.2.1 内核模块速览 367
22.2.2 内核模块的结构 367
22.2.3 内核模块的加载和卸载 368
22.2.4 编写一个基本的内核模块 369
22.2.5 编译内核模块 370
22.2.6 为内核模块添加参数 371
22.3 Linux设备驱动工作方式简介 372
22.3.1 PCI局部总线简介 372
22.3.2 Linux设备驱动的基本概念 373
22.3.3 字符设备 374
22.3.4 块设备 376
22.3.5 网络设备 377
22.4 字符设备驱动开发案例 377
22.4.1 开发一个基本的字符设备驱动 377
24.4.2 测试字符设备 380
22.5 小结 381
22.6 习题 381
第23章 网络设备驱动程序开发 382
23.1 网络基础知识 382
23.1.1 OSI网络参考模型 382
23.1.2 Linux系统内核与TCP/IP 383
23.2 以太网基础 385
23.2.1 工作原理 386
23.2.2 常见的以太网标准 386
23.2.3 拓扑结构 387
23.2.4 工作模式 387
23.3 网卡的工作原理 388
23.4 内核网络分层结构 389
23.4.1 内核网络结构 389
23.4.2 与网络有关的数据结构 390
23.4.3 内核网络部分的全局变量 391
23.5 内核网络设备驱动框架 392
23.5.1 net_device结构 392
23.5.2 数据包的接收流程 394
23.5.3 数据包的发送流程 395
23.6 DM9000网卡驱动分析案例 396
23.6.1 DM9000芯片简介 396
23.6.2 网卡驱动程序框架 396
23.6.3 DM9000网卡驱动的数据结构 397
23.6.4 加载驱动程序 398
23.6.5 停止和启动网卡 402
23.6.6 发送数据包 403
23.6.7 接收数据包 404
23.6.8 中断的处理 405
23.7 小结 406
23.8 习题 406
第24章 Flash设备驱动开发 407
24.1 Linux Flash驱动结构 407
24.1.1 什么是MTD 407
24.1.2 MTD系统结构 408
24.2 Flash设备基础 409
24.2.1 存储原理 409
24.2.2 性能比较 410
24.3 内核MTD层 411
24.3.1 mtd_info结构 411
24.3.2 mtd_part结构 415
24.3.3 mtd_partition结构 415
24.3.4 map_info结构 416
24.3.5 nand_chip结构 418
24.4 Flash设备框架 419
24.4.1 NOR Flash设备驱动框架 419
24.4.2 NAND Flash设备驱动框架 420
24.5 NAND Flash设备驱动分析案例 421
24.5.1 S3C2440 NAND控制器简介 421
24.5.2 数据结构 423
24.5.3 注册驱动 424
24.5.4 驱动卸载 427
24.5.5 初始化NAND控制器 427
24.5.6 设置芯片操作 429
24.5.7 电源管理 431
24.6 小结 432
24.7 习题 432
第25章 USB驱动开发 433
25.1 USB体系概述 433
25.1.1 USB的设计目标 433
25.1.2 USB体系简介 434
25.1.3 USB体系的工作流程 435
25.2 USB驱动程序框架 435
25.2.1 Linux内核USB驱动框架简介 435
25.2.2 主机驱动结构 438
25.2.3 设备驱动结构 442
25.2.4 USB驱动程序框架 445
25.3 USB驱动案例剖析 447
25.3.1 USB串口驱动 447
25.3.2 USB键盘驱动 449
25.4 小结 452
25.5 习题 452
|
內容試閱:
|
随着计算机处理器技术的不断发展,嵌入式系统的应用越来越广泛,目前已经普遍应用于人们生活的方方面面,如手机、平板计算机和家用电器等领域。嵌入式系统开发占据计算机系统开发的比例越来越高。
嵌入式系统开发与传统的PC程序开发不同,前者涉及软硬件开发,是一个协同工作的统一体。目前,市场上已经有许多嵌入式系统硬件和操作系统软件,其中应用最广泛的是ARM嵌入式处理器和Linux系统,而这方面的书籍大多是针对某个特定领域编写的,专业性和针对性都较强,不适合初学者学习。基于这个原因,笔者编写了本书。
本书是获得大量读者好评的“Linux典藏大系”中的《ARM嵌入式Linux系统开发详解》的第3版。截至本书完稿,本书第1、2版累计17次印刷,印数超过4万册。本书在第2版的基础上进行了全新改版,不但更新了开发环境,而且对第2版中的一些疏漏进行了修订,并对书中的一些实例和代码进行了修订,使其更加易读。相信读者可以在本书的引领下跨入嵌入式开发的大门。
关于“Linux典藏大系”
“Linux典藏大系”是专门为Linux技术爱好者推出的系列图书,涵盖Linux技术的方方面面,可以满足不同层次和各个领域的读者学习Linux的需求。该系列图书自2010年1月陆续出版,上市后深受广大读者的好评。2014年1月,创作者对该系列图书进行了全面改版并增加了新品种。新版图书一上市就大受欢迎,各分册长期位居Linux图书销售排行榜前列。截至2023年10月底,该系列图书累计印数超过30万册。可以说,“Linux典藏大系”是图书市场上的明星品牌,该系列中的一些图书多次被评为清华大学出版社“年度畅销书”,还曾获得“51CTO读书频道”颁发的“最受读者喜爱的原创IT技术图书奖”,另有部分图书的中文繁体字版在中国台湾出版发行。该系列图书的出版得到了国内Linux知名技术社区ChinaUnix(简称CU)的大力支持和帮助,读者与CU社区中的Linux技术爱好者进行了广泛的交流,取得了良好的学习效果。另外,该系列图书还被国内上百所高校和培训机构选为教材,得到了广大师生的一致好评。
关于第3版
随着技术的发展,本书第2版与当前ARM嵌入式Linux系统开发环境和涉及的开发工具等有所脱节,这给读者的学习带来了不便。应广大读者的要求,笔者结合当前?ARM嵌入式Linux系统开发技术的发展,对第2版图书进行了全面的升级改版,推出第3版。相比第2版图书,第3版在内容上的变化主要体现在以下几个方面:
* 将Linux系统更改为Ubuntu 22.04;
* 对Linux内核的介绍增加5.x系列;
* 对IT业界的动态进行更新;
* 对GCC软件包和Bugzilla等工具进行更新;
* 修订第2版中的一些疏漏,并重新表述一些不准确的内容;
* 新增对模拟器Qemu的介绍;
* 新增对版本控制系统Git的介绍;
* 新增对文档维护工具的介绍;
* 对一些函数及其形式进行修改;
* 新增思维导图和课后习题,以方便读者梳理和巩固所学知识。
本书特色
1.视频教学,高效、直观
本书特意提供707分钟多媒体教学视频,以高效、直观的方式讲解重要的知识点和操作,从而帮助读者取得更好的学习效果。
2.内容全面、新颖
本书涵盖ARM嵌入式Linux系统开发的大部分重要知识点,包括Linux内核的构成、工作流程、驱动程序开发、文件系统和程序库等,而且基于当前流行的开发环境和工具的稳定版本进行讲解,便于读者对ARM嵌入式Linux系统开发的最新知识有较为全面的了解。
3.讲解由浅入深,循序渐进
ARM嵌入式Linux系统开发涉及的知识面广,技术复杂。为了让初学者快速入门,本书一开始先对嵌入式系统的软硬件进行全面介绍,然后从关键点入手,理论知识结合典型实例,抽丝剥茧地剖析技术原理,从而让读者对嵌入式开发有深入的理解。
4.实例丰富,实用性强
本书结合?53?个完整的实例讲解重要的知识点。这些实例都有完整的实验环境描述,并提供详细的实现步骤,而且经过笔者一一验证,给出了实验结果,有较强的实用性,可以带领读者上手实践,从而加深对知识的理解。
5.案例典型,提高实战水平
本书详细分析串口应用、字符设备驱动、DM9000网卡驱动、NAND Flash设备驱动和USB驱动5个典型案例的实现,让读者了解实际的ARM嵌入式Linux系统开发流程,提高开发水平,尤其独立开发驱动程序的水平。
6.提供习题、程序源代码、思维导图和教学PPT
本书特意在每章后提供多道习题,用以帮助读者巩固和自测该章的重要知识点,另外还提供程序源代码、思维导图和教学PPT等配套资源,以方便读者学习和老师教学。
本书内容
第1篇 基础知识
本篇涵盖第1~6章,主要包括嵌入式系统入门、嵌入式软硬件系统、ARM处理器、嵌入式Linux、软件开发环境搭建、第一个Linux应用程序。通过学习本篇内容,读者可以掌握ARM嵌入式Linux系统开发的基础知识和开发环境的搭建等。
第2篇 应用开发
本篇涵盖第7~12章,主要包括Linux应用程序开发基础、多进程和多线程开发、网络通信应用、串口通信编程、嵌入式GUI程序开发、软件项目管理。通过学习本篇内容,读者可以掌握ARM嵌入式Linux系统开发的核心技术与应用。
第3篇 系统分析
本篇涵盖第13~21章,主要包括ARM体系结构及开发实例、深入Bootloader、解析Linux内核、嵌入式Linux的启动流程、Linux文件系统、交叉编译工具、强大的命令系统BusyBox、Linux内核移植,以及内核和应用程序调试技术。通过学习本篇内容,读者可以对Linux系统从内核到文件系统再到启动流程等有更深入的理解。
第4篇 项目实战
本篇涵盖第22~25章,主要包括Linux设备驱动开发基础知识、网络设备驱动程序开发、Flash设备驱动开发、USB驱动开发。通过学习本篇内容,读者可以全面掌握ARM嵌入式Linux系统开发的基本流程与思想。
读者对象
* ARM嵌入式Linux系统开发初学者;
* 需要系统学习ARM嵌入式Linux系统开发的人员;
* ARM嵌入式Linux系统开发从业人员;
* ARM嵌入式Linux系统开发爱好者;
* 大中专院校的学生;
* 社会培训班的学员。
配书资源获取方式
本书涉及的配套资源如下:
* 高清教学视频;
* 程序源代码;
* 高清思维导图;
* 习题参考答案;
* 教学课件(PPT);
* 书中涉及的工具。
上述配套资源有3种获取方式:关注本书微信公众号(见书),然后回复数字“29”自动获取下载链接;在清华大学出版社网站上搜索到本书,然后在本书页面上找到“资源下载”栏目,单击“网络资源”按钮进行下载;在本书技术论坛上的Linux模块进行下载。
技术支持
虽然笔者对书中所述内容都尽量予以核实,并多次进行文字校对,但因时间所限,可能还存在疏漏和不足之处,恳请读者批评与指正。
读者在阅读本书时若有疑问,可以通过以下方式获得帮助:
* 加入本书QQ交流群(见书)进行提问;
* 在本书技术论坛上留言,会有专人负责答疑;
* 发送电子邮件获得帮助。
弓雷
|
|