ARM嵌入式LINUX系统开发详解(第3版)
- ISBN:9787302670872
- 装帧:平装-胶订
- 册数:暂无
- 重量:暂无
- 开本:其他
- 页数:476
- 出版时间:2024-09-01
- 条形码:9787302670872 ; 978-7-302-67087-2
本书特色
"内容新颖:以当前流行的开发环境和工具的稳定版本进行讲解。
内容全面:涵盖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培训机构和高等院校的相关专业作为教材。 "
目录
第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
作者简介
弓雷 从事嵌入式系统软件开发近20年。擅长计算机通信技术,对操作系统内核与底层技术有深入的研究。熟悉Intel IXA架构网络处理器、ARM体系结构、MIPS体系结构和TCP/IP等网络协议栈。曾经移植Linux 2.6内核到嵌入式设备,参与研发某部队火控武器通信系统、无人驾驶汽车项目通信系统与10GE/POS骨干网流量管理系统等。目前担任嵌入式软件研发工程师和微码软件研发工程师,从事某公司骨干网P2P流量管理设备的研发。
-
全图解零基础word excel ppt 应用教程
¥15.6¥48.0 -
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
硅谷之火-人与计算机的未来
¥12.7¥39.8 -
机器学习
¥59.4¥108.0 -
深度学习的数学
¥43.5¥69.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥37.7¥65.0 -
情感计算
¥66.8¥89.0 -
LINUX企业运维实战(REDIS+ZABBIX+NGINX+PROMETHEUS+GRAFANA+LNMP)
¥48.3¥69.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
LINUX实战——从入门到精通
¥48.3¥69.0 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
数据驱动的工业人工智能:建模方法与应用
¥68.3¥99.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥76.3¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
UN NX 12.0多轴数控编程案例教程
¥24.3¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
Go 语言运维开发 : Kubernetes 项目实战
¥38.7¥79.0