首页>参考读物>计算机科学与技术>软件与程序设计

GNU/Linux嵌入式快速编程
作者 : [美]鲁道夫·焦梅蒂(Rodolfo Giometti)著
译者 : 俞辉 何旭莉 王晓红 李永 译
出版日期 : 2018-05-04
ISBN : 978-7-111-59829-9
定价 : 109.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 506
开本 : 16
原书名 : GNU/Linux Rapid Embedded Programming
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

图书特色

GNU/Linux
嵌入式快速编程
[ 美 ] 鲁道夫 · 焦梅蒂(Rodolfo Giometti)?著
俞辉 何旭莉 王晓红 李永 译
GNU/Linux
Rapid Embedded Programming
本书介绍如何使用和改造Linux内核中自有的驱动,如何找到相应的设备节点,如何对各种端口进行控制等。而且还提供了大量的案例程序,无论是入门者,还是进行二次开发的程序员,都可以从中汲取经验。
自由环境,自由学习。学习本书不用担心被局限在固定的某个平台之中进行少量的二次开发。因为丰富的硬件和Linux系统的开放性,会给阅读者带来自由的感受。

图书前言

嵌入式计算机在最近几年变得非常复杂,而开发者专注的问题应该是如何解决当下的问题,而不用在寻找更好的外设(简称为外设)或者学习如何管理它们这些方面浪费时间。 对于有经验的嵌入式程序员和工程师来说,最大的挑战是把一个想法变成现实到底需要多长时间,本书将展示如何做到这一点。
本书展示了行业中外部环境是如何通过特定的外设进行交互的。这里将使用最新的Linux内核版本4.x,软件系统基于Debian/Ubuntu系统,而嵌入式系统则使用OpenWrt和Yocto。
本书涉及的开发板平台基于目前元件市场和专业开发板制造商中最流行的CPU。在简要介绍完每个平台之后,本书将展示如何设置这些平台,使之能运行一个完整的发行版GNU/Linux并且获得对其系统控制台的访问权。之后将介绍如何针对每个平台安装一个完整的开发系统,使开发者能够运行自己开发的程序。
第一步将在嵌入式套件下进行编程,使用C、Bash脚本或者Python/PHP等语言来编程以访问外设。之后将会介绍更多的设备驱动程序和访问外设的内容以奠定坚实的基础。读者将学习通过C程序或者脚本语言(Bash/Python)和外设进行交互,以及如何为特定的硬件配置相应的设备驱动程序。
本书使用的硬件设备几乎涵盖我们所能见过的所有连接各种开发板的方式,包括I2C、SPI、USB、1-wire总线、串行总线以及各类数字和模拟设备等。
本书中使用的编程语言依据的原则是,以最快速最简单的解决方案来解决当前的问题。特别是可以找到Bash、C、PHP、Python的示例代码。
在这些章节中将会需要使用一个守护进程、一个内核模块或者可能需要重新编译整个内核。这种情况下添加了一个简短的描述,包括读者应该做什么、可以从哪里得到更多的信息和使用工具。但要说明的是,管理一个GNU/Linux系统或者内核模块等一些基本的技能是必需的。
本书涵盖内容
本书可以分为两大部分:其中第一部分是第二部分的基础。第一部分介绍如何安装一个宿主机和开发系统以及如何通过串口控制台访问嵌入式套件。首先将看到一些引导加载程序的命令以及C的编译器和交叉编译器,之后会介绍内核模块、设备驱动程序以及一些基于网络文件系统的文件系统。读者也会在主机上使用模拟器来运行一个完整的目标机Debian系统,读者也会在Bash、PHP和Python下面看到系统的守护进程和脚本程序,读者还会看到闪存和Linux的MTD(Memory Technology Device,内存技术设备)。其中会介绍JFFS2和UBIFS文件系统,以及两个非常著名的嵌入式系统Yocto和OpenWrt。
下面是第一部分中每章的简短介绍:
第1章介绍目前工业应用中的最常用的三个开发环境:BeagleBone Black系统、SAMA5 D3 Xplained系统和WandBoard系统。在简要介绍了每个开发板之后,我们将看到如何设置它们以便运行一个完整的GNU/Linux系统。我们也将看到如何在每个平台(和虚拟机中)上安装一个完整的开发系统。
第2章首先将展示如何安装开发包,然后将进一步探索串口控制台和运行在其上的shell。最后将介绍引导系统bootLoader的命令。
第3章将讲述C编译器以及交叉编译器,之后我们将看到内核模块、设备驱动程序以及一些基于NFS的文件系统,最后会看到一个开发者在主机上如何使用模拟器来运行一个完整的目标机Debian系统。
第4章将介绍系统守护进程(描述它们是什么以及如何使用它们),之后将使用Bash、PHP和Python语言来进行脚本编程。
第5章首先介绍闪存和管理闪存的软件,之后将展示Linux的内存技术设备(MTD)和两个主要的文件系统JFFS2和UBIFS,并运行它们。最后将展示如今两个最著名的嵌入式系统——Yocto和OpenWrt,学习如何在这些嵌入式系统上编写应用程序,并且把该程序添加到嵌入式系统中。
第二部分开始深入介绍所有外设。如果你是一位嵌入式开发人员,在你的职业生涯所遇到的各种外设都会涉及。在本书中,对于每一个外设,都会介绍其所支持的嵌入式套件以及如何访问和使用它。对于每种设备类型,都会结合实例展示如何管理它。
下面是第二部分中每章的简短介绍:
第6章首先简短描述GPIO线路,之后将会看到它们在嵌入式套件上是如何布局的,接着再详细了解如何以非常简单(但效率低)的方式访问这些线路,然后再以更智能(但更复杂)的方式重新再次访问。最后会在内核中通过IRQ管理和LED设备支持再快速地介绍一下GPIO管理机制。
第7章将介绍串行端口(简称串口),串口是计算机中最重要的一个外设接口(至少可以让计算机用于控制自动化行业等)。简要描述串行端口和串行设备之后,我们将通过使用一个实际的串口设备来看如何在一个GNU/Linux系统中对其进行管理。最后我们将在内核中学会如何通过一条串行线来实现网线连接的两个嵌入式系统(二者通过一条以太网电缆连接)之间的通信。
第8章将介绍USB总线,这是一种通用的总线,广泛应用于现代计算机。人们可以将各种电子设备连接到计算机,例如硬盘、键盘或其他使用相同USB端口的串行设备。
第9章将介绍I2C总线,它通常用于连接板上设备,即主计算机会将所有设备都放在同一块板上。一些设备使用I2C总线与CPU进行通信,而这一章将尽量向读者提供尽可能广泛的场景:我们将看到几种不同配置的不同设备如何在该总线中尽量组合成各种情况。
第10章将介绍SPI总线,这是另一种总线类型,和I2C一样通常用于连接板上设备。然而,和I2C总线相反,该总线可以以更高的速度进行数据传输,因为它可以进行全双工操作,即可以同时双向传输数据。由于这些特性,SPI总线通常用于为多媒体应用、数字信号处理、电信设备和SD卡实现有效的数据流传输。
第11章将介绍长距离下以太网设备之间的通信1-Wire。GNU/Linux系统对以太网设备及其相关网络协议提供相当不错的支持,这也是世界上大多数网络设备使用该技术的原因。
第12章介绍以太网网络设备。以太网设备很有趣,尽管速度较慢,但它只用一根电线就可以实现和远程设备的交互,这就简化了CPU及其外设之间的连接。如果要在嵌入式套件上使用识别、验证和交付校准数据或制造信息等功能,设计者可以用更经济简单的方式添加电子设备。
第13章介绍无线网络设备,可以在不使用电线的情况下实现多台计算机之间的通信。不过真正有趣的是,以太网接口上的大部分通信协议也可以与这些无线网络设备接口一起使用。
第14章将介绍CAN总线,CAN总线允许系统中的微控制器、计算机和设备在没有主机的前提下使用基于消息的协议进行通信。CAN总线不如以太网或者WiFi那么有名,但在嵌入式领域还是经常使用的,而且被SoC默认支持。
第15章介绍声音设备的一些用法,从而展示如何使用它们来产生音频,以及如何实现一个简单而低成本的示波器。
第16章介绍常见的视频采集设备和相关的一些使用方法,展示如何把嵌入式套件变成一个监控摄像头或远程图像记录仪。
第17章介绍模数转换器——ADC。模数转换器可用于从环境中得到模拟信号并转换成数字信号。本章将展示如何使用它们,以及如何使用特定的软件和硬件触发器,这样在特定时间或某些事件发生时可以启动转换。
第18章介绍脉宽调制——PWM。PWM可以使用数字源并通过将消息编码到一个脉冲信号(通常是一个方波)的方式产生一个模拟信号,然后这些消息可以用来控制电动机或其他电子设备以及控制一个伺服电动机的位置。
第19章将介绍上述章节之外的其他外设。最后一章将展示我们可能会在某个监测或控制系统里遇到的一个额外的外设列表,如RFID和智能卡读卡器、数字或模拟传感器、GSM/GPRS调制解调器、Z-Wave等。
需要的准备工作
本书中你需要准备的东西包括以下内容。
软件准备
本书默认读者有一些非图形化的文本编辑器的相关知识,编辑器可以是vi、emacs或nano等。即使你能够通过嵌入式套件与液晶显示器、键盘或者鼠标直接相连并使用图形界面,但在本书中我们还是假设读者只能通过文本编辑器来对文本文件进行修改。
宿主机——将用于交叉编译代码和管理嵌入式系统的计算机——要求运行的是GNU/Linux系统。我的宿主机系统是Ubuntu 15.10,但只要稍稍修改,你就可以使用一个更新版本的Ubuntu系统或一个Debian系统,或者可以用另一个GNU/Linux系统,但需要安装交叉编译工具、支持库和进行软件包管理。本书不会涉及如Windows、Mac OS或者其他类似系统,因为不应该使用这些低技术层次的系统来为高技术层次的系统开发代码。
读者还需要了解一个C编译器是如何工作的,以及Makefile是如何管理的。
本书将介绍一些内核编程技术,但这些不能作为核心编程课程的内容。这方面你需要一本适合这类主题的书。然而,每个示例都有很好的文档说明,而且你会看到一些相关的建议资源。本书使用的内核版本是4.4.x。
最后一点,假设读者已经知道如何在Internet上连接一个GNU/Linux系统,这样你可以下载某个包或者通用文件。
硬件准备
在本书中所有开发的代码是基于BeagleBone Black平台、SAMA5D3平台和WandBoard平台的。但是你可以使用一个旧版本的嵌入式套件,这不会有任何问题。事实上,代码是可移植的,它可以在其他系统上运行(不过DTS文件是需要分开的)。
关于本书中所使用的计算机外设,每一章中都说明了可以从哪里买到,当然读者也可以从网上找到更好更便宜的报价。本书还说明了能找到相应的数据手册的网址。
这样你在使用本书所涉及的嵌入式套件和工具包时不会遇到任何困难,因为这些连接非常简单,而且文档齐全。这些内容不需要任何特定的硬件技能,但如果你知道一点相关的电工电子知识可能会有所帮助。
本书读者对象
如果你想学习如何使用嵌入式系统,包括通过访问GNU/Linux设备驱动程序的方式从外设收集数据或控制某个设备,那这本书是为你编写的。
如果你感兴趣于如何方便快捷地访问不同的计算机外设,以便为行业应用实现基于GNU/Linux系统的功能控制或监控系统,这本书也是为你编写的。
如果你有一些硬件或电气工程的经验,并且熟悉UNIX环境中的C、Bash、Python和PHP编程的基本知识,并且希望能够将它们应用到嵌入式系统中,这本书也是为你编写的。
约定
在本书中你可以发现很多不同信息的文本样式。下面将对这些类型进行举例并进行含义解释。
内核和日志消息
通常情况下GNU/Linux系统的内核消息如下所示:

对于本书来说,这一行命令太长了,这也是为什么从第一个字符开始直到真正的信息开始之前的这些字符会被删除。因此在刚才的示例中,行输出将会显示如下:

然而,正如上面所说的,如果一行命令太长将会换行。
在终端中过长的输出、重复或者不太重要的内容会以三个点“...”代替,如下所示:

这三个点在结束时表示输出仍在继续,但为了省空间而省略了。
文件的修改
当修改某个文本文件时,我将使用统一的上下文差异格式进行说明。在表示文本修改方面,这是一种非常高效和紧凑的方式。这种格式可以通过使用带有-u选项参数的diff命令获得。
举个简单例子,下面的文本内容为file1.old:

假设我们必须在下面的代码段中突出显示修改的第三行:

这样你可以很容易地理解。每次对整个文件进行简单修改时,这是相当模糊且占用篇幅的,但是通过使用统一的上下文差异格式,前面的修改可以写成如下形式:

现在修改哪些地方就非常明确了,而且篇幅紧凑。开始两行里面,---表示修改之前的原始文件,而+++表示修改之后的新文件,然后是文件所包含的修改内容的差异。原始文件中不修改的内容在最前面增加一个空格字符,而要添加的行前面加一个+字符,被删除的行前面加一个-字符。
由于篇幅原因,本书中的大多数代码都减少了缩进以适合纸质版的页面宽度,但它们仍然保持可读的正确形式。那些真正的代码补丁可以从GitHub或Packt网站上获取。
串行和网络连接
在这本书中我主要使用两种不同类型的连接方式来实现宿主机与嵌入式套件的交互:使用串口控制台实现的串行连接方式,以及使用SSH终端实现的以太网连接方式。
串口控制台是在和嵌入式套件相连接的同一个USB接口上实现的,主要用于通过命令行管理系统。它主要用于监控系统,特别是对内核消息进行控制。
SSH终端和串口控制台非常相似,即使不完全相同(例如内核消息不会自动在终端上显示),但它可以像串口控制台一样使用,通过命令行输入命令或者编辑文件。
在本书后面的章节中,我将通过串口控制台或SSH连接的一个终端来实现大多数的命令和配置操作。
要从你的主机开始访问串口控制台,可以使用如下minicon命令:

或者根据开发板的USB转串行适配器使用如下命令:

然而,在第1章中对这方面已经做了解释,所以并不用担心。有些系统可能需要root权限才能够访问/dev/ttyACM0设备。这种情况下你可以通过使用sudo命令或更好的处理方式,例如添加新的系统用户到正确的用户组中来解决这个问题,命令如下:

然后注销并再次登录,你将可以畅通无阻地访问串行设备。
要访问SSH终端,你可以使用与串口控制台相同的USB接口电缆来模拟以太网连接。事实上,如果你的主机配置正确,当插入USB连接线一段时间后,你会看到一个新的附带IP地址的连接(如果连接BeagleBone Black开发平台,你应该得到地址192.168.7.1的连接;如果连接SAMA5D3 Xplained平台,则是192.168.8.1地址;如果连接WandBoard平台,则是192.168.9.1地址。具体请见第1章)。然后通过这个新连接,就可以使用下面的命令来访问BeagleBone Black嵌入式套件。

最后一个可以使用的通道是以太网连接。它主要用于从宿主机或因特网上下载文件,通过将以太网水晶头连接到每个嵌入式套件的以太网端口,然后将端口配置为读者的局域网设置,从而可以建立连接。
但很重要的一点是,你也可以通过使用上面提到的USB仿真以太网连接来连接因特网。事实上,通过使用宿主机上的命令(宿主机是GNU/Linux系统),你可以把它作为一个路由器,让你的嵌入式套件与以太网端口连接时能够实现上网:

然后在BeagleBone Black平台上通过USB连接线,可以使用如下命令设置网关:

请注意,我的主机系统中eth1设备是首选的网络连接,而在我的嵌入式系统中eth4设备是BeagleBone Black的设备。
其他约定
警告或注意标志
提示或技巧标志
下载示例代码及彩图
本书的示例代码文件可以从作者的GitHub库https://github.com/giometti/gnu_linux_rapid_embedded_programming获取,只要使用如下命令:

读者也可以访问华章图书官网www.hzbook.com,通过注册并登录账号,下载本书的源代码和彩图。

上架指导

计算机\嵌入式编程

封底文字

本书是一本非常棒的嵌入式系统教程,硬件基于BeagleBone Black系统、SAMA5D3 Xplained系统和Wandboard系统三种开发平台,软件则是非常流行的Linux系统。还涉及各种硬件端口、总线的驱动编写、编程控制等内容。整本书分为两大部分,第一部分是基础部分,包括开发环境的建立、简单命令和编程工具的使用,覆盖编译器、编程工具、脚本和daemon等。在读者打好嵌入式系统的基础之后,本书将进入第二部分,也就是各种基于硬件设备的应用。本书使用的硬件设备几乎涵盖我们所能见到过的所有连接各种开发板的连接方式,包括I2C、SPI、USB、单总线、串行总线以及各类数字模拟设备等。

