第1章 嵌入式Linux系统简介 1
1.1 嵌入式与Linux系统概述 1
1.1.1 Linux操作系统及其发展 1
1.1.2 Linux发行版本 2
1.2 Windows与Linux文件系统的异同 4
1.2.1 Linux文件系统类型 4
1.2.2 Windows与Linux文件系统的相同点 5
1.2.3 Windows与Linux文件系统的不同点 5
1.3 Linux文件类型与属性 7
1.3.1 Linux文件类型 7
1.3.2 Linux文件属性 7
1.4 嵌入式Linux常用命令及工具 8
1.4.1 Linux常用命令 8
1.4.2 嵌入式Linux常用工具 9
小结 10
第2章 搭建嵌入式Linux学习环境 12
2.1 硬件开发平台 12
2.1.1 mini2440开发板硬件资源 12
2.1.2 外围设备 14
2.2 软件开发平台搭建 14
2.2.1 tftp服务器与nfs服务器搭建 15
2.2.2 交叉编译工具 16
2.2.3 uboot的移植 17
2.2.4 Linux内核移植 18
2.2.5 Linux根文件系统移植 19
小结 23
第3章 Linux应用程序学习 24
3.1 Linux shell脚本 24
3.1.1 语法 24
3.1.2 变量 25
3.1.3 shell脚本语句 26
3.1.4 注释 27
3.2 Linux下makefile的编写 27
3.3 Linux文件编程 28
3.3.1 文件与目录 29
3.3.2 系统调用 30
3.3.3 标准I/O库 32
3.4 线程 34
3.4.1 线程优点 34
3.4.2 线程分类 35
3.4.3 线程实现 35
3.5 网络编程 37
3.5.1 TCP/IP协议 37
3.5.2 TCP和UDP 38
3.5.3 套接字 39
小结 40
第4章 嵌入式Linux设备驱动开发基础 41
4.1 嵌入式Linux设备驱动的概述 41
4.1.1 Linux设备驱动的作用 41
4.1.2 Linux设备驱动的分类及特点 42
4.2 处理器与储存器 42
4.2.1 处理器 42
4.2.2 存储器 43
4.3 接口 45
4.3.1 串口 46
4.3.2 I2C 46
4.3.3 USB 47
4.3.4 以太网接口 48
4.4 Linux内核模块 49
小结 50
第5章 Linux设备驱动之并发与竞态 51
5.1 并发及其管理 51
5.2 自旋锁 52
5.2.1 自旋锁API 52
5.2.2 自旋锁基本使用模式 53
5.2.3 其他自旋锁函数 54
5.2.4 读者/写者自旋锁 55
5.2.5 Linux内核自旋锁 55
5.3 信号量与互斥体 57
5.3.1 信号量 57
5.3.2 互斥体 62
5.4 原子操作 64
5.4.1 原子整数操作 64
5.4.2 原子位操作 65
5.5 中断屏蔽 65
小结 66
第6章 Linux设备驱动中的阻塞与非阻塞I/O 67
6.1 阻塞与非阻塞I/O 67
6.1.1 休眠 68
6.1.2 等待队列 68
6.1.3 阻塞和非阻塞操作 70
6.2 轮询操作 70
6.2.1 轮询概述 71
6.2.2 Linux应用程序中的轮询编程——select() 71
6.2.3 Linux设备驱动中的轮询编程——poll() 73
小结 75
第7章 Linux设备驱动之时间、延迟及延缓操作 76
7.1 Linux内核时间 76
7.1.1 处理器特定的寄存器 76
7.1.2 延迟操作 77
7.2 内核定时器 78
7.3 tasklet 80
7.4 工作队列 82
小结 84
第8章 Linux设备驱动之内存分配与I/O访问 85
8.1 内存空间与I/O空间 85
8.2 内存管理 85
8.3 内存分配 88
8.3.1 kmalloc与vmalloc 88
8.3.2 get_free_page和相关函数 89
8.4 设备I/O端口和I/O内存的访问 90
8.4.1 I/O寄存器和常规内存 90
8.4.2 操作I/O端口(申请,访问,释放) 91
8.4.3 操作I/O内存(申请,映射,访问,释放) 92
8.4.4 像I/O内存一样访问端口 93
8.4.5 ARM体系的I/O操作接口 94
8.5 I/O内存的静态映射 94
小结 96
第9章 Linux设备驱动之中断处理 97
9.1 Linux中断处理程序框架 97
9.1.1 中断处理过程 97
9.1.2 Linux中断处理程序的上半部与下半部机制 99
9.2 Linux中断编程 100
9.3 中断共享 103
9.4 中断驱动的I/O 104
小结 104
第10章 Linux设备驱动工程开发技术 105
10.1 自创建设备文件 105
10.2 混杂设备驱动 107
10.3 Linux设备模型 109
10.3.1 kobject和kset数据结构 110
10.3.2 sysfs文件系统 113
10.3.3 总线、设备和驱动程序 114
10.4 设备驱动分层思想 120
小结 121
第11章 Linux字符设备驱动 122
11.1 字符设备驱动结构 122
11.1.1 主、次设备号 122
11.1.2 字符设备驱动的重要数据结构 124
11.2 字符设备的注册和释放 128
11.2.1 字符设备的注册 129
11.2.2 字符设备的释放 131
11.3 字符设备驱动的一些小技巧 131
小结 133
第12章 基于内存的简单字符设备 134
12.1 简单字符驱动的数据结构 134
12.1.1 定义字符设备驱动的设备数据结构 134
12.1.2 定义file_operation结构和挂接相应的系统调用函数 135
12.2 简单字符驱动设计 136
12.2.1 字符设备驱动的加载与卸载 137
12.2.2 字符设备驱动的打开与关闭 139
12.2.3 字符设备驱动的读写函数 140
12.2.4 字符设备驱动的llseek函数 141
12.3 应用程序测试 142
12.3.1 应用程序设计原理 142
12.3.2 程序代码 142
12.4 简单字符设备驱动运行效果 143
12.4.1 makefile程序的编写 143
12.4.2 字符设备驱动运行效果 144
小结 145
第13章 按键控制LED字符驱动 146
13.1 按键和LED设备硬件接口和寄存器 146
13.2 按键控制LED驱动原理 147
13.3 按键控制LED驱动程序分析 148
13.3.1 按键与LED集成在一个驱动中 148
13.3.2 按键与LED驱动的实现 156
13.4 按键控制LED驱动测试 171
13.5 驱动程序的运行效果 171
小结 173
第14章 基于DS18B20传感器的驱动开发 174
14.1 DS18B20温度传感器简介 174
14.1.1 温度传感器的工作特点 175
14.1.2 DS18B20的外部结构 175
14.1.3 DS18B20的内部结构 176
14.1.4 DS18B20的应用电路结构 178
14.1.5 DS18B20的工作原理 178
14.2 DS18B20温度传感器程序设计实现 180
14.2.1 复位程序 180
14.2.2 写1字节子程序 182
14.2.3 读1字节子程序 183
14.2.4 确定温度传感器的头文件和相应的数据结构 185
14.2.5 确定驱动要实现的功能函数和file operation结构的挂接 186
14.2.6 编写加载和卸载函数 186
14.2.7 编写要实现的功能函数 187
14.3 应用程序设计 195
14.4 驱动运行效果 197
14.4.1 makefile文件的编写 197
14.4.2 应用程序运行效果图 197
小结 198
第15章 MP3播放器 199
15.1 MP3播发器简介 199
15.2 按键播放MP3的原理 199
15.2.1 MP3播放器系统框架 199
15.2.2 MP3音频驱动的移植 201
15.3 MP3程序设计 203
15.3.1 按键驱动程序设计 203
15.3.2 MP3应用程序设计 208
15.3.3 最终的程序代码 215
15.4 MP3播放器的测试 223
小结 224
第16章 基于motion的动态图像检测系统开发 225
16.1 动态图像检测系统简介 225
16.2 系统框图和流程图 225
16.2.1 系统框图 226
16.2.2 系统设计技术 227
16.3 动态监测系统程序分析 228
16.3.1 motion动态图像采集系统移植 228
16.3.2 温度采集系统 231
16.3.3 动态图像控制系统 231
16.3.4 远程监控服务系统 239
16.3.5 SD卡存储系统 248
16.4 系统测试运行效果图 248
小结 250
第17章 块设备驱动程序 251
17.1 字符设备驱动与块设备驱动 251
17.2 块设备驱动基本框架 252
17.3 块设备在Linux系统中各层的调用关系 252
17.4 块设备驱动的重要数据结构 253
17.4.1 block_device_operations结构体 254
17.4.2 gendisk结构体 255
17.4.3 request与request_queue结构体 255
17.4.4 块I/O 256
17.4.5 块设备中各结构体之间的关系 258
17.5 块设备驱动程序分析 259
小结 261
第18章 基于ramdisk的虚拟磁盘块设备驱动 262
18.1 块设备驱动程序设计 262
18.2 基于I/O调度器的块设备驱动程序设计 262
18.3 没有I/O调度器的块设备驱动程序设计 265
小结 267
第19章 SD卡块设备驱动 268
19.1 SD卡概述 268
19.1.1 SD卡简介 268
19.1.2 SD卡的引脚 269
19.1.3 SD卡的内存组织 270
19.2 SD卡寄存器 271
19.2.1 CID寄存器 271
19.2.2 SD总线协议 272
19.2.3 SD卡指令和命令 272
19.2.4 块读写操作 274
19.3 SD卡设备驱动程序分析 275
19.3.1 SD卡驱动程序的重要数据结构 276
19.3.2 SD设备驱动分析 278
19.3.3 SD卡驱动在mini2440开发板的开发与移植 281
19.4 测试SD卡驱动程序 283
19.4.1 系统设计思路与步骤 283
19.4.2 系统测试结果 285
小结 286