前两年由于部门业务调整,开始转嵌入式Linux开发,虽然之前对于引导程序、内核、文件系统有一定的了解,也做过Linux移植的项目,但对嵌入式Linux移植适配并未形成一个整体的人士。后来无意间发现了这本书,花了几天时间通读了一遍,对于嵌入式Linux系统所涉及的四大元素:工具链、引导加载程序、内核和根文件系统有了更全面的了解。Linux发展到今天,所涉及的知识体系太大,基本上每个主题都可以单独出本书(内核、文件系统、网络、驱动开发、系统监控等等),这本书主要是针对嵌入式Linux移植,所以对于驱动开发、内核实现以及各种编译框架并未进行深入的解析,有需要的可以阅读其他书籍(文章末尾推荐一些其他书籍)。
目前本书已经出到了第三版(我读的是第二版),好像也有人正在翻译第三版,说不定隔段时间就能买到这本书的中文版,我在阅读第二版的时候,机器+手工调整也翻译了一下,主要是为了自己后续二次阅读的时候更方便吧。下面是全书各个章节主要包含的内容(翻译):
第 1 章“开篇”,通过描述嵌入式 Linux 生态系统以及在启动项目时可用的选择来设置场景。
第 2 章“了解工具链”,介绍了工具链的组成,并展示了如何创建用于交叉编译目标板代码的工具链。它描述了从何处获取工具链,并提供了有关如何从源代码构建工具链的详细信息。
第 3 章“引导加载程序”,解释了引导加载程序在将 Linux 内核加载到内存中所扮演的角色,并使用 U-Boot 和 Bareboot 作为示例进行演示。它还介绍了在大多数嵌入式 Linux 系统中对硬件细节进行编码的机制,即设备树。
第 4 章“配置和构建内核”,提供了有关如何为嵌入式系统选择 Linux 内核以及如何配置内核中的设备信息。同时还介绍了如何将 Linux 移植到新硬件。
第 5 章“构建根文件系统”。通过有关如何配置根文件系统的分步指南,介绍了嵌入式 Linux 实现的用户空间及背后的思想。
第 6 章,“选择构建系统”,介绍了两个常用的嵌入式 Linux 构建系统,Buildroot 和 Yocto 项目,它们自动执行前四章中描述的步骤。
第 7 章“创建存储策略”,讨论了管理闪存(包括原始闪存芯片和 EMMC)所带来的挑战。它描述了适用于不同存储设备的文件系统。
第 8 章“现场更新软件”,介绍了部署设备后更新软件的各种方法,包括完全托管的空中下载(OTA)更新。讨论的关键主题是可靠性和安全性。
第 9 章“设备驱动程序接口”,通过简单驱动程序的工作示例描述了内核设备驱动程序如何与硬件交互。它还介绍了从用户空间调用设备驱动程序的各种方法。
第 10 章,“启动 – 初始化程序”,展示了第一个用户空间程序(init)如何启动系统的其余部分。它描述了 init 程序的三个版本,每个版本都适用于不同的嵌入式系统,从 BusyBox init 到 System V init,再到当前最先进的 systemd。
第 11 章“电源管理”,考虑了调整 Linux 以降低功耗的各种方法,包括动态调整频率和电压、选择最佳的空闲状态和系统挂起。目的是使设备在电池充电后能够运行时间更长,且运行温度更低(功率更低)。
第 12 章,“进程和线程”,从应用程序程序员的角度描述嵌入式系统。本章介绍进程和线程、进程间通信和调度策略。
第 13 章“内存管理”,介绍了虚拟内存背后的思想以及如何将地址空间划分为内存映射。它还介绍了如何准确监测内存使用情况以及如何检测内存泄漏。
第 14 章“使用 GDB 调试”,介绍了如何使用 GNU 调试器 GDB 以及调试代理gdbserver 来调试在目标设备上远程运行的应用程序。同时展示了如何扩展这个模型利用 KGDB 和内核调试 stubs 来调试内核代码。
第 15 章“剖析和跟踪”,介绍了可用于监测系统性能的技术,从整个系统开始,然后专注于导致性能不佳的特定区域。它还描述了如何使用 Valgrind 来检查应用程序使用线程同步和内存分配的正确性。
第 16 章,实时编程,提供了 Linux 实时编程的详细指南,包括内核的配置和 PREEMPT_RT 实时内核补丁。以及如何使用内核跟踪工具 Ftrace 测量内核延迟并显示各种内核配置的效果。
其他书籍推荐:
1、Linux内核:
坦诚来说,Linux内核的经典书真不是很建议新手看,需要慢慢啃
《Linux内核设计与实现》、《深入Linux内核架构》
2、Linux应用:
《Linux/UNIX系统编程手册》 书比较新,网上有英文的电子版
《UNIX环境高级编程》 经典书籍,读过第二版
《UNIX网络编程》经典书籍,好多年前看过
3、Linux驱动:
《Linux设备驱动程序》 Jonathan Corbet 内容有点老,但很有阅读的价值
《Linux设备驱动开发详解:基于最新的Linux 4.0内核》 宋宝华 虽然书籍豆瓣评分不高,不过个人感觉还是有参考价值的
《嵌入式Linux设备驱动程序开发指南》 阿尔贝托·利贝拉尔 这本书买了,不过还没看,主要现在不太做技术开发了,但豆瓣评分很高