第1部分 嵌入式Linux入门 3
第1章 嵌入式Linux简介 3
1.1嵌入式系统 3
1.1.1什么是嵌入式系统 3
1.1.2嵌入式系统的需求特点 4
1.2嵌入式Linux 5
1.2.1 Linux与嵌入式Linux 5
1.2.2嵌入式Linux的现状 5
小结 6
实践作业1 6
推荐阅读1 6
第2章 嵌入式Linux系统的开发过程及简单实践 7
2.1嵌入式Linux的开发环境 7
2.2嵌入式Linux系统的开发过程 8
2.3嵌入式教学创新实验平台简介 9
2.4实践1 9
2.5实践2 10
2.5.1内核编译与下载 10
2.5.2根文件系统的制作与下载 12
小结 12
实践作业2 12
推荐阅读2 12
第2部分 开发环境的建立 15
第3章 交叉编译环境的建立 15
3.1什么是交叉编译环境 15
3.2 GCC交叉编译工具链 15
3.3重建交叉编译器 15
3.3.1建立工作目录 16
3.3.2建立环境变量 16
3.3.3安装Linux的头文件 17
3.3.4编译安装Binutils 18
3.3.5编译安装Gcc的C编译器 19
3.3.6编译安装库Glibc 19
3.3.7编译安装Gcc的C、C++++编译器 20
3.3.8测试交叉编译工具链 21
小结 21
实践作业3 21
推荐阅读3 22
第4章 U-Boot 23
4.1 U-Boot项目简介 23
4.2 U-Boot结构 23
4.3 U-Boot的版本选择 24
4.4编译U-Boot 24
4.5修改内存配置 25
4.6配置Flash 25
4.7驱动E28F128 28
4.8驱动DM9000 28
4.9增加命令与应用 33
4.10从U-Boot到Linux 34
4.10.1 U-Boot向内核传递参数 35
4.10.2启动内核 37
小结 39
实践作业4 40
推荐阅读4 40
第5章 调试工具 41
5.1 GDB+GDB Server 41
5.2二进制文件辅助工具 42
5.3 mtrace 45
5.4 hooks 46
5.5硬件仿真器 48
小结 48
实践作业5 48
推荐阅读5 48
第3部分 内核定制 51
第6章 进程调度 51
6.1嵌入式Linux进程调度概述 51
6.2进程的描述 51
6.3 Linux 2.4内核的调度算法 55
6.4 Linux 2.4应用程序中对进程调度的控制 56
6.5从Linux 2.4调度算法到Linux 2.6调度算法 57
6.6 Linux 2.6调度算法分析 57
6.6.1静态优先级 60
6.6.2动态优先级 60
6.6.3时间片的计算 61
6.6.4休眠进程与唤醒进程 62
6.6.5调度的时机 62
6.6.6 Linux 2.6内核中CPU的负载平衡 63
6.6.7调度策略 64
6.6.8内核算法的调优 64
6.7从Linux 2.6调度算法到嵌入式Linux调度 65
6.7.1关键性混杂实时任务集调度算法 65
6.7.2最大利用便携设备后备电池的实时任务调度算法 66
6.7.3基于GUI的交互式嵌入式系统的调度 69
小结 69
实践作业6 70
推荐阅读6 70
第7章 内存管理 72
7.1 Linux内存管理概述 72
7.2物理内存管理 73
7.3内核内存管理 75
7.4虚拟内存管理器 78
7.5内核虚拟内存管理器 81
7.6从Linux内存管理到嵌入式Linux内存管理 82
7.6.1调度协助请页预取 83
7.6.2主动交换延迟回写 84
7.6.3改进Buddy系统 85
小结 85
实践作业7 86
推荐阅读7 86
第4部分 驱动开发 89
第8章 驱动开发 89
8.1基础知识 89
8.1.1文件与设备 89
8.1.2虚拟文件系统 89
8.1.3设备驱动的加载 90
8.2框架驱动开发 91
8.3中断使用 92
8.3.1 Linux内核的中断处理机制 92
8.3.2中断的申请 93
8.4内存使用 95
8.4.1分配Slab小块内存 95
8.4.2分配物理页 97
8.4.3内核虚拟地址空间分配 98
8.4.4 Bootmem 98
8.4.5虚拟内存区(VMA)与内存映射 100
8.5 IO及IO映射 101
8.6时间与时延使用 102
8.6.1时钟的类型 102
8.6.2延迟的使用 104
8.6.3内核定时器 106
小结 107
实践作业8 107
推荐阅读8 108
第9章 USB驱动开发 109
9.1 USB概述 109
9.2 USB总线互连结构 109
9.3 USB的电气接口 109
9.4 USB数据流模型 110
9.5 USB设备通信模流 111
9.6 USB驱动框架 115
9.7 URB的使用 120
9.8控制消息的传输 125
9.9批量数据传输 127
9.10同步数据传输 128
9.11中断数据传输 128
9.12嵌入式系统USB设备驱动的实现方案设计 129
9.12.1传输方式的确定 129
9.12.2建模 131
9.12.3数据流分析 132
9.12.4控制流分析 134
9.12.5内存使用分析 134
9.12.6调试方案 135
9.12.7实现技术 135
9.12.8模块划分 135
9.12.9实现 136
小结 137
实践作业9 137
推荐阅读9 137
第10章 CAN总线驱动开发 138
10.1 CAN总线标准概述 138
10.2 CAN总线特点 138
10.3 CAN总线的数据格式 139
10.4一种CAN总线系统的实现方法 141
10.5 MCP2510器件功能介绍 141
10.6 CAN总线驱动程序的方案设计 142
10.6.1 CAN总线驱动程序的体系结构 142
10.6.2 CAN总线驱动程序建模 143
10.7 CAN总线的Linux驱动程序的实现 144
10.7.1 S3C2410寄存器地址映射 144
10.7.2 CAN总线驱动的入口和出口 145
10.7.3设置SPI接口 148
10.7.4 MCP2510的初始化 150
10.7.5 MCP2510发送数据和接收数据 153
10.7.6中断函数 154
10.7.7读写函数 154
10.8 CAN总线驱动测试程序 156
小结 158
实践作业10 158
推荐阅读10 158
第5部分 应用程序的开发 161
第11章 宇嵌千里眼主控程序开发 161
11.1嵌入式应用程序的需求特点 161
11.2宇嵌千里眼应用开发的要求 161
11.3宇嵌千里眼主控程序开发实践 162
11.3.1建模 162
11.3.2控制流分析 162
11.3.3数据流分析 163
11.3.4内存使用分析 164
11.3.5实时性分析 164
11.3.6进一步确定实现技术 164
11.3.7模块划分 165
11.3.8再看实现技术 165
11.3.9程序实现 167
小结 171
实践作业11 171
推荐阅读11 172
附录A一种新型Petri Net:双层变迁定时Petri Net 173
附录B双层变迁定时Petri Net抽象化 181