
本书按“理论联系实践、分阶段循序渐进”的思想将内容分成了5个部分,共11章。第1部分是入门部分,分为2章,主要讲嵌入式系统、嵌入式Linux的发展、简单的实践。第2部分是开发环境的建立,分3章,主要讲U-Boot的建立、交叉编译工具的建立、调试环境
的建立。第3部分是内核的定制,这一部分主要包括进程调度与内存管理2章,其目的为: 一是学习Linux的内核技术,了解内核中的结构、函数,为后一部分嵌入式Linux驱动、应用程序的优化打基础; 二是学习嵌入式Linux内核的定制技术,为今后高端嵌入式Linux设计与应用作准备。第4部分是嵌入式Linux驱动程序的开发,包括驱动的基本技术、USB驱动的开发与CAN总线驱动的开发。第5部分以宇嵌千里眼中的应用程序为例讲嵌入式Linux应用程序的开发。在这5个部分中融合了嵌入式Linux的系统技术。本书的实践配套同济大学嵌入式系统创新实验平台及其操作手册,读者可以边做边学。
诚如Linux的创始人Linus Torvalds 所言: “我对嵌入式市场感兴趣,因为那里会有些别处找不到的特殊用途”。Linux操作系统因为其性能良好、开放、稳定、日益进步的特点与嵌入式系统可定制的要求“一拍即合”。嵌入式Linux被广泛用于各种嵌入式设备中。
然而嵌入式Linux系统的学习是复杂的。其复杂性在于它涉及的知识面宽、理论性和实践性强。在本书中,试图将嵌入式Linux的学习分阶段进行,侧重于理论与实践的结合,强调动手实践。本书将嵌入式Linux的学习分为入门阶段、模块知识学习阶段、系统知识学习阶段与创新开发阶段。
本书的内容安排也体现了上述思想。第1部分是入门部分,分为2章,主要讲嵌入式系统、嵌入式Linux的发展、简单的实践。第2部分是开发环境的建立,分3章,主要讲U-Boot的建立、交叉编译工具的建立、调试环境的建立。第3部分是内核的定制,这一部分主要包括进程调度与内存管理两章。将这一部分安排到这里有两个目的: 一是学习Linux的内核技术,了解内核中的结构、函数,为后一部分学习嵌入式Linux驱动、应用程序的优化打基础; 二是学习嵌入式Linux内核的定制技术,为今后学习高端嵌入式Linux设计与应用做准备。第4部分是嵌入式Linux驱动程序的开发,包括驱动的基本技术、USB驱动的开发与CAN总线驱动的开发。第5部分以“宇嵌千里眼”中的应用程序为例讲嵌入式Linux应用程序的开发。本书目前没有将系统技术单独列出作为一部分,而是将系统技术融合在各章节中,尤其是内核定制、驱动开发与应用程序设计中。本书的实践作业与同济大学嵌入式系统创新实验平台及其操作手册相配套。同时,嵌入式系统创新实验平台及手册支持读者进行创新实践开发。
本书的撰写得到上海宇嵌电子科技有限公司的大力支持: 提供了宇嵌千里眼报警系统案例,授权使用部分相关代码,并对同济大学嵌入式系统创新实验平台及操作实践手册提供了配套服务(http://www.skyenest.com/tongji_platform.html)。
本书在编写过程中得到同济大学“十一五”教材编写资金的支持,并得到清华大学出版社、同济大学软件学院领导及同事的支持。
在本书的编写过程中,范茂志参与了第3章与第10章的部分编写工作,林秀参与了本书的部分编辑工作。
值此本书付梓之际,谨对上述支持者表示衷心感谢。
作为一本教材或者技术类参考书,本书面向的对象为嵌入式Linux系统的学习者、工程师。本书以及配套的创新实验平台、实践操作手册构成一个学习与实践的完整体系。如果这一体系的设计能为读者朋友提供一些帮助,我将甚感欣慰。
非常欢迎读者朋友及同行提出各种意见、建议,在此先致以诚挚谢意!
罗怡桂电子邮箱: yigui.luo@gmail.com2011年4月于上海嘉定汽车城
第1部分嵌入式Linux入门
第1章嵌入式Linux简介
1.1嵌入式系统
1.1.1什么是嵌入式系统
1.1.2嵌入式系统的需求特点
1.2嵌入式Linux
1.2.1Linux与嵌入式Linux
1.2.2嵌入式Linux的现状
小结
实践作业1
推荐阅读1
第2章嵌入式Linux系统的开发过程及简单实践
2.1嵌入式Linux的开发环境
2.2嵌入式Linux系统的开发过程
2.3嵌入式教学创新实验平台简介
2.4实践1
2.5实践2
2.5.1内核编译与下载
2.5.2根文件系统的制作与下载
小结
实践作业2
推荐阅读2
第2部分开发环境的建立
第3章交叉编译环境的建立
3.1什么是交叉编译环境
3.2GCC交叉编译工具链
3.3重建交叉编译器
3.3.1建立工作
3.3.2建立环境变量
3.3.3安装Linux的头文件
3.3.4编译安装Binutils
3.3.5编译安装Gcc的C编译器
3.3.6编译安装库Glibc
3.3.7编译安装Gcc的C、C++编译器
3.3.8测试交叉编译工具链
小结
实践作业3
推荐阅读3
第4章U-Boot
4.1U-Boot项目简介
4.2U-Boot结构
4.3U-Boot的版本选择
4.4编译U-Boot
4.5修改内存配置
4.6配置Flash
4.7驱动E28F128
4.8驱动DM9000
4.9增加命令与应用
4.10从U-Boot到Linux
4.10.1U-Boot向内核传递参数
4.10.2启动内核
小结
实践作业4
推荐阅读4
第5章调试工具
5.1GDB+GDB Server
5.2二进制文件辅助工具
5.3mtrace
5.4hooks
5.5硬件仿真器
小结
实践作业5
推荐阅读5
第3部分内 核 定 制
第6章进程调度
6.1嵌入式Linux进程调度概述
6.2进程的描述
6.3Linux 2.4内核的调度算法
6.4Linux 2.4应用程序中对进程调度的控制
6.5从Linux 2.4调度算法到Linux 2.6调度算法
6.6Linux 2.6调度算法分析
6.6.1静态优先级
6.6.2动态优先级
6.6.3时间片的计算
6.6.4休眠进程与唤醒进程
6.6.5调度的时机
6.6.6Linux 2.6内核中CPU的负载平衡
6.6.7调度策略
6.6.8内核算法的调优
6.7从Linux 2.6调度算法到嵌入式Linux调度
6.7.1关键性混杂实时任务集调度算法
6.7.2最大利用便携设备后备电池的实时任务调度算法
6.7.3基于GUI的交互式嵌入式系统的调度
小结
实践作业6
推荐阅读6
第7章内存管理
7.1Linux内存管理概述
7.2物理内存管理
7.3内核内存管理
7.4虚拟内存管理器
7.5内核虚拟内存管理器
7.6从Linux内存管理到嵌入式Linux内存管理
7.6.1调度协助请页预取
7.6.2主动交换延迟回写
7.6.3改进Buddy系统
小结
实践作业7
推荐阅读7
第4部分驱 动 开 发
第8章驱动开发
8.1基础知识
8.1.1文件与设备
8.1.2虚拟文件系统
8.1.3设备驱动的加载
8.2框架驱动开发
8.3中断使用
8.3.1Linux内核的中断处理机制
8.3.2中断的申请
8.4内存使用
8.4.1分配Slab小块内存
8.4.2分配物理页
8.4.3内核虚拟地址空间分配
8.4.4Bootmem
8.4.5虚拟内存区(VMA)与内存映射
8.5IO及IO映射
8.6时间与时延使用
8.6.1时钟的类型
8.6.2延迟的使用
8.6.3内核定时器
小结
实践作业8
推荐阅读8
第9章USB驱动开发
9.1USB概述
9.2USB总线互连结构
9.3USB的电气接口
9.4USB数据流模型
9.5USB设备通信模流
9.6USB驱动框架
9.7URB的使用
9.8控制消息的传输
9.9批量数据传输
9.10同步数据传输
9.11中断数据传输
9.12嵌入式系统USB设备驱动的实现方案设计
9.12.1传输方式的确定
9.12.2建模
9.12.3数据流分析
9.12.4控制流分析
9.12.5内存使用分析
9.12.6调试方案
9.12.7实现技术
9.12.8模块划分
9.12.9实现
小结
实践作业9
推荐阅读9
第10章CAN总线驱动开发
10.1CAN总线标准概述
10.2CAN总线特点
10.3CAN总线的数据格式
10.4一种CAN总线系统的实现方法
10.5MCP2510器件功能介绍
10.6CAN总线驱动程序的方案设计
10.6.1CAN总线驱动程序的体系结构
10.6.2CAN总线驱动程序建模
10.7CAN总线的Linux驱动程序的实现
10.7.1S3C2410寄存器地址映射
10.7.2CAN总线驱动的入口和出口
10.7.3设置SPI接口
10.7.4MCP2510的初始化
10.7.5MCP2510发送数据和接收数据
10.7.6中断函数
10.7.7读写函数
10.8CAN总线驱动测试程序
小结
实践作业10
推荐阅读10
第5部分应用程序的开发
第11章宇嵌千里眼主控程序开发
11.1嵌入式应用程序的需求特点
11.2宇嵌千里眼应用开发的要求
11.3宇嵌千里眼主控程序开发实践
11.3.1建模
11.3.2控制流分析
11.3.3数据流分析
11.3.4内存使用分析
11.3.5实时性分析
11.3.6进一步确定实现技术
11.3.7模块划分
11.3.8再看实现技术
11.3.9程序实现
小结
实践作业11
推荐阅读11
附录A一种新型Petri Net: 双层变迁定时Petri Net
附录B双层变迁定时Petri Net抽象化