首页>参考读物>电子电工>电子工程

Linux嵌入式实时应用开发实战(原书第3版)
作者 : (美)Doug Abbott 著
译者 : 周艳 译
出版日期 : 2015-01-29
ISBN : 978-7-111-48857-6
定价 : 59.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 221
开本 : 16
原书名 : Linux for Embedded and Real-Time Applications
原出版社: Elsevier (Singapore) Pte Ltd
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书分为三部分内容,系统介绍嵌入式Linux开发的方方面面。第一部分介绍嵌入式Linux开发基础;第二部分介绍交叉编译环境下的应用编程。第三部分主要涉及Linux的组件和开发工具。

图书特色

封面
这是一本实用、全面、系统的嵌入式Linux入门书籍。
围绕实时应用逐章分模块,从基本概念、原理、配置到实战案例全面解构嵌入式Linux。
以ARM单板机为平台,涵盖Linux基础、交叉编译、Linux组件和工具三大部分内容。
本书不拘泥于形式,立足实战,为读者提供详细的操作指南。

封底
从嵌入式Linux到Android应用开发的第一手经验

这本新版的《Linux嵌入式实时应用开发实战》(原书第3版)从实战的角度介绍了正在快速发展的嵌入式Linux技术,内容包含了基础和最新开发技术。本书是新手在嵌入式环境中使用Linux的理想入门读物,不但包含了重要的概念和具体的应用,还收录了作者在此领域的切身经历和实践方法。

本书特点
以基于ARM的单板机(SBC)为目标板讲解嵌入式开发
开源、Linux和嵌入式技术的基础
网络、图形界面和Android编程
教会读者搭建简单的系统环境和工具链
告诉读者如何使用模拟器进行早期应用程序测试
教会读者使用一些Linux的组件和工具
教会读者配置和生成Linux内核、BusyBox和U-Boot bootloader

作者简介
Doug Abbott 是一位在嵌入式领域拥有30多年经验的顾问,他在面向工业和科研领域的数据采集产品方面拥有非常丰富的软硬件开发经验。Doug在加州大学伯克利分校讲授PC技术和实时编程课程,是一位颇受学生爱戴的导师,由他发起和组织的研讨在学校非常受欢迎。有数百位资深工程师接受过他的实时编程技术和多任务操作系统培训。


一直以来,嵌入式Linux领域都没有一本系统且全面的入门书籍。大多数单片机和STM32开发者在掌握了MCU的开发技术之后,要再通过学习μC/OS这样的嵌入式实时操作系统,才能过渡到Linux操作系统的学习。这其中很重要的一个原因是没有一本专门针对嵌入式工程师的Linux入门书籍。本书没有从复杂的PC级操作系统的角度为读者讲解Linux,而是从实时应用的角度向读者讲解Linux的基本概念和原理,并辅以配置、操作和实战案例,这些都是作者的第一手经验。本书是嵌入式工程师学习Linux的绝佳入门读物。

译者简介
周 艳 硕士毕业于中国科学院声学研究所,曾供职于中国电子科技集团某研究所,从事嵌入式实时系统开发工作。研究方向为传感器和通信领域的实时数据采集与控制,对嵌入式系统的系统架构与软硬件开发等都有丰富的实战经验,负责过多个项目的实时信号处理系统开发,有五年的相关经验。

图书前言

二十年前的今天,佩铂军士在教乐队表演。
——约翰 列侬,佩铂军士的孤独之心俱乐部乐队

