第1章 嵌入式ARM系统开发基础 1
1.1嵌入式ARM系统开发概述 1
1.1.1 ARM系统可执行映像文件格式 1
1.1.2 ARM开发调试工具 2
1.1.3加载地址和运行地址 3
1.2嵌入式ARM系统的启动代码分析 4
1.2.1 ARM上电启动概述 4
1.2.2 ARM上电初始化启动代码分析 5
1.3嵌入式ARM系统的中断系统 10
1.3.1 ARM中断机制代码分析 10
1.3.2 ARM中断服务处理程序的响应过程 13
1.4按键中断实验 15
第2章 嵌入式Linux设备驱动程序开发环境的构建 16
2.1安装虚拟机软件VMware 6.0.2 16
2.2新建虚拟机 17
2.3安装Linux操作系统ubuntu 19
2.4安装VMware tools工具软件 23
2.5网络配置 26
2.6设置软件源服务器 27
2.7安装libncurses5-dev软件包 28
2.8安装交叉编译器arm-linux-gcc 28
第3章 嵌入式Linux内核的裁剪与编译 31
3.1嵌入式Linux内核的本质 31
3.2嵌入式Linux内核源码的组织 32
3.3嵌入式Linux内核的移植与裁剪 34
3.4嵌入式Linux内核配置、编译的基本原理 39
3.5构建嵌入式Linux根文件系统 40
第4章 嵌入式系统BootLoader代码分析与移植 46
4.1嵌入式系统BootLoader功能概述 46
4.1.1嵌入式Linux系统的软件组成及分布 46
4.1.2嵌入式Linux中为什么要有BootLoader 47
4.1.3 BootLoader的功能和选择 47
4.2 u-boot源码分析 48
4.2.1 u-boot源码文件的组成及配置编译 48
4.2.2 u-boot的执行过程及Linux内核加载流程 50
4.2.3 start.s源码文件分析 50
4.2.4 board.c源码文件分析 51
4.3 u-boot中的环境变量 52
4.4 Linux系统的加载过程 53
4.4.1 u-boot命令执行过程 54
4.4.2 bootm的执行流程 55
4.5 u-boot向Linux传递参数的过程 57
4.6 u-boot的移植 58
第5章 嵌入式Linux内核模块与字符设备驱动 61
5.1嵌入式Linux内核模块 61
5.1.1嵌入式Linux内核模块的概念 61
5.1.2嵌入式Linux内核模块编程 61
5.1.3嵌入式Linux内核模块的编译 62
5.1.4嵌入式Linux内核模块的安装与卸载 63
5.1.5直接编译嵌入式Linux内核模块到内核 63
5.2嵌入式Linux字符设备驱动 63
5.2.1嵌入式Linux设备驱动程序的概念 63
5.2.2嵌入式Linux设备管理机制 64
5.2.3嵌入式Linux字符设备驱动程序的主要数据结构分析 65
5.2.4嵌入式Linux字符设备驱动的工作原理 66
5.2.5嵌入式Linux字符设备驱动程序设计实例 68
第6章 嵌入式Linux系统的内存管理 72
6.1虚拟地址和物理地址概述 72
6.2虚拟地址到物理地址转换的基本原理 73
6.3基于ARM S3C2440的GPIO端口地址映射实验 76
6.3.1问题描述 76
6.3.2分析与思路 76
6.4 Linux内核中内存分配和释放函数的用法 77
第7章 嵌入式Linux设备驱动开发的核心技术 78
7.1嵌入式Linux中断处理和定时器 78
7.1.1嵌入式Linux系统中断服务程序的编写 78
7.1.2嵌入式Linux系统硬件定时器的使用 79
7.1.3中断的下半部分 80
7.1.4嵌入式Linux软件定时器的使用 80
7.2嵌入式Linux设备驱动程序中的并发及并发控制 81
7.2.1并发的概念 81
7.2.2嵌入式Linux设备驱动程序中的并发控制方式 82
7.2.3信号量与自旋锁的使用场景 83
7.3嵌入式Linux设备驱动中的阻塞与非阻塞 84
7.3.1概述 84
7.3.2 Linux设备驱动程序中阻塞的工作原理 84
7.3.3进程阻塞访问设备的基本原理 85
7.3.4 Linux设备驱动程序中的阻塞编程 86
7.4嵌入式Linux设备驱动中的异步通知编程 87
7.4.1概述 87
7.4.2 Linux异步通知工作原理 88
7.4.3 Linux异步通知应用的编程方法 90
7.4.4 Linux异步通知驱动的编程方法 91
7.5嵌入式Linux设备驱动中的轮询操作 92
7.5.1概述 92
7.5.2 Linux设备驱动轮询操作的工作原理及源码分析 92
7.5.3 Linux轮询操作的应用层编程 97
7.5.4 Linux轮询操作的驱动层编程 97
第8章 嵌入式Linux平台设备驱动程序开发 99
8.1 Linux设备和设备驱动模型 99
8.1.1 Linux内核中的BUS(总线) 99
8.1.2 Linux内核中的设备 100
8.1.3 Linux内核中的设备驱动 101
8.2 Linux平台设备驱动程序开发过程 103
8.3嵌入式Linux系统中利用mdev自动创建设备文件节点 105
第9章 嵌入式Linux LCD屏驱动程序设计 107
9.1 LCD屏的工作原理概述 107
9.2 LCD屏硬件原理及驱动程序设计 108
9.2.1 TFT LCD屏的显示原理 109
9.2.2 S3C2440 LCD控制器TFT LCD的控制时序分析 110
9.2.3 S3C2440 LCD控制器显示的数据格式 111
9.2.4 S3C2440 LCD控制器的显示数据流程 112
9.2.5 VBPD、VFPD、VSPW和HBPD、HFPD、HSPW的设置 113
9.3嵌入式Linux LCD屏驱动程序框架 114
9.4嵌入式Linux LCD屏驱动源码分析 115
9.4.1 S3c2410fb.c源码分析 116
9.4.2 LCD屏Linux驱动主要数据结构 117
9.4.3 Probe函数处理流程及源码分析 121
9.4.4 Fbmem.c源码分析 124
9.5嵌入式Linux LCD屏驱动的移植 125
第10章 嵌入式Linux触摸屏驱动程序设计 128
10.1触摸屏工作原理概述 128
10.2 S3C2440触摸屏接口及硬件驱动程序设计 129
10.2.1 S3C2440触摸屏控制器接口 129
10.2.2 S3C2440裸机下触摸屏控制器的接口编程 131
10.3嵌入式Linux触摸屏驱动程序框架 133
10.4嵌入式Linux触摸屏驱动的源码分析 134
10.4.1 Linux触摸设备驱动的处理流程 134
10.4.2触摸屏驱动模块的初始化函数s3c2410ts init 135
10.4.3笔针按下中断服务处理程序stylus_updown 137
10.5嵌入式Linux输入子系统的工作原理及实现机制 140
10.5.1 Linux输入子系统的主要数据结构与全局变量 140
10.5.2输入设备的注册流程 145
10.5.3事件处理器的注册流程 146
10.5.4输入事件的报告流程 149
10.5.5应用程序访问输入设备的流程 152
第11章 嵌入式Linux MTD子系统与FLASH驱动程序设计 154
11.1 MTD子系统概述 154
11.2 Linux中Nor FLASH驱动的源码分析 157
11.3 MTD子系统的源码分析 160
11.3.1 MTD子系统源码组织 160
11.3.2 MTD子系统主要数据的结构分析 161
11.4 Nor FLASH芯片手册解读 163
第12章 嵌入式Linux Nand FLASH驱动程序设计 165
12.1 Nand FLASH芯片硬件及接口介绍 165
12.1.1 Nand FLASH存储空间的组织 165
12.1.2 Nand FLASH的硬件接口及读写操作时序 166
12.1.3 S3C2440对Nand FLASH芯片的访问 167
12.2嵌入式Linux下Nand FLASH驱动分析 168
12.2.1 Nand FLASH驱动源码组织 168
12.2.2 Nand FLASH驱动架构 168
12.2.3 Nand FLASH相关操作流程 171
12.2.4 s3c24xx_nand_probe函数分析 172
12.3应用程序对Nand FLASH设备的读/写操作 175
12.3.1 MTD字符设备写Nand FLASH的操作分析 175
12.3.2 s3c2440 nand hwcontrol函数 178
12.3.3 nand command函数 178
第13章 嵌入式Linux 12C总线驱动程序设计 182
13.1 I2C总线概述 182
13.2 S3C2440I2C总线控制器的硬件工作原理 183
13.3 S3C2440I2C控制器的硬件编程 185
13.3.1初始化S3C244012C主控制器 185
13.3.2 I2C总线写AT24C02操作 185
13.3.3 I2C总线读AT24C02操作 187
13.4嵌入式Linux I2C总线驱动架构 188
13.4.1 I2C体系架构的硬件实体 189
13.4.2 I2C驱动的软件实体 189
13.5嵌入式Linux I2C总线驱动源码的组织 190
13.6嵌入式Linux I2C总线控制器驱动的程序设计及源码分析 190
13.6.1 I2C总线控制器驱动的主要数据结构 191
13.6.2写AT24C02一个字节操作 192
13.6.3 I2C总线驱动框架 192
13.6.4 I2C总线控制器设备驱动探测函数probe的工作流程 194
13.6.5 i2c_add_adapter处理流程分析 196
13.6.6定义和实现I2C适配器的底层操作接口Algorithm 197
13.7嵌入式Linux I2C设备驱动程序的设计及源码分析 198
13.7.1 I2C设备驱动程序框架 200
13.7.2 i2c add driver函数 203
13.7.3 at24c02b_probe函数 203
13.8应用程序通过I 2C设备驱动写AT24C02一个字节的流程 204
第14章 嵌入式Linux网卡驱动程序设计 207
14.1概述 207
14.2 DM9000网络芯片与S3C2440的硬件原理图 207
14.3 DM9000A网卡芯片内部寄存器的访问 208
14.4 DM9000数据发送/接收的流程 209
14.5嵌入式Linux DM9000网卡驱动的框架及源码分析 210
14.5.1 DM9000设备 211
14.5.2 DM9000设备驱动 211
14.5.3 DM9000平台设备驱动的工作流程 212
14.5.4应用层网络应用程序的操作 215
第15章 嵌入式Linux USB设备驱动程序设计 230
15.1 USB通信系统概述 230
15.2 USB通信系统的拓扑结构图 230
15.3 USB通信的分时复用技术 231
15.4 USB通信系统的基本概念 231
15.5 USB通信的数据格式 232
15.5.1域 233
15.5.2包 233
15.5.3事务 234
15.5.4传输 236
15.5.5 USB标识域(PID) 236
15.6 USB设备的枚举过程 237
15.7 USB设备端USB通信固件的程序设计 239
15.7.1 USB芯片CY7C68013概述 239
15.7.2 EZ-USB固件程序的启动模式 242
15.7.3 EZ-USB芯片的中断系统 242
15.7.4 USB固件程序的功能 244
15.7.5 USB固件程序的框架及源码分析 244
15.8嵌入式Linux USB驱动程序框架 246
15.9嵌入式Linux USB主控制器驱动的源码分析 247
15.9.1 S3C2440 USB主控制器平台设备驱动的源码分析 248
15.9.2 USB主机驱动枚举USB设备的过程 250
15.10嵌入式Linux USB设备驱动的程序设计方法 255