《嵌入式Linux基础教程(第2版)》试读:前  言

虽然讲Linux的好书很多,但是本书汇集了专门针对嵌入式Linux开发人员的各方面信息和建议。实际上,有关Linux内核、Linux系统管理等方面的优秀书籍已经有很多了。本书也参考了我认为在同类书籍中最好的几本。 本书的很多内容来自实际的问题,有些问题是我作为嵌入式Linux顾问时一些开发工程师提出的,还有些问题是我直接参与商业嵌入式Linux开发时遇到的。 嵌入式Linux会给经验丰富的软件工程师带来一些独特的挑战。首先,那些有多年老式实时操作系统(Real Time Operating System,RTOS)开发经验的工程师会发现,他们的思维习惯很难从旧的环境转换到Linux;其次,经验丰富的应用程序开发人员常常难以理解多种开发环境的相对复杂性。 虽然这是一本面向嵌入式Linux开发初学者的基础教程,但我相信即使是经验丰富的嵌入式Linux开发人员也能从中获益,书中包含了我多年积累的实用建议和技巧。 给实际的嵌入式开发人员的实用建议 本书介绍了嵌入式工程师怎样才能迅速掌握嵌入式Linux环境的新知识。书中没有重点讲解Linux内核原理,而是在讲解内核的章节侧重从项目角度介绍内核。你可以阅读专门介绍内核原理的优秀图书来了解相关知识。你可以从本书学到内核源码树的组织和布局,了解组成内核镜像的二进制组件和加载它们的方法,以及它们在嵌入式系统中的作用。 在本书中,你会学到Linux内核构建系统的工作原理,以及怎样将满足项目需求的具体变化融合到系统中。你会了解到Linux系统初始化的细节,包括内核空间初始化和用户空间初始化。你还能看到很多对嵌入式项目有益的建议和技巧,涵盖引导加载程序、系统初始化、文件系统和闪存,以及高级的内核与应用程序调试技术。第2版中新增了很多内容,很多章节都有更新,比如讲开源构建系统、USB和udev的几章都是新的,而且有相当篇幅探讨如何在嵌入式Linux项目中配置和使用这些复杂的系统。 目标读者 本书需要读者具有一定的C语言编程基础,对局域网和因特网有基本的了解,理解IP地址的概念以及IP地址在简单局域网中的用法,还需要理解十六进制和八进制编码方式以及它们常见的用法。 本书也涉及一些C语言编译和链接中较为深入的概念,因此你要是能粗略复习一下C语言链接器的概念就更好了。同时,了解GNU make操作和语法对于阅读本书也很有帮助。 本书不是什么 本书不是一本详细介绍硬件的指南。硬件设备种类繁多是嵌入式开发者所面临的一大困难。集成了一些外围设备的现代32位处理器,其用户手册动辄就有3000页。没有捷径可走。作为程序员,要想理解硬件设备就必须花费大量时间研读硬件数据手册和参考指南,同时要花费更多的时间针对这些硬件设备编写和测试代码。 这也不是一本讲述Linux内核或内部原理的书。本书不会深入讨论用来实现Linux虚拟内存管理策略和过程的内存管理单元(MMU)。已经有许多关于这个主题的优秀图书了,建议你读一读每章后面的“补充阅读建议”。 排版约定 命令和代码语句使用Courier New字体。用户输入的命令使用加粗的Courier New字体。新名词和重要概念使用楷体加以强调。 路径名前面有3个点表示这是大家熟知但未明确指定的顶层目录。上下文不同,顶层目录也会不同,但一般都是指顶层的Linux源码目录。例如,…/arch/powerpc/kernel/setup_32.c指位于Linux源码树体系结构分支中的文件setup_32.c。实际的文件路径有可能是~/sandbox/linux.2.6.33/arch/ power/kernel/setup_32.c。 本书结构 第1章简要介绍了促使Linux迅速应用于嵌入式环境的因素,同时也介绍了与嵌入式Linux相关的几个重要标准和组织。 第2章介绍了很多嵌入式Linux相关的概念,这些概念是后续几章的基础。 第3章概述了几种较流行的用于搭建嵌入式Linux系统的处理器和平台,介绍了几款主要处理器厂商的重要产品,涉及所有主要的处理器体系结构。 第4章从另一角度探讨了Linux内核。这里没有重点讲解内核理论或其内部原理,只是介绍了内核的结构、布局和构建结构,目的是使读者从一开始就能以自己的方式学习这个庞大的软件工程项目。更重要的是,要知道哪些内容是必须重点关注的。这一章还详细讲解了内核构建系统。 第5章详细说明了Linux内核的初始化过程:把与体系结构和引导加载程序相关的镜像组件拼接成适合下载到闪存的内核镜像,最终通过嵌入式系统的引导加载程序启动。这一章的知识将帮助你定制Linux内核,使之满足你自己的嵌入式应用的需求。 第6章继续详细介绍初始化过程。当Linux内核完成自身的初始化后,应用程序将根据预先确定的方式继续初始化过程。读完这一章,你就具备了定制用户空间应用程序启动顺序的知识。 第7章主要介绍引导加载程序及其在嵌入式Linux系统中的作用。这一章以现在流行的开源引导加载程序U-Boot为例说明了移植的概念;还简要介绍了其他几种现在使用的引导加载程序,以便用户有特殊需求时可以有多种选择。 第8章介绍了Linux设备驱动程序模型,提供了很多开发设备驱动程序的背景资料,这些资料都在每章结尾的“补充阅读建议”中列出了。 第9章列举了目前嵌入式系统中使用的一些流行的文件系统,包括闪存设备上最常用的JFFS2文件系统。这一章还简要介绍了如何创建你自己的文件系统镜像,这也是嵌入式Linux开发人员所面临的一项艰巨任务。 第10章介绍了MTD(Memory Technology Device,内存技术设备)子系统。MTD是Linux文件系统和硬件内存设备(尤其是闪存)之间一种非常有效的抽象层。 第11章介绍了BusyBox,它是构建小型嵌入式系统最常用的工具。这一章讲述如何根据特殊需求来配置和构建BusyBox,随后介绍了仅使用BusyBox环境完成系统初始化的全过程。附录A列举了最新版本BusyBox提供的命令。 第12章详细介绍了典型交叉开发环境的特殊需求。这一章所介绍的一些技术能有效地提高嵌入式开发人员的工作效率,例如强大的NFS根目录挂载开发配置。 第13章介绍了一些有用的开发工具。这一章介绍了使用gdb进行调试,包括核心转储分析;并通过示例介绍了strace、ltrace、top和ps,以及内存性能评测工具mtrace和dmalloc。这一章最后介绍了几个更重要的二进制实用工具,如强大的readelf程序。 第14章深入探讨了很多Linux内核的调试技术,介绍了内核调试器KGDB的用法,提出了许多gdb和KGDB组合使用的调试技巧。这一章涉及的内容还包括硬件JTAG调试器的用法,以及当内核无法启动时的一些故障分析技巧。 第15章把调试环境从内核转移至应用程序。这一章继续完善前两章用到的gdb示例,讲述了多线程和多进程的调试技巧。 第16章取代了第1版的第16章(移植Linux)。那一章的内容已经过时了,如果要在现代内核中恰当地讨论其主题,则需要专门写一本书。我觉得你会对新版的第16章有兴趣的,这一章涵盖了常用的构建完整嵌入式Linux发行版的构建系统。我们会介绍OpenEmbedded,它已经在商业和其他开源项目中获得了极大的关注。 第17章介绍了嵌入式Linux中一个令人激动的发展:通过PREEMPT_RT选项来配置系统的实时性。这里介绍的特性通过RT选项得以实现,同时还介绍了如何在设计中使用这些特性。这一章也介绍了衡量应用程序配置延时的技巧。 第18章以简单易懂的语言描述了USB子系统。我们介绍了一些概念和USB拓扑结构,接着给出几个USB配置的例子。我们会详细分析sysfs和USB的作用,以帮助你理解这个功能强大的系统。我们还会介绍几个有助于理解USB和解决USB故障的工具。 第19章解密了udev这个强大的系统配置工具。我们分析udev的默认行为,并以此为基础来理解如何对它进行定制。我们会给出几个实际的例子。对于BusyBox的使用者,我们会考察BusyBox自带的mdev工具。 本书附录包含U-Boot配置命令、BusyBox命令、SDRAM接口注意事项、开源开发者的资源、BDI-2000调试器的配置文件范例。BDI-2000是目前很流行的硬件JTAG调试器。 边看边做 如果你能边看书边在你喜欢的Linux工作站上动手实验,将会从书中得到最大的收获。你可以找一台较旧的x86计算机完成嵌入式系统实验。如果有条件能连接其他体系结构的单板计算机进行实验就更好了。BeagleBorad开发板是一个可以进行实验的物美价廉的平台,书中的好几个例子都基于这个平台。通过学习这个大型代码库(Linux内核)的布局和组织结构,你将获益良多,并且能够在研究内核和边学边做的过程中获得大量的知识和经验。 看一下本书使用的代码并试着理解书中的示例,要使用不同的设置方案、配置选项和不同的硬件设备进行实验。除可获得丰富的知识,还充满了乐趣!如果你也这么想,请登录本书网站www.embeddedlinuxprimer.com免费注册一个账号,添加些内容和评论,在这个逐步壮大的Linux社区中分享你自己的成功故事和解决方案。你分享的内容会帮助其他人学习。这是一项不断完善的工作,你的参与会使其成为一个有价值的社区资源。 GPL版权声明 本书使用的部分开源代码的版权归很多个人或公司所有。复制代码遵循了GPL,即GNU公共许可。

>嵌入式Linux基础教程(第2版)

嵌入式Linux基础教程(第2版)
作者: [美] Christopher Hallinan
副标题: 嵌入式Linux基础教程
原作名: Embedded Linux Primer:A Practical
isbn: 711527827X
书名: 嵌入式Linux基础教程(第2版)
页数: 454
译者: 周鹏
定价: 89.00元
出版社: 人民邮电出版社
装帧: 平装
出版年: 2012-5