来自:torvalds@klaava.Helsinki.Fi (Linus Benedict Torvalds)
新闻组:comp.os.minix
主题:你最想在minix中看到什么?
摘要:关于我的新操作系统的一个小调查
消息ID:<1991Aug25.205708.9541@klaava.Helsinki.Fi>
时间:格林尼治时间1991年8月25日20∶57∶08
组织:赫尔辛基大学
使用minix的朋友们,大家好!
我正在为386(486)AT系列编写一个(免费的)操作系统(这仅仅是业余爱好,不会太大,也不会像GNU那样专业)。我从4月份开始酝酿,现在快准备好了。我希望得到任何关于minix的反馈,包括你们在使用过程中喜欢和不喜欢的地方。因为我的操作系统和它多少有点类似(比如文件系统具有相同的物理布局(出于实用的原因))。
我目前已经移植了bash(1.08)和gcc(1.40),而且进展好像很顺利。这意味着我将在未来几个月内把这个系统推向应用,所以我想知道大多数人希望系统具有什么特性。欢迎任何建议,但是我不能保证都能实现∶-)
Linus(torvalds@kruuna.helsinki.fi)
补充一下,任何minix代码都是免费的,而且具有多线程的文件系统。
它不是便携的(如使用386任务切换等),很可能永远不能支持除了AT硬盘以外的东西,这就是我目前能达到的状态∶-(
在当时刚出现的只能处理文字的互联网上,Linus Torvalds,一个芬兰的大学生,用这则信息开启了一场革命。当我在2011年年末写下这些文字时,Linux已经庆祝了它的20周年纪念日。我怀疑,Linus当时并没有想到他的“爱好”项目会很快变成一个功能强大的32位和后来的64位操作系统,甚至可以与微软有力地竞争。
毫无疑问,20年来,Linux走过了很长的一段路。1991年9月17日首次发布的0.01版本包含88个文件,总共278KB。最新发布的Linux版本包括近40 000个文件,超过400MB。据说,全球几千个程序员都不同程度地参与到了Linux的开发中。
自2006年本书的第2版出版以来,Linux世界又发生了很多变化,这也是本书再版的一个直接原因。Linux内核持续改进,为了庆祝20周年,最近提高到了3.0版。2007年年底,谷歌引入了安卓系统。据统计,截至2011年8月,安卓占有智能手机市场48%的份额,每天有500 000台设备被激活。
在本书第1版的前言中我就承认,我没有真正喜欢过UNIX,因为它有意设计得晦涩而且很难使用。一开始,Linux在这方面几乎没做任何改变,我也仍然坚持这种几分喜爱几分讨厌的态度。
但是,当Linux逐渐开始为桌面处理世界的黄金时代做好准备时,它在我工作的嵌入式领域和网络服务器方面都取得了显著的成就。2007年,LinuxDevices.com报道了Linux正用于近50%的嵌入式项目,到2012年将有超过70%的相关发布产品。甚至微软公司也承认全球有60%的网络服务器运行Linux操作系统,与此同时只有40%运行Windows。
Linux确实很复杂,除非你已经是一个UNIX高手,学习起来才会很快。相关信息就在网上,但是通常它们既不易找到也不易读懂。市场上有数百本已出版的Linux书籍,覆盖了从初学者指南到内核内部工作原理的各个方面。目前为止甚至有不少书讨论过嵌入式和实时应用领域的Linux。
我决定学习Linux,一部分是因为我看到了这个新兴的市场机会,另一部分是因为这种开源的开发模式激励了我。仅仅是出于对它的兴趣,全世界程序员的创意都对这个高度成熟的操作系统做出了贡献。拥有完整的源代码不仅允许你随自己意愿进行改动,也让你(至少在理论上)能理解代码是怎么工作的。
开源有潜力成为社会商业模式转换方面的一个重要范例,因为它表明在解决问题方面,合作可以和竞争同样有效。而且就在我怀疑是否有人能通过Linux得到惊人的财富时,许多公司已经证明针对Linux建立一个赚钱的商业模式是可能的。
读者和阅读准备
我写本书的目的是写一本在我初学Linux时渴望拥有的书。因此,基于这样的想法,本书是直接面向两种不同读者的:
1)主要读者是嵌入式程序员,他们需要得到在嵌入式领域的Linux指导。这也是我初学Linux时的状况和我开始学习Linux的原因,因此,这似乎是架构本书的一个合理方法。
2)另一类读者是Linux程序员,他们需要得到嵌入式和实时编程概念的指导。
因此,尽管本书采用了一个新的角度,但每类读者都很可能看到一些熟悉的内容。
本书不是初学者指南。我假设你已经成功安装了一个Linux系统而且已经使用过一些功能。你知道怎么登录,已经试验过一些命令实用程序,而且可能已运行了一个GUI桌面。尽管如此,第2章也会介绍安装的整个过程,第3章是嵌入式和实时程序员感兴趣的Linux的一些特点和属性的简要介绍。
本书分为三部分。第一部分主要是介绍性的,为第二部分打基础;第二部分讨论在交叉开发环境中的编程应用;第三部分是前面介绍过的一些组件和工具的细节性描述,也是对Linux的实时性能的考量。
这里并没有说你不能通过读一本书去学习编程,你必须要这样做。这也是为什么本书设计为实用指导手册的原因。你将要在Linux工作站上安装许多软件包,你可以在本书英文版的网站上找到范例代码,www.elsevier.com/。
嵌入式编程通常意味着目标机器是独立的且与工作站开发机器不同。本书中,我们主要的目标环境是一个基于ARM的单板计算机,该硬件将在第5章中介绍。这是一款应用广泛且相对便宜的器件,它具有嵌入式实时产品需要的常规处理能力。但是即使你不购买电路板,我们也会介绍一种仿真方法,让你具有玩转工作站的一些基本概念。
个人建议
和大多数的计算机使用者一样,不管怎样,我多年来一直使用Windows,而且说实话,现在我仍然在日常的计算处理中使用Windows。但是同样,在那之前,我已经很熟练地使用DOS了,甚至在此之前,我已在使用RT-11、RSX-11和VMS。所以我并不是不懂命令行编程,事实上,在Windows 95时代以前,在我最终把WIN加入AUTOEXEC.BAT文件以前也已经用了好几年。
尽管如此,硬核UNIX程序员仍然认为GUI是为外行人设计的。他们很自豪地用命令行完成任何工作。但是不管你怎么做,我是喜欢GUI的。的确,命令行仍然有其地位,尤其是对shell脚本和makefile来说。但是对于在文件层次间切换和完成简单的文件操作,如移动、复制、删除、重命名等,简单的拖放操作完胜晦涩的UNIX shell命令行。我也拒绝使用基于文本的编辑器,如vi和emacs,不过我最近也开始接受vim。如果你能记住所有难懂的命令行,它们的确功能强大。但是无论如何,我喜欢所见即所得的编辑器。
我喜欢的GUI是KDE桌面环境。它包含所有必要的提示,包括很好的彩色语法编辑器,更不用说完整的办公包和个人高效工具包了。KDE是“K Desktop Environment”的缩写,它包含在最商业化的Linux发行版中。当然,你可以自由使用任何你觉得最习惯的开发环境来试验本书中的例程。但如果你是Linux新手,建议使用KDE,这也是本书所有示例的工作环境。
本书结构
本书由以下三个主要部分组成。
第一部分——第1~6章。这部分是入门介绍和使用指南。如果你还没有Linux,你将需要安装一个。对于不熟悉UNIX/Linux系统的读者来说,这是对Linux本身的介绍。你需要设置和连接目标板,这在第二部分研究交叉平台应用开发的时候会用到。最后,你将安装并熟悉各种交叉开发工具,包括Eclipse,它是一个开源集成开发环境。
第二部分——第7~12章。探讨交叉平台环境的应用编程。我们将着眼于从用户空间、调试技术和初步调试的高级仿真方面介绍硬件,介绍Posix线程、网络编程和安卓,以及内核级的编程和设备驱动。
第三部分——介绍嵌入式Linux程序员工具包中的各种组件和工具。我们将介绍其中的u-boot boot loader、BusyBox、Buildroot和OpenEmbedded,最后将集中探讨Linux在实时性方面的优化处理。
好了,那就让我们开始吧。和我一起坐上充满了紧张和兴奋,有时很颠簸,但终将得到快乐和回报的过山车,进入激动人心的嵌入式Linux世界吧。