本书内容
•使用嵌入式系统来实现你的项目
•为嵌入式系统访问和管理外围设备
•使用如C、Python、Bash和PHP等语言对嵌入式系统编程
•使用完整的操作系统(如Debian和Ubuntu)或嵌入式系统(如OpenWrt和Yocto)
•驾驭设备驱动程序的能力以优化设备的通信
•通过几种方式访问数据设备,如GPIO、串口、脉宽调制、ADC、以太网、Wi-Fi、音频、视频、I2C、SPI、1-Wire、USB和CAN
•几个设备的实际用例,如RFID读取器、Smart读卡器、Z-Wave设备、GSM/GPRS调制解调器
•几种传感器用例,如光、压力、湿度、红外线等传感器

译者序

本书是一本非常棒的嵌入式系统教程,硬件基于BeagleBone Black系统、SAMA5D3 Xplained系统和Wandboard系统三种开发平台,软件则是非常流行的Linux系统。整本书分为两大部分,第一部分是基础部分,包括开发环境的建立、简单命令和编程工具的使用,涉及编译器、编程工具、脚本和守护进程等。在读者打好嵌入式系统的基础之后,本书将进入第二部分,也就是各种基于硬件设备的应用。本书使用的硬件设备几乎涵盖我们见过的所有连接各种开发板的方式,包括I2C、SPI、USB、单总线、串行总线以及各类数字模拟设备等,每一章都会针对一种类型的总线或者设备类型,进行详细的介绍,哪怕是初学者都能够按照书中教程一步一步完成相应的开发。除了第一部分之外,后面各章之间关系不大,每章都对应一种设备总线,可以进一步帮助读者进行有针对性的学习和二次开发。
本书最主要的特点就是知识点丰富,涵盖面大。硬件平台包括目前最主流的3个嵌入式系统平台,操作系统也是目前最流行的Linux。书中涵盖各种硬件端口、总线的驱动编写、编程控制等,说它是百科全书都不为过。没有涉及的比较深层的内容在书中也会提供相应的网址和资料,以帮助读者进一步学习。
本书的第二个特点就是深入浅出,循循善诱。哪怕读者是初学者也没关系,里面的命令和操作都是按照零基础的标准来安排的。书中会告诉你,如何使用和改造内核中原有的驱动,如何找到相应的设备节点,如何对各种端口进行控制等。而且还提供了大量的案例程序,无论是入门者,还是进行二次开发的程序员,都可以从中取经。
本书的第三个特点就是自由。自由的环境,自由的学习。学习本书不用担心被局限在固定的某个平台之中进行少量的二次开发。因为丰富的硬件和Linux系统的开放性会给阅读者带来自由的感受。Linux本身就是自由的,其“一切都是文件”的特性在嵌入式系统的开发中如鱼得水,在操作系统的支持下,嵌入式系统可以很方便地实现各种复杂功能。
当然,本书也有不足之处,例如书中有些内容介绍得过于细致了,其实在开始的章节第一次介绍时翔实一些是没问题的,不过到了后面还详细地说明就没有太大必要了。当然,这对那些跳跃着阅读的读者可能会比较有用。

图书目录

译者序
前言
第一部分 基础知识
第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 访问一个I2C设备 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
第二部分 外围设备
第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-Wire端口 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 WPA supplicant 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

教学资源推荐
作者: [美]保罗·C. 乔根森(Paul C. Jorgensen) 著
作者: 史涯晴 贺汛 编著
作者: (美)Mary Campione Kathy Walrath Alison Huml
作者: Brian W.Kernighan
参考读物推荐
作者: 李玉林 马军 王岩
作者: [美]杜安?斯托尔蒂(Duane Storti),[土耳其]梅特?尤尔托卢(Mete Yurtoglu) 著
作者: (美)Aaftab Munshi,Benedict R. Gaster, Timothy G. Mattson, James Fung, Dan Ginsburg 著
作者: Kenneth L. Calvert ; Michael J. Donahoo