本书是一本非常棒的嵌入式系统教程,硬件基于BeagleBone Black系统、SAMA5D3 Xplained系统和Wandboard系统三种开发平台,软件则是非常流行的Linux系统。整本书分为两大部分,第一部分是基础部分,包括开发环境的建立、简单命令和编程工具的使用,涉及编译器、编程工具、脚本和守护进程等。在读者打好嵌入式系统的基础之后,本书将进入第二部分,也就是各种基于硬件设备的应用。本书使用的硬件设备几乎涵盖我们见过的所有连接各种开发板的方式,包括I2C、SPI、USB、单总线、串行总线以及各类数字模拟设备等,每一章都会针对一种类型的总线或者设备类型,进行详细的介绍,哪怕是初学者都能够按照书中教程一步一步完成相应的开发。除了第一部分之外,后面各章之间关系不大,每章都对应一种设备总线,可以进一步帮助读者进行有针对性的学习和二次开发。
本书最主要的特点就是知识点丰富,涵盖面大。硬件平台包括目前最主流的3个嵌入式系统平台,操作系统也是目前最流行的Linux。书中涵盖各种硬件端口、总线的驱动编写、编程控制等,说它是百科全书都不为过。没有涉及的比较深层的内容在书中也会提供相应的网址和资料,以帮助读者进一步学习。
本书的第二个特点就是深入浅出,循循善诱。哪怕读者是初学者也没关系,里面的命令和操作都是按照零基础的标准来安排的。书中会告诉你,如何使用和改造内核中原有的驱动,如何找到相应的设备节点,如何对各种端口进行控制等。而且还提供了大量的案例程序,无论是入门者,还是进行二次开发的程序员,都可以从中取经。
本书的第三个特点就是自由。自由的环境,自由的学习。学习本书不用担心被局限在固定的某个平台之中进行少量的二次开发。因为丰富的硬件和Linux系统的开放性会给阅读者带来自由的感受。Linux本身就是自由的,其“一切都是文件”的特性在嵌入式系统的开发中如鱼得水,在操作系统的支持下,嵌入式系统可以很方便地实现各种复杂功能。
当然,本书也有不足之处,例如书中有些内容介绍得过于细致了,其实在开始的章节第一次介绍时翔实一些是没问题的,不过到了后面还详细地说明就没有太大必要了。当然,这对那些跳跃着阅读的读者可能会比较有用。
封面图
目录
- 译者序
- 前言
- 第一部分基础知识
- 第1章开发系统的安装 2
- 1.1嵌入式术语 2
- 1.2系统概述 4
- 1.2.1BeagleBone Black开发平台 4
- 1.2.2SAMA5D3 Xplained开发平台 6
- 1.2.3Wandboard开发平台 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.3GPIO管理 69
- 2.2.4访问一个I2C设备 70
- 2.2.5从网络加载文件 71
- 2.2.6内核命令行 75
- 2.3总结 76
- 第3章C编译器、设备驱动及其开发技术 77
- 3.1C编译器 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.3modutils(管理内核模块的一个软件包) 95
- 3.3.4编写一个设备驱动 97
- 3.4根文件系统 106
- 3.4.1/dev目录 107
- 3.4.2tmpfs文件系统 109
- 3.4.3procfs文件系统 110
- 3.4.4sysfs文件系统 113
- 3.5网络文件系统 115
- 3.5.1本机输出一个NFS 116
- 3.5.2设置内核以挂载NFS 117
- 3.5.3通过U-Boot和内核命令行使用NFS 119
- 3.5.4NFS开发 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.1MTD与块设备 164
- 5.1.1什么是MTD设备 165
- 5.1.2管理MTD设备 167
- 5.1.3Flash存储系统 170
- 5.2OpenWrt系统 179
- 5.2.1使用缺省配置 180
- 5.2.2添加(准)LAMP系统 188
- 5.2.3添加自定义配置 197
- 5.3Yocto系统 200
- 5.3.1使用缺省配置 201
- 5.3.2添加图形支持 210
- 5.3.3添加自定义程序 212
- 5.4总结 215
- 第二部分外围设备
- 第6章通用输入输出信号——
- GPIO 218
- 6.1GPIO 218
- 6.1.1BeagleBone Black系统下的
- GPIO 221
- 6.1.2SAMA5D3 Xplained系统下的GPIO 221
- 6.1.3Wandboard系统下的GPIO 222
- 6.2Linux下的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.2LED和触发器 244
- 6.6总结 248
- 第7章串行端口和TTY设备——
- TYY 249
- 7.1TTY、串行和串口线 249
- 7.1.1电气线路 250
- 7.1.2BeagleBone Black系统下的
- TTY 251
- 7.1.3SAMA5D3 Xplained系统下的TTY 253
- 7.1.4Wandboard系统下的TTY 254
- 7.2串行端口的实现 254
- 7.3Linux系统下的串行端口 255
- 7.4通信参数 256
- 7.5访问TTY 256
- 7.5.1距离传感器 257
- 7.5.2LF低频RFID读写器 261
- 7.6使用SLIP管理内核中的TTY 263
- 7.7总结 268
- 第8章通用串行总线——USB 269
- 8.1通用串行总线 269
- 8.1.1电气线路 270
- 8.1.2BeagleBone Black系统下的
- USB端口 270
- 8.1.3SAMA5D3 Xplained系统下
- 的USB端口 270
- 8.1.4Wandboard系统下的USB
- 端口 271
- 8.2Linux下的USB总线 271
- 8.2.1USB主机介绍 272
- 8.2.2USB设备介绍 275
- 8.3USB工具 284
- 8.4raw USB总线 286
- 8.5总结 290
- 第9章内部集成电路——I2C 291
- 9.1内部集成电路总线 291
- 9.1.1电子线路 292
- 9.1.2SAMA5D3 Xplained系统下的I2C端口 293
- 9.1.3Wandboard系统下的I2C
- 端口 294
- 9.2Linux系统下的I2C总线 294
- 9.3I2C工具 295
- 9.4访问I2C设备 296
- 9.4.1EEPROM、ADC和IO
- 扩展板 296
- 9.4.2温湿度和压力传感器 303
- 9.4.3串行端口 307
- 9.5raw 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.2BeagleBone Black系统下的
- SPI端口 318
- 10.1.3SAMA5D3 Xplained系统下的SPI端口 320
- 10.1.4Wandboard系统下的SPI
- 端口 322
- 10.2Linux下的SPI总线 323
- 10.3SPI工具 323
- 10.4访问SPI设备 324
- 10.4.1LCD 325
- 10.4.2串行端口 327
- 10.5raw SPI总线 330
- 10.5.1基于C的数据交换 330
- 10.5.2基于Python的数据交换 332
- 10.6总结 337
- 第11章1-Wire——W1 338
- 11.11-Wire总线 338
- 11.1.1电气线路 339
- 11.1.2BeagleBone Black系统下的1-Wire端口 340
- 11.1.3SAMA5D3 Xplained系统下
- 的1-Wire端口 341
- 11.1.4Wandboard系统下的1-Wire
- 端口 341
- 11.2Linux下的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.2BeagleBone Black系统下的
- 以太网端口 349
- 12.1.3SAMA5D3 Xplained系统下
- 的以太网端口 349
- 12.1.4Wandboard系统下的以太网
- 端口 350
- 12.2Linux系统下的以太网设备 350
- 12.3网络工具 351
- 12.4远程设备通信 352
- 12.4.1一个简单的TCP客户机/服务器应用程序 352
- 12.4.2使用即用型网络工具 354
- 12.5raw以太网总线 355
- 12.6简单以太网桥接 355
- 12.7总结 357
- 第13章无线网络设备——WLAN 358
- 13.1无线网络设备 358
- 13.1.1电器线路 359
- 13.1.2BeagleBone Black系统下的WLAN设备 359
- 13.1.3SAMA5D3 Xplained系统下的WLAN设备 359
- 13.1.4Wandboard系统下的WLAN
- 设备 359
- 13.2Linux系统中的WLAN设备 360
- 13.2.1可插拔外部WLAN设备 360
- 13.2.2Wi-Fi操作模式 361
- 13.3无线工具 361
- 13.4WPA supplicant 365
- 13.5hostapd守护进程 367
- 13.6总结 371
- 第14章控制器局域网——CAN 372
- 14.1CAN总线 372
- 14.1.1电气线路 373
- 14.1.2BeagleBone Black系统下的CAN端口 374
- 14.1.3SAMA5D3 Xplained系统下的CAN端口 375
- 14.1.4Wandboard系统下的CAN
- 端口 376
- 14.2Linux系统中的CAN总线 376
- 14.3can-utils包 377
- 14.4raw 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.2BeagleBone Black系统下的
- 声音设备 390
- 15.1.3SAMA5D3 Xplained系统下的
- 声音设备 391
- 15.1.4Wandboard系统下的声音
- 设备 391
- 15.2Linux系统中的声音 392
- 15.3音频工具 395
- 15.3.1ALSA工具 395
- 15.3.2Madplay 400
- 15.3.3MPlayer 401
- 15.3.4Sox 402
- 15.4USB音频设备组 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.2BeagleBone Black系统下的
- 视频设备 422
- 16.1.3SAMA5D3 Xplaioned系统下
- 的视频设备 422
- 16.1.4Wandboard系统下的视频
- 设备 422
- 16.2Linux中的视频设备 423
- 16.3视频工具 423
- 16.4USB视频类设备 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.2BeagleBone Black系统下的ADC 443
- 17.1.3SAMA5D3 Xplained系统下的ADC 444
- 17.1.4Wandboard 系统下的
- ADC 445
- 17.2Linux下的ADC 445
- 17.3气体检测 450
- 17.4总结 455
- 第18章脉宽调制——PWM 456
- 18.1PWM设备 456
- 18.1.1电气线路 457
- 18.1.2BeagleBone Black系统下的PWM 457
- 18.1.3SAMA5D3 Xplained系统下的PWM 458
- 18.1.4Wandboard系统下的
- PWM 458
- 18.2Linux下的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.3GSM/GPRS调制解调器 468
- 19.4智能卡读卡器 473
- 19.5RFID读取器 476
- 19.6Z-Wave设备 481
- 19.6.1Z-Wave控制器 481
- 19.6.2Z-Wave墙塞式传感器 484
- 19.6.3Z-Wave多传感器 486
- 19.7总结 487