上架指导

嵌入式

封底文字

【待更新】对于飞速发展的Linux嵌入式和实时应用技术,本书从实用的角度介绍相关基础知识和最新技术,通过易于实践的方式讲解关键概念和具体应用,是一本理想的新手入门指南。
本书特点:
·以特殊的基于ARM的单板机(SBC)为目标板讨论嵌入式应用编程
·开源、Linux和嵌入式空间基础
·网络、图形和安卓编程
通过本书,你可以学到:
·设置一个简单的系统和工具链
·将模拟用于初始应用程序测试
·使用Linux组件和工具
·配置和生成Linux内核、BusyBox和u-boot boot loader

作者简介

(美)Doug Abbott 著:【待更新】Doug Abbott是一位拥有30多年经验的顾问,专门从事工业和计算数据获取及嵌入式应用产品的软硬件开发工作。Doug还是一位知名导师和研讨会领导者,他任职于加州大学伯克利分校,负责计算机技术和实时编程课程,曾为几百位资深工程师讲授实时编程技术和多任务操作系统。

译者简介

周艳 译:暂无简介

译者序

Linux系统是开源代码,便于移植和裁剪,在一个2MB的Flash存储器上便可以运行功能完整的Linux程序。Linux在应用32位以及64位处理器的嵌入式产品中得到了很广泛的应用,如手机、多媒体设备、PDA等。正是基于这样的背景,作者写作了本书。对于初次在嵌入式和实时领域应用Linux的工程技术人员来说,这是一本详尽的指导书。
本书第一部分以Fedora为例,图解在Windows中安装和配置Linux工作站的方法和步骤,着重介绍与嵌入式开发者相关的Linux特性和主机开发环境的配置,以Friendly ARM公司生产的Mini2440开发板为目标板,介绍其资源和配置,并简单介绍了集成开发环境Eclipse平台的安装和使用。
第二部分介绍了交叉开发环境中的应用编程。首先以一个程序为例,介绍如何从用户空间访问硬件,如何在目标板上使用GDB来调试代码;接着,在Linux多任务的系统里,介绍如何应用Posix线程实现命令协议交互,如何在嵌入式设备上使用常见的应用级网络协议,如何配置和生成与系统精确匹配的Linux内核;最后介绍Linux设备驱动的相关知识。
第三部分介绍Linux的组件和工具,包括BusyBox、u-boot boot loader、git等工具的安装、配置和初始化。
每部分内容都有相关的背景介绍,对于初级开发应用中可能遇到的问题也有详尽的说明,并且每章最后都有关于参考资料的介绍,对深入学习非常有帮助。
对于初级开发者来说,本书是一本难得的指导书。
由于时间仓促,不足之处欢迎批评指正。
欢迎邮件沟通:zhouyan05@hotmail.com。

