第一部分 基础知识 2
第1章 开发系统的安装 2
1.1 嵌入式术语 2
1.2 系统概述 4
1.2.1 BeagleBone Black开发平台 4
1.2.2 SAMA5D3 Xplained开发平台 6
1.2.3 Wandboard开发平台 8
1.3 安装开发系统 11
1.3.1 设置宿主机 12
1.3.2 设置BeagleBone Black开发平台 14
1.3.3 设置SAMA5D3 Xplained开发平台 24
1.3.4 设置Wandboard开发平台 30
1.4 设置开发系统 35
1.4.1 通过USB、网络、overlay系统设置BeagleBone Black 36
1.4.2 通过USB、网络设置SAMA5D3 Xplained 39
1.4.3 通过USB、有线网络和无线网络设置Wandboard 42
1.4.4 通用设置 45
1.5 总结 46
第2章 管理系统控制台 47
2.1 基本操作系统管理 47
2.1.1 文件操作和命令 47
2.1.2 软件包管理 55
2.1.3 管理内核消息 60
2.2 快速浏览bootloader 62
2.2.1 环境 63
2.2.2 管理存储设备 65
2.2.3 GPIO管理 69
2.2.4 访问一个12C设备 70
2.2.5 从网络加载文件 71
2.2.6 内核命令行 75
2.3 总结 76
第3章 C编译器、设备驱动及其开发技术 77
3.1 C编译器 77
3.1.1 宿主机和目标板不同的体系结构 78
3.1.2 编译一个C程序 80
3.1.3 编译一个内核模块 85
3.2 内核和DTS文件 87
3.2.1 重新编译内核 87
3.2.2 设备树 91
3.3 什么是设备驱动? 93
3.3.1 字符设备、块设备和网络设备 94
3.3.2 模块与内置设备 95
3.3.3 modutils(管理内核模块的一个软件包) 95
3.3.4 编写一个设备驱动 97
3.4 根文件系统 106
3.4.1 /dev目录 107
3.4.2 tmpfs文件系统 109
3.4.3 procfs文件系统 110
3.4.4 sysfs文件系统 113
3.5 网络文件系统 115
3.5.1 本机输出一个NFS 116
3.5.2 设置内核以挂载NFS 117
3.5.3 通过U-Boot和内核命令行使用NFS 119
3.5.4 NFS开发 122
3.6 模拟器的使用 122
3.6.1 执行一个程序 123
3.6.2 进入一个ARM的根文件系统树 124
3.7 总结 128
第4章 使用脚本和系统守护进程的快速编程 129
4.1 设置系统 129
4.2 系统守护进程 130
4.2.1 有用的和即用的守护进程 131
4.2.2 系统守护进程管理 132
4.3 脚本编程语言 149
4.3.1 基于PHP管理LED 150
4.3.2 基于Python管理LED 153
4.3.3 基于Bash管理LED 155
4.4 编写自定义守护进程 159
4.4.1 基于C的守护进程 160
4.4.2 基于PHP的守护进程 161
4.4.3 基于Python的守护进程 162
4.4.4 基于Bash的守护进程 162
4.5 总结 163
第5章 配置一个嵌入式操作系统 164
5.1 MTD与块设备 164
5.1.1 什么是MTD设备 165
5.1.2 管理MTD设备 167
5.1.3 Flash存储系统 170
5.2 OpenWrt系统 179
5.2.1 使用缺省配置 180
5.2.2 添加(准)LAMP系统 188
5.2.3 添加自定义配置 197
5.3 Yocto系统 200
5.3.1 使用缺省配置 201
5.3.2 添加图形支持 210
5.3.3 添加自定义程序 212
5.4 总结 215
第二部分 外围设备 218
第6章 通用输入输出信号——GPIO 218
6.1 GPIO 218
6.1.1 BeagleBone Black系统下的GPIO 221
6.1.2 SAMA5D3 Xplained系统下的GPIO 221
6.1.3 Wandboard系统下的GPIO 222
6.2 Linux下的GPIO 223
6.3 访问GPIO 225
6.3.1 基于Bash的使用 225
6.3.2 基于C的使用 227
6.4 基于脚本语言使用GPIO 234
6.4.1 基于PHP的使用 235
6.4.2 基于Python的使用 236
6.5 内核管理GPIO 237
6.5.1 使用GPIO的输入设备 238
6.5.2 LED和触发器 244
6.6 总结 248
第7章 串行端口和TTY设备——TYY 249
7.1 TTY、串行和串口线 249
7.1.1 电气线路 250
7.1.2 BeagleBone Black系统下的TTY 251
7.1.3 SAMA5D3 Xplained系统下的TTY 253
7.1.4 Wandboard系统下的TTY 254
7.2 串行端口的实现 254
7.3 Linux系统下的串行端口 255
7.4 通信参数 256
7.5 访问TTY 256
7.5.1 距离传感器 257
7.5.2 LF低频RFID读写器 261
7.6 使用SLIP管理内核中的TTY 263
7.7 总结 268
第8章 通用串行总线——USB 269
8.1 通用串行总线 269
8.1.1 电气线路 270
8.1.2 BeagleBone Black系统下的USB端口 270
8.1.3 SAMA5D3 Xplained系统下的USB端口 270
8.1.4 Wandboard系统下的USB端口 271
8.2 Linux下的USB总线 271
8.2.1 USB主机介绍 272
8.2.2 USB设备介绍 275
8.3 USB工具 284
8.4 raw USB总线 286
8.5 总结 290
第9章 内部集成电路—I2C 291
9.1 内部集成电路总线 291
9.1.1 电子线路 292
9.1.2 SAMA5D3 Xplained系统下的I2C端口 293
9.1.3 Wandboard系统下的I2C端口 294
9.2 Linux系统下的I2C总线 294
9.3 I2C工具 295
9.4 访问I2C设备 296
9.4.1 EEPROM、ADC和IO扩展板 296
9.4.2 温湿度和压力传感器 303
9.4.3 串行端口 307
9.5 raw I2C总线 310
9.5.1 基于C写入数据 310
9.5.2 基于Python读取数据 313
9.6 总结 315
第10章 串行外设接口——SPI 316
10.1 串行外设接口总线 316
10.1.1 电气线路 317
10.1.2 BeagleBone Black系统下的SPI端口 318
10.1.3 SAMA5D3 Xplained系统下的SPI端口 320
10.1.4 Wandboard系统下的SPI端口 322
10.2 Linux下的SPI总线 323
10.3 SPI工具 323
10.4 访问SPI设备 324
10.4.1 LCD 325
10.4.2 串行端口 327
10.5 raw SPI总线 330
10.5.1 基于C的数据交换 330
10.5.2 基于Python的数据交换 332
10.6 总结 337
第11章 1-Wire——W1 338
11.1 1-Wire总线 338
11.1.1 电气线路 339
11.1.2 BeagleBone Black系统下的1-Wire端口 340
11.1.3 SAMA5D3 Xplained系统下的1-W端口 341
11.1.4 Wandboard系统下的1-Wire端口 341
11.2 Linux下的1-Wire总线 341
11.3 访问1-Wire设备 343
11.3.1 使用GPIO接口 343
11.3.2 使用外部控制器 345
11.4 总结 347
第12章 以太网网络设备——ETH 348
12.1 以太网网络设备 348
12.1.1 电气线路 349
12.1.2 BeagleBone Black系统下的以太网端口 349
12.1.3 SAMA5D3 Xplained系统下的以太网端口 349
12.1.4 Wandboard系统下的以太网端口 350
12.2 Linux系统下的以太网设备 350
12.3 网络工具 351
12.4 远程设备通信 352
12.4.1 一个简单的TCP客户机服务器应用程序 352
12.4.2 使用即用型网络工具 354
12.5 raw以太网总线 355
12.6 简单以太网桥接 355
12.7 总结 357
第13章 无线网络设备——WLAN 358
13.1 无线网络设备 358
13.1.1 电器线路 359
13.1.2 BeagleBone Black系统下的WLAN设备 359
13.1.3 SAMA5D3 Xplained系统下的WLAN设备 359
13.1.4 Wandboard系统下的WLAN设备 359
13.2 Linux系统中的WLAN设备 360
13.2.1 可插拔外部WLAN设备 360
13.2.2 Wi-Fi操作模式 361
13.3 无线工具 361
13.4 WPAsupplicant 365
13.5 hostapd守护进程 367
13.6 总结 371
第14章 控制器局域网——CAN 372
14.1 CAN总线 372
14.1.1 电气线路 373
14.1.2 BeagleBone Black系统下的CAN端口 374
14.1.3 SAMA5D3 Xplained系统下的CAN端口 375
14.1.4 Wandboard系统下的CAN端口 376
14.2 Linux系统中的CAN总线 376
14.3 can-utils包 377
14.4 raw CAN总线 379
14.5 通过CAN总线交换数据 380
14.5.1 使用板级控制器 381
14.5.2 使用外部控制器 383
14.6 总结 386
第15章 声音设备——SND 387
15.1 声音设备 387
15.1.1 电气线路 390
15.1.2 BeagleBone Black系统下的声音设备 390
15.1.3 SAMA5D3 Xplained系统下的声音设备 391
15.1.4 Wandboard系统下的声音设备 391
15.2 Linux系统中的声音 392
15.3 音频工具 395
15.3.1 ALSA工具 395
15.3.2 Madplay 400
15.3.3 MPlayer 401
15.3.4 Sox 402
15.4 USB音频设备组 407
15.5 管理声音设备 408
15.5.1 添加一个音频编解码器 408
15.5.2 一个简单的声音示波器 413
15.6 总结 417
第16章 视频设备—V4L 418
16.1 视频设备 418
16.1.1 电气线路 421
16.1.2 BeagleBone Black系统下的视频设备 422
16.1.3 SAMA5D3 Xplaioned系统下的视频设备 422
16.1.4 Wandboard系统下的视频设备 422
16.2 Linux中的视频设备 423
16.3 视频工具 423
16.4 USB视频类设备 426
16.5 管理视频设备 430
16.5.1 在网络上流式传输视频 430
16.5.2 捕获运动 434
16.6 总结 441
第17章 模数转换器——ADC 442
17.1 模数转换器 442
17.1.1 电气线路 443
17.1.2 BeagleBone Black系统下的ADC 443
17.1.3 SAMA5D3 Xplained系统下的ADC 444
17.1.4 Wandboard系统下的ADC 445
17.2 Linux下的ADC 445
17.3 气体检测 450
17.4 总结 455
第18章 脉宽调制——PWM 456
18.1 PWM设备 456
18.1.1 电气线路 457
18.1.2 BeagleBone Black系统下的PWM 457
18.1.3 SAMA5D3 Xplained系统下的PWM 458
18.1.4 Wandboard系统下的PWM 458
18.2 Linux下的PWM设备 458
18.3 管理伺服电动机 459
18.4 总结 460
第19章 其他杂类设备 461
19.1 数字传感器 461
19.1.1 水传感器 461
19.1.2 红外传感器 462
19.2 模拟传感器 465
19.2.1 湿度传感器 465
19.2.2 压力传感器 466
19.2.3 光传感器 467
19.3 GSM/GPRS调制解调器 468
19.4 智能卡读卡器 473
19.5 RFID读取器 476
19.6 Z-Wave设备 481
19.6.1 Z-Wave控制器 481
19.6.2 Z-Wave墙塞式传感器 484
19.6.3 Z-Wave多传感器 486
19.7 总结 487