(特价书)嵌入式Linux编程
基本信息
- 原书名:Mastering Embedded Linux Programming
- 作者: (英)克里斯·西蒙兹(Chris Simmonds)
- 译者: 王春雷 梁洪亮 朱华
- 丛书名: Linux/Unix技术丛书
- 出版社:机械工业出版社
- ISBN:9787111561286
- 上架时间:2018-1-23
- 出版日期:2017 年4月
- 开本:16开
- 版次:1-1
- 所属分类:计算机 > 计算机组织与体系结构 > 嵌入式计算机
计算机 > 操作系统 > Linux

内容简介
计算机书籍
《嵌入式Linux编程》引导你遍历整个嵌入式linux产品的周期,并提供在每个阶段可用组件和选项的深入描述。首先,你将学习关于工具链、引导加载程序、Linux内核,以及如何配置根文件系统。然后,你将学习如何使用两个常用的构建系统,即Buildroot和Yocto项目,以加快和简化开发过程。在这个坚实的基础上,下面的章节考虑如何佳地使用rawNAND/NOR闪存和托管闪存eMMC芯片,包括增加器件寿命的机制以及进行可靠的现场更新。然后,我们将探讨POSIX线程的使用,这对终设备的响应能力和性能有着很大的影响。本书的结尾部分探讨使用perf和ftrace剖析和跟踪应用程序以及内核代码的技术。
目录
推荐序
审校者简介
前言
第1章 概述 1
1.1 选择合适的操作系统 2
1.2 参与者 3
1.3 项目生命周期 4
1.4 开放源码 5
1.5 嵌入式Linux系统硬件 6
1.6 本书使用的硬件 7
1.7 本书使用的软件 9
1.8 总结 9
第2章 学习工具链 10
2.1 工具链是什么 10
2.2 工具链类型:本地工具链和交叉工具链 11
2.3 选择C库 13
2.4 寻找工具链 14
2.5 工具链解析 17
2.6 工具链中的其他工具 20
前言
Linux的优势来源于它的开源模型,它鼓励代码共享。这意味着,具有众多背景并且经常由不同竞争公司雇用的软件工程师们,可以合作创建最新的操作系统内核并且跟踪硬件开发。这样一个代码库,可以对上至最大的超级计算机下至手表提供支持。Linux只是操作系统的一个组件。要创建一个工作系统,还需要许多其他组件,从基本的工具,如命令外壳,到具有Web内容并且与云服务通信的图形用户界面。Linux内核与众多其他的开源组件一起,可以构建一个在广泛的领域中发挥作用的系统。
然而,灵活性是一把双刃剑。尽管它可以针对一个特定问题给系统设计师提供广泛的备选解决方案,但是它也提出了这样的问题,即需要知道哪个方案是最好的选择。本书的目的是详细描述如何使用免费的开源项目构建一个嵌入式Linux系统,以生成一个健壮、可靠、高效的系统。基于作者作为一名咨询顾问和培训师的多年经验,本书将使用实例来说明最佳实践。
本书内容
本书是按典型的嵌入式Linux项目的生命周期线组织的。前6章介绍如何建立项目,组织、Linux系统,以及选择合适的Linux构建系统。下一步,到达需要对系统架构和设计选择做出某些关键决策的阶段,包括闪存、设备驱动程序和init系统。接着,是利用已构建的嵌入式平台编写应用程序的阶段,其中有两章是关于进程、线程和内存管理的。最后,来到调试和优化平台的阶段,这是在第12章和第13章讨论的。最后一章描述如何为实时应用程序配置Linux。
第1章通过描述系统设计师在项目开始时的可行选择来设置场景。
第2章描述工具链的组件,特别是交叉编译。本章描述从何处获取一个工具链,并且提供从源代码构建工具链的细节。
第3章以U-Boot和Bareboot为例,解释引导加载程序在初始化设备硬件中的作用。本章还描述设备树,这是一种在许多嵌入式系统中使用的硬件配置编码方式。
第4章提供关于如何针对一个嵌入式系统选择Linux内核以及为设备内部硬件配置Linux内核的信息。本章还包括如何将Linux移植到新的硬件。
第5章通过一个关于如何配置根文件系统的分步指南,介绍关于嵌入式Linux实现的用户空间部分所隐含的思想。
第6章包括两个嵌入式Linux构建系统,通过构建系统可以自动化前面4章描述的步骤,并且总结本书第一部分。
第7章讨论闪存管理所引起的挑战,包括raw f?lash芯片和嵌入式MMC或eMMC封装。本章描述适用于每种技术类型的文件系统。本章还包括如何现场更新设备固件的技术。
第8章通过一个简单的驱动程序实例描述内核设备驱动程序如何与硬件交互。本章还描述从用户空间调用设备驱动程序的各种方法。
第9章说明第一个用户空间程序init如何启动系统的其余部分。本章描述init程序的三个版本,每个版本适用于一组不同的嵌入式系统,从BusyBox init到systemd复杂性递增。
第10章从应用程序员的角度描述嵌入式系统。本章讨论进程和线程、进程间通信和调度策略。
第11章介绍虚拟内存背后的思想,以及如何将地址空间划分为内存映射。本章还介绍如何检测正在使用的内存和内存泄漏。
第12章介绍如何使用GNU调试器GDB,以交互方式调试用户空间和内核代码。本章还描述内核调试器kdb。
第13章涵盖可用于测量系统性能的技术,从全系统分析开始,然后聚焦特定的区域,该区域通常是造成性能不佳的瓶颈。本章还描述Valgrind工具,用于检查应用程序是否正确使用线程同步和内存分配。
第14章提供关于Linux实时编程的详细指南,包括内核配置和实时内核补丁,还提供关于测量实时延迟的工具描述。本章还包括关于如何通过锁定内存来减少页面故障数量的信息。
本书所需配套环境
序言
嵌入式Linux具有其他嵌入式系统所不具备的优势。首先,Linux是开放源代码的,不存在黑箱技术,遍布全球的众多Linux开发者提供强大技术支持;其次,Linux的内核小、效率高,内核的更新速度很快;再次,Linux是一个跨平台的系统,适应于多种CPU和硬件平台,而且性能稳定,可高度定制,开发和使用非常方便;最后,Linux内核对于TCP/IP协议簇具有完备的支持,扩展性强,非常适合于网络设备的开发和应用。
本书遵循典型的嵌入式Linux项目生命周期过程组织,全面地介绍了嵌入式Linux的编程技术。本书作者是一名具有多年嵌入式Linux开发经验的咨询顾问和培训师。本书详细描述了如何使用免费的开放源码项目构建一个健壮、可靠、高效的嵌入式Linux系统,并且使用实例来说明最佳实践。本书前6章介绍如何建立项目,组织Linux系统,以及选择合适的Linux构建系统。接着讨论系统架构和设计选择,包括闪存、设备驱动程序和init系统,以及如何利用已构建的嵌入式平台编写应用程序。最后,介绍如何调试和优化,以及如何为实时应用程序配置Linux。
本书由王春雷组织翻译,梁洪亮、朱华等参与了本书的翻译、校对等工作。译者在翻译的过程中,得到了机械工业出版社编辑的支持和帮助,在此深表感谢。限于时间以及译者水平和经验的不足,译文中难免存在一些不当之处,恳请读者提出宝贵的意见。
译者
媒体评论
正如我自己在过去十年中所做的,你有可能描绘出自己通向嵌入式Linux世界的方式,但是我很高兴地看到像克里斯这样的人士,将许多有用的主题聚焦在一起,汇总为本书,给读者提供了一个很好的学习嵌入式Linux的平台。当我开始学习的时候,当然希望可以将本书作为指导!
很显然,我对于Yocto项目有着自己的个人见解,这也是我的主要贡献并且试图使得嵌入式Linux世界有所不同。它的核心目标之一是尝试并且使得人们在构建嵌入式Linux系统时,事情能变得更加简单。我们已经取得了一些成功,但是还有一些领域仍然需要继续探索。我们不断尝试简化学习的门槛从而让更多的人参与进来,使技术更容易获得和采用。
在写这本书时,克里斯也在为同样的目标努力。我希望你喜欢这本书,喜欢Linux,最终我们将会看到你成为这个充满活力的开源社区的一部分,该社区也同样包含着你即将学习的众多元素。
Richard Purdie
Yocto项目架构师,Linux基金会会员