周 艳
2014年11月

图书目录

译者序
前言
第一部分 入 门 指 导
第1章 嵌入式和实时空间 / 2
1.1 什么是嵌入式 / 2
1.2 什么是实时 / 3
1.3 为什么Linux适用 / 3
1.3.1 开源 / 4
1.3.2 移植和定制 / 5
1.4 哪里用嵌入式Linux / 5
1.5 开源协议 / 6
1.6 资源 / 8
第2章 安装Linux / 9
2.1 发行版 / 9
2.1.1 Debian GNU/Linux / 10
2.1.2 Fedora / 10
2.1.3 Red Hat企业版Linux / 11
2.1.4 SUSE / 11
2.1.5 Ubuntu / 11
2.2 硬件需求 / 12
2.3 安装方案 / 12
2.3.1 单机版 / 12
2.3.2 双启动 / 12
2.3.3 虚拟化 / 15
2.4 DVD 还是激活CD / 15
2.5 安装过程 / 15
2.5.1 磁盘分区 / 16
2.5.2 包的选择 / 17
2.6 资源 / 18
第3章 Linux入门 / 19
3.1 运行Linux——KDE / 19
3.1.1 文件管理器 / 20
3.1.2 shell 窗口 / 20
3.2 Linux属性 / 21
3.3 保护模式架构 / 22
3.3.1 实模式 / 22
3.3.2 保护模式 / 23
3.3.3 平面与分段的存储器模型 / 24
3.3.4 分页 / 24
3.4 Linux进程模型 / 25
3.4.1 fork()函数 / 25
3.4.2 execve()函数 / 27
3.5 Linux文件系统 / 27
3.5.1 文件权限 / 28
3.5.2 “根”用户 / 29
3.5.3 /proc文件系统 / 29
3.5.4 文件系统等级标准 / 30
3.5.5 挂载文件系统 / 32
3.6 系统配置 / 33
3.7 shell / 33
3.8 获得帮助 / 36
3.9 资源 / 37
第4章 主机开发环境 / 38
4.1 交叉开发工具——GNU工具链 / 38
4.1.1 GCC / 38
4.1.2 make / 39
4.1.3 GDB / 40
4.2 安装软件 / 40
4.2.1 DVD上有什么 / 40
4.2.2 安装交叉工具链 / 41
4.2.3 安装根文件系统 / 42
4.3 终端仿真器minicom / 42
4.4 网络 / 44
4.4.1 网络地址 / 44
4.4.2 无线怎么样 / 46
4.4.3 网络文件系统 / 47
4.4.4 普通文件传输协议 / 48
4.5 资源 / 49
第5章 硬件 / 50
5.1 嵌入式硬件 / 50
5.2 ARM单板计算机 / 50
5.3 其他的板怎么样 / 51
5.3.1  BeagleBoard / 51
5.3.2 Gumstix / 52
5.3.3 Raspberry Pi / 53
5.4 设置Mini2440 / 53
5.5 Flash存储器和文件系统 / 54
5.5.1 Flash存储器——NAND
      和NOR / 54
