第一篇 硬件设计篇 2
第1章 硬件系统概述 2
1.1硬件系统资源 2
1.2 S5PV210处理器 3
1.2.1 S5PV210微处理器概述 3
1.2.2内部各模块介绍 4
第2章 核心板电路设计 10
2.1 S5PV210芯片地址分配 10
2.2 DDR2 SDRAM芯片 12
2.2.1 DDR2 SDRAM工作原理 13
2.2.2 DDR2 SDRAM硬件设计 15
2.3 SLC Nand Flash芯片 16
2.3.1 NOR Flash与NAND Flash对比 16
2.3.2 SLC与MLC NAND Flash技术对比 17
2.3.3 K9F4G08UOB引脚功能 18
2.3.4 NAND Flash硬件设计 20
2.4 DM9000A以太网控制器 22
2.4.1 DM9000A引脚及功能 23
2.4.2 DM9000A硬件设计 24
2.5 WM8960音频编解码芯片 26
2.5.1 IIS总线接口概述 26
2.5.2 WM8960概述 26
2.5.3 WM8960硬件设计 28
第3章 扩展板电路设计 31
3.1 LED电路 31
3.1.1发光二极管简介 31
3.1.2发光二极管的检测 32
3.1.3发光二极管电路设计 32
3.2蜂鸣器电路 33
3.2.1蜂鸣器简介 33
3.2.2蜂鸣器电路设计 34
3.3按键电路 35
3.3.1按键分类 35
3.3.2按键设计技巧 35
3.3.3按键电路设计 37
3.4串行通信接口电路 38
3.4.1 RS-232C标准 38
3.4.2 MAX3232芯片 39
3.4.3串行通信接口电路设计 40
3.5 EEPROM电路 41
3.5.1 I2C总线协议概述 41
3.5.2 AT24C02介绍 42
3.5.3 AT24C02的读写操作 43
3.5.4 AT24C02电路设计 45
3.6 SD卡电路 45
3.6.1 SD卡概述 45
3.6.2 SD卡的物理接口 46
3.6.3 SD卡的应用模式 49
3.6.4 S5PV210与SD卡的电路设计 49
3.7重力传感器电路 49
3.8 USB电路 50
3.8.1 USB基础知识 50
3.8.2 USB设备检测 52
3.8.3 USB2.0 OTG接口 52
3.8.4 S5PV210的USB接口电路设计 53
3.9 LCD电路 54
3.9.1液晶显示屏 54
3.9.2 S5PV210内部LCD控制器 55
3.9.3 LCD接口电路设计 55
3.10 HDMI高清多媒体接口 56
3.10.1 HDMI概述 56
3.10.2 HDMI物理接口 57
3.10.3 S5PV210的HDMI接口电路设计 58
3.11 RJ45网络接口 59
3.12电源及复位电路 60
3.12.1 AMS 1086电源芯片 60
3.12.2 RT9011电源芯片 61
3.12.3 IMP811电源监控及复位芯片 61
第二篇 开发基础篇 66
第4章 嵌入式Linux开发环境构建 66
4.1基本概念 66
4.2常用Linux命令 67
4.3软件包安装及配置 69
4.3.1 PuTTY安装及配置 69
4.3.2 VMware8安装 72
4.3.3 Redhat Enterprise5.5安装 73
4.4交叉编译器安装 83
4.5 Windows与Linux共享文件设置 83
4.6 TFTP与NFS服务器配置 87
4.6.1配置TFTP服务器 88
4.6.2配置NFS服务器 89
第5章 Make工程管理及Shell编程 92
5.1 Make工程管理 92
5.1.1 Make工程管理器 92
5.1.2 Make工作步骤 93
5.1.3 Make程序示例 93
5.1.4 Makefile语法 96
5.2 Shell编程 99
5.2.1 Bash Shell简介 99
5.2.2 Bash Shell常用命令 100
5.2.3重定向与管道 104
5.2.4简单Shell应用 108
5.2.5 Shell编程语法 109
第三篇 系统移植篇 136
第6章 移植U-Boot 136
6.1 BootLoader简介 136
6.2常见的BootLoader 137
6.3 U-Boot分析 138
6.4 U-Boot移植 140
6.4.1配置U-Boot 140
6.4.2修改内存配置 141
6.4.3修改DM9000网卡配置 146
6.4.4修改电源管理功能 149
6.4.5加入USB下载功能 151
6.4.6添加启动zImage内核支持 151
6.5 U-Boot常用命令 153
6.6 U-Boot启动参数分析 156
6.7烧写U-Boot至NAND Flash 158
6.7.1将U-Boot烧写至SD卡 158
6.7.2将U-Boot烧写至Flash 165
第7章 移植Linux内核 166
7.1 Linux内核版本简介 166
7.2内核源码结构 167
7.3内核移植准备 168
7.3.1内核编译过程 168
7.3.2 Linux Makefile分析 169
7.3.3内核Kconfing分析 172
7.3.4内核配置及编译命令 176
7.4内核移植 177
7.4.1内核基本配置 177
7.4.2修改NAND Flash分区 182
7.4.3修改LCD信息 183
7.4.4 DM9000驱动移植 188
7.4.5蜂鸣器驱动修改 193
7.4.6 RTC驱动修改 193
7.4.7 USB驱动移植 194
7.4.8 TSC2007触摸屏驱动移植 197
7.4.9 FT5406触摸屏驱动移植 199
7.4.10 WM8960声卡驱动移植 200
7.5调试、烧写内核 203
第8章 制作根文件系统 205
8.1根文件系统组成 205
8.2制作根文件系统 207
8.2.1生成根文件系统目录 207
8.2.2配置编译BusyBox 209
8.2.3使用glibc库文件 211
8.2.4建立配置文件 212
8.3网络挂载及固化根文件系统 217
8.3.1 NFS挂载根文件系统 217
8.3.2烧写根文件系统至NAND Flash 219
第9章 移植触摸库及Qt4库 222
9.1移植Tslib触摸库 222
9.2移植QTE库 223
9.3 Linux下Qt Creator开发环境安装及配置 226
9.4 QWT安装配置 232
9.4.1 QWT在X86平台上的安装 233
9.4.2 QWT在ARM平台上的安装 234
9.5 QWT简单示例 235
第四篇 驱动开发篇 242
第10章 驱动开发基础 242
10.1驱动程序中的基本概念 242
10.1.1设备驱动程序概述 242
10.1.2设备驱动的分类 242
10.1.3驱动程序、操作系统、应用程序的关系 243
10.1.4常见的系统调用函数 244
10.2驱动开发要点 247
10.2.1用户态和内核态 247
10.2.2模块机制 248
10.3 Hello World驱动程序 248
10.3.1驱动模块组成 249
10.3.2 Hello World驱动模块程序 250
10.3.3编译Hello World模块 250
10.3.4调试Hello World模块 252
10.4字符设备驱动基本概念 253
10.4.1主设备号和次设备号 253
10.4.2 cdev结构体 255
10.4.3 file_operations结构体 257
10.4.4 file结构体 260
10.4.5 inode结构体 262
10.4.6各结构体关系 262
10.5字符设备驱动的组成 263
10.5.1文件操作结构体 263
10.5.2加载和卸载函数 263
10.5.3常用设备操作函数 265
10.5.4驱动中常用API函数 269
10.6 Virtualmem字符设备驱动 270
10.6.1 Virtualmem驱动程序 270
10.6.2 Virtualmem测试程序 276
10.6.3驱动程序的测试方法 278
10.7自动创建设备节点的方法 279
10.7.1 udev简介 279
10.7.2编译配置udev 279
10.7.3驱动实例 281
第11章 驱动开发核心技术 284
11.1并发处理机制 284
11.1.1信号量的定义 284
11.1.2信号量的内核函数 285
11.1.3信号量驱动程序及测试代码 286
11.2阻塞机制 290
11.2.1阻塞和非阻塞定义 290
11.2.2等待队列定义及其内核函数 291
11.2.3等待队列驱动程序及测试代码 292
11.3中断机制 298
11.3.1中断定义及分类 298
11.3.2中断的实现过程 299
11.3.3中断的申请及释放 301
11.4利用tasklet处理中断 302
11.4.1顶半部与底半部 302
11.4.2 tasklet定义及内核函数 303
11.4.3按键设备原理图 305
11.4.4利用tasklet处理中断驱动实例 306
11.5利用工作队列处理中断 312
11.5.1工作队列定义及内核函数 312
11.5.2利用工作队列处理中断驱动实例 313
11.6内核定时器 318
11.6.1时间度量 319
11.6.2时间延时 319
11.6.3内核定时器定义及内核函数 320
11.6.4内核定时器驱动代码 321
11.7设备端口的访问 325
11.7.1 I/O端口方式控制设备 326
11.7.2 I/O内存方式控制设备 335
11.7.3控制单一引脚的方法 341
第12章 驱动开发进阶 351
12.1 Linux设备驱动模型 351
12.1.1 Sysfs文件系统 352
12.1.2设备驱动模型关键数据结构 354
12.1.3内核对象函数 356
12.1.4设备模型构成 357
12.1.5设备驱动模型主要组件 359
12.2 Platform虚拟总线 362
12.2.1 Platform虚拟总线概述 362
12.2.2 Platform虚拟总线重要组件 362
12.2.3 Platform虚拟总线驱动实例 367
12.3 ADC设备驱动 375
12.3.1 ADC模数转换器特点 376
12.3.2 ADC驱动程序分析 379
12.3.3 ADC测试程序 383
12.4 I2C设备驱动 384
12.4.1 I2C设备驱动程序结构 384
12.4.2 AT24C08设备驱动程序 389
12.4.3用户空间直接访问I2C设备的方法 395
12.5输入子系统 397
12.5.1输入子系统简介 398
12.5.2输入子系统设备驱动层设计 398
12.5.3输入子系统中按键设备驱动程序 402
12.6触摸屏驱动 408
12.6.1 FT5X06简介 408
12.6.2 FT5406设备驱动程序 410
第五篇 项目实战篇 418
第13章 基础实例 418
13.1 LED流水灯 418
13.2按键监测 430
13.3模拟量采集 437
第14章 综合实例 442
14.1智能家居系统 442
14.2硬件系统设计 444
14.3设备驱动程序 454
14.4 Qt4应用程序 461