章节介绍
第一章,“导引”,简要介绍了Linux被迅速应用在嵌入式环境的驱动因素,介绍了与嵌入式Linux相关的几个重要的标准和组织。
第二章,“第一个嵌入式经历”,介绍了与后几章所构建的嵌入式Linux相关的许多概念。
第三章,“处理器基础”,我们提出一个着眼于更流行的用来搭建嵌入式Linux系统的处理器和平台。我们检查并选择了很多主要处理器生产厂商产品。所有这些产品的架构都与现在的处理器很相似。
第四章,“Linux内核:一个不同的观点”从一个微差异的观点检查Linux内核。我们不关注内核理论和内部,我们着眼于它的结构,设计以及构建重点,学习你认为重要的内容,这其中包括内核构建系统的细节。
第五章,“内核初始化”,详细描述Linux处理器初始化处理过程。你将学习到体系结构和独特的bootloader(引导装载程序)镜像组成是如何与下载到Flash并且通过嵌入式bootloader启动的内核本身的镜像是相连接的。本章学习到的知识将帮助你为你的嵌入式设备定制嵌入式内核。
第六章,“系统初始化”,继续详细描述初始化过程的检查。当嵌入式内核已经完成了它自己的初始化,应用程序继续以预定的方式初始化。学习完本章,你已经学会了定制你自己的用户区启动序列的知识。
第七章,“Bootloaders”,作为一个在嵌入式Linux系统中引导装载程序的角色。我们查看流行的开放源码U-Boo并且提出了一个移植的例子。我们简单介绍现在使用的其它的Bootloader,让你能够为你的特殊装备提供一个合理的选择。
第八章,“设备驱动基础”,介绍了Linux设备驱动模型并且提供了强大的后台启动设备驱动。在本章的最后列出了额外阅读的建议。
第九章,“文件系统”,列举了目前嵌入式系统中使用的一些流行的文件系统,包括闪存设备上通常用的JFFS2文件系统。这一章还简要介绍了如何创建自己的文件系统映像,这也是嵌入式Linux开发人员所面临的一项艰巨任务。
第十章,“MTD子系统”,介绍了MTD(内存技术设备)子系统。MTD是Linux文件系统和硬件内存设备(尤其是闪存)之间一种非常有效的抽象层。
第十一章,“BusyBox”,介绍了BusyBox,它是我们构建小型嵌入式系统最常用的工具。这一章讲述如何根据特定需求对BusyBox进行配置和构建,随后介绍了仅使用BusyBox环境完成系统初始化的全过程。附录C列举了最新版本BusyBox的命令。
第十二章,“嵌入式开发环境”,详细介绍了典型交叉开发环境的特殊需求。这一章所介绍的一些技术能有效地提高嵌入式开发人员的工作效率,例如强大的NFS根目录挂载开发配置。
第十三章,“开发工具”,检查了许多有用的开发工具,介绍了gdb调试技术,包括内核转储分析的内容。这一章里面许多工具被提出来并且做出介绍,甚至于举出了一些例子,比如strace,ltrace,top,ps以及内存分析器mtrace,dmalloc。本章最后总结了二进制程序的说明,包括强大的readelf的效率。
第十四章,“内核调试技术”,提供一个详细的调试Linux内核的技术的检查。我们介绍内核调试器KGDB的使用,提供许多gdb调试器和KGDB调试器的组合使用技术。同样包括一份使用硬件JTAG调试器的使用说明,以及一些当你内核无法启动时分析失败原因的技巧。
第十五章,“调试嵌入式Linux应用程序”,将调试内容从内核转移到应用程序。我们继续建立基于先前两章的gdb例子,并且我们提供了多线程和多进程的调试技术。
第十六章,“移植Linux”,介绍你自定义的Linux的移植问题。我们跑一个简单的例子,强调在自定义的PowerPC上生产一个工作的Linux内核的步骤。介绍几个重要的概念已经让许多Linux内核移植新手步入陷阱。连同在十三章十四章提出的的技术,在你读完这一章之后,你应该准备好处理你自己定制板端口的准备了。
第十七章,“Linux和实时”,提供一个或多个用于嵌入式Linux的令人激动的开发环境的说明:通过CONFIG_RT选项配置实时性,我们采用实时性可用的特性以及他们能够如何被用在设计上,我们同样介绍测量应用程序延迟的技术。
第十八章,“通用串行总线”,以简单易懂的语言描述了USB子系统。我们介绍了一些概念和USB拓扑结构,接着给出了几个USB配置的例子。我们会详细分析sysfs的作用和USB,以帮助你理解这个功能强大的系统。我们还会介绍计费对于理解USB和解决USB故障有帮助的工具。
第十九章,“udev”,解密这个强大的系统配置工具udev。我们分析udev的默认行为,并以此为基础来理解如何对它进行定制。我们会给出几个现实生活中的例子。对于那些BusyBox的使用者,我们会考察BusyBox自带的mdev工具。
感谢
我时常惊讶开源开发者的热心,我总是以谦逊的态度对待我们协会里那些才能高于我的人。在这个项目过程中,我接触到许多Linux界以及开源界的人,并向他们咨询问题。许多问题都能够得到及时的回答。排名不分先后,我想对下面这些乐于回答我问题的Linux界和开源界的人表达我的感激之情。
Dan Malek在第二章“你的第一个嵌入式经历”的某些内容中给了我灵感。
DanKegel 和Daniel Jacobowitz耐心的回答我工具链的问题。
ScottAnderson在第十四章“内核调试技术”中提供了gdb宏指令的新颖想法。
BradDixon 通过他自己继续挑战以及扩大我的技术版本。
JimLewis 提供了MTD(译者:配置存储设备,使Linux可以读取闪存卡)方面的内容和建议。
ChrisHallinan
关于作者
Christopher Hallinan是MontaVista公司的现场应用工程师(译者:FAE),生活与工作在马萨诸塞州,拥有25年以上的网络和通信行业经验,做过多种产品的开发工作,在软件接口方面的深厚的开发背景。加盟MontaVista之前,Chris是一位Linux顾问,拥有4年Linux系统移植、设备驱动和bootloader开发经验,在U-Boot(一个流行的bootloader)项目中做出了杰出的贡献。在弄Linux之余,他喜欢唱歌,表演。