5.5.2 Flash中的根文件系统 / 55
5.6 板的准备工作 / 56
5.6.1 例程 / 56
5.6.2 factory_images / 57
5.6.3 脚本文件 / 57
5.6.4 过程 / 58
5.6.5 最后几步 / 60
5.6.6 哪里会出错 / 61
5.7 boot loader / 61
5.8 资源 / 62
第6章 Eclipse 集成开发环境/ 63
6.1 概述 / 63
6.1.1 插件 / 65
6.1.2 工作台 / 66
6.2 安装 / 67
6.3 使用Eclipse / 67
6.4 C开发环境——CDT / 68
6.4.1 创建一个新工程 / 68
6.4.2 给工程添加源代码 / 69
6.4.3 编程助手 / 70
6.4.4 代码模板 / 71
6.4.5 自动补齐 / 71
6.5 程序 / 71
6.6 生成工程 / 72
6.7 使用CDT调试 / 72
6.7.1 调试视图 / 74
6.7.2 变量视图 / 75
6.7.3 断点视图 / 75
6.7.4 存储器视图 / 75
6.8 完成调试 / 76
6.9 总结 / 76
6.10 资源 / 76
第二部分 交叉开发环境中的应用编程
第7章 从用户空间访问硬件 / 78
7.1 回顾 / 78
7.2 ARM I/O架构 / 78
7.3 我们的第一个程序——
     从Linux访问I/O / 80
7.3.1 创建一个工程 / 80
7.3.2 目标执行环境 / 81
7.4 led 程序 / 82
7.5 一个数据采集的例子 / 84
7.6 资源 / 86
第8章 调试嵌入式软件 / 87
8.1 使用Eclipse进行远程调试 / 87
8.2 thermostat / 91
8.3 主机工作站作为调试环境 / 92
8.4 调试器服务框架(DSF) / 96
8.4.1 安装SSH / 96
8.4.2 为根添加一个口令 / 98
8.4.3 配置RSE / 98
8.4.4 使用RSE调试 / 100
8.5 资源 / 101
第9章 Posix 线程 / 102
9.1 线程 / 103
9.2 同步——互斥量 / 105
9.2.1 互斥量属性 / 106
9.2.2 解决资源共享问题而引入的
问题——优先级倒置 / 107
9.3 通信——条件变量 / 109
9.4 线程终止和取消 / 109
9.5 Pthread实现 / 111
9.6 更新thermostat / 113
9.6.1 Linux设备驱动 / 113
9.6.2 底层I/O API / 114
9.6.3 thermostat.c中需要的改变 / 115
9.7 调试多线程程序 / 116
9.8 资源 / 116
第10章 嵌入式网络 / 117
10.1 Sockets / 117
10.1.1 服务器进程 / 118
10.1.2 客户进程 / 118
10.1.3 socket 属性 / 119
10.2 一个简单的例子 / 119
10.2.1 服务器 / 119
10.2.2 客户 / 120
10.3 远程thermostat / 121
10.4 嵌入式网络服务器 / 123
10.4.1 HTTP的背景 / 123
10.4.2 使用了网络的thermostat / 124
10.4.3 动态网络内容 / 125
10.4.4 表单和POST方法 / 126
10.4.5 生成和尝试 / 126
10.5 一个“真正的”网络服务器——boa / 127
10.6 嵌入式E-mail / 128
10.7 其他应用级协议 / / 131
10.8 资源 / 131
第11章 配置和生成内核 / 132
11.1 开始 / 132
11.1.1 内核版本编号 / 133
11.1.2 内核源树 / 133
11.2 内核makefile / 135
11.3 修补内核 / 135
11.4 配置内核——make config、menuconfig、xconfig / 136
11.4.1 xconfig 选项 / 140
11.4.2 .config 文件 / 140
11.5 表象背后——真正发生了什么 / 141
11.6 生成内核 / 142
11.7 引导新内核 / 143
11.8 资源 / 144
第12章 内核模块和设备驱动 / 145
12.1 内核模块 / 145
12.1.1 一个模块的例子 / 146
12.1.2 破坏内核 / 147
12.1.3 内核模块和GPL / 148
12.1.4 生成内核模块 / 148
12.1.5 模块的作用 / 149
12.2 什么是设备驱动 / 150
12.3 Linux设备驱动 / 151
12.3.1 /dev目录 / 151
12.3.2 底层用户空间I/O API / 152
12.3.3 内部驱动结构 / 152
12.3.4 驱动数据结构 / 152
12.3.5 init()和exit() / 153
12.3.6 open()和release() / 154
12.3.7 read()和write() / 154
12.3.8 生成和运行驱动 / 155
12.4 调试内核代码 / 156
12.4.1 printk / 156
12.4.2 /proc文件 / 157
12.5 处理中断 / 158
12.5.1 注册中断handler / 159
12.5.2 探测中断 / 160
12.5.3 延迟处理——“bottom half” / 161
12.6 将你的驱动生成至内核 / 162
12.7 资源 / 164
第三部分 组件和工具
第13章 BusyBox和Linux初始化 / 166
13.1 BusyBox简介 / 166
13.2 配置和安装BusyBox / 167
13.2.1 BusyBox设置 / 169
13.2.2 小程序 / 169
13.2.3 生成和安装 / 170
13.3 使用BusyBox / 171
13.4 thermostat 显示示例 / 171
13.4.1 ANSI终端Escape 序列 / 172
13.4.2 thermostat 显示 / 172
13.4.3 ncurses库 / 173
13.5 用户空间初始化 / 173
13.5.1 第一步boot loader / 173
13.5.2 u-boot / 173
13.5.3 Linux内核 / 174
13.5.4 init进程 / 174
13.6 资源 / 175
第14章 u-boot boot loader和准备发布 / 176
14.1 u-boot / 176
14.1.1 背景 / 176
14.1.2 安装和配置u-boot / 177
14.1.3 测试一个新的u-boot / 178
14.1.4 通过JTAG重新编程NOR / 178
14.2 创建一个flash文件系统 / 179
14.2.1 关于flash分区的更多考虑 / 180
14.2.2 扁平设备树 / 181
14.3 资源 / 182
第15章 源代码控制——git / 183
15.1 背景 / 183
15.2 git介绍 / 184
15.2.1 文件状态和生命周期 / 186
15.2.2 分支和合并 / 187
15.3 配置git / 188
15.4 图形化git / 189
15.5 资源 / 192
第16章 build工具 / 193
16.1 Buildroot / 193
16.2 开源嵌入式 / 195
16.2.1 开始 / 196
16.2.2 个人观点 / 197
16.3 安卓 / 197
16.3.1 应用开发 / 198
16.3.2 平台开发 / 199
16.4 总结 / 199
16.5 资源 / 200
附录A u-boot命令 / 201
附录B 为什么软件不应该有版权 / 207

教学资源推荐
作者: (美)杰夫瑞 S.比斯利(Jeffrey S.Beasley );乔纳森 D.海默(Jonathan D. Hymer);加里 M.米勒(Gary M.Miller)著
作者: [美]穆哈辛·本奥斯曼 (Mouhacine Benosman) 著
作者: 宋焕明,赵俊霞,周志祥 编
作者: [英]彼得·威尔逊(Peter Wilson)[美]H.艾伦·曼图斯(H.Alan Mantooth)著
参考读物推荐
作者: 王贞炎 编著
作者: 刘歧,赵文杰 编著 武爱敏 审校
作者: 叶国阳 刘铮 徐科军 编著
作者: 彭瑜 刘亚威 王健 等编著