第1篇 嵌入式Linux开发介绍第1章 嵌入式系统基础 3
1.1 嵌入式系统概述 4
1.1.1 身边的嵌入式系统 4
1.1.2 什么是嵌入式系统 6
1.1.3 嵌入式系统发展趋势 9
1.2 嵌入式操作系统 11
1.2.1 概述 11
1.2.2 嵌入式Linux系统 11
1.2.3 其他嵌入式操作系统介绍 15
1.3 ARM处理器平台介绍 17
1.3.1 嵌入式处理器特点与分类 17
1.3.2 ARM处理器介绍 19
1.3.3 ARM体系结构 20
1.4 搭建嵌入式Linux系统开发环境 24
1.4.1 嵌入式Linux系统的组成及设计步骤 24
1.4.2 嵌入式Linux开发工具链 25
1.4.3 系统引导程序的移植 26
1.4.4 VIVI移植实现 31
1.5 本章小结 33
第2章 嵌入式Linux C语言开发介绍 35
2.1 嵌入式Linux与C语言 36
2.2 基本编辑器vi的使用 36
2.2.1 进入和退出vi 36
2.2.2 vi的基本编辑命令 37
2.2.3 vi的高级编辑命令 40
2.3 高级编辑器Emacs的使用 43
2.3.1 Emacs的启动与退出 43
2.3.2 Emacs的基本操作 45
2.3.3 Emacs的高级命令 46
2.4 编译器GCC的使用 50
2.4.1 GCC简介 50
2.4.2 GCC的编译过程 50
2.4.3 GCC的常用模式 51
2.4.4 GCC的常用选项 52
2.4.5 GCC的警告功能 53
2.5 调试器GDB的使用 55
2.5.1 GDB的调试过程 55
2.5.2 GDB的基本命令 58
2.5.3 GDB的高级命令 60
2.6 Make工程管理器 64
2.6.1 Make管理器简介 64
2.6.2 Makefile的描述规则 65
2.6.3 一个简单示例 66
2.6.4 make如何工作 67
2.6.5 指定变量 69
2.6.6 自动推导规则 70
2.6.7 另类风格的Makefile 71
2.6.8 清除工作目录过程文件 71
2.7 本章小结 72
第3章 C语言基础回顾 73
3.1 C语言的“基础字符”与“词汇” 74
3.2 数据类型 75
3.2.1 常量和变量 77
3.2.2 整型数据 78
3.2.3 浮点型数据 81
3.2.4 字符型数据 83
3.2.5 变量初始化 86
3.2.6 各类数值型数据间的混合运算 87
3.3 运算符与表达式 88
3.3.1 算术运算符和算术表达式 89
3.3.2 赋值运算符和赋值表达式 93
3.3.3 逗号运算符和逗号表达式 97
3.4 程序流程控制 98
3.4.1 选择语句 100
3.4.2 循环语句 107
3.5 字符输入/输出 117
3.5.1 单字符输入/输出 118
3.5.2 格式输入与输出 119
3.6 函数 126
3.6.1 函数的定义与声明 128
3.6.2 函数的参数、值和基本调用 128
3.6.3 函数的嵌套与递归调用 134
3.6.4 数组函数 137
3.6.5 局部变量 141
3.6.6 全局变量和外部变量 142
3.6.7 变量的存储类别 143
3.6.8 内部函数和外部函数 148
3.7 本章小结 150
第2篇 嵌入式Linux C语言开发入门第4章 嵌入式Linux C语言常用数据类型与修饰符 157
4.1 指针 158
4.1.1 指针的概念 158
4.1.2 指向指针的指针 161
4.1.3 指针数组 162
4.1.4 函数指针 164
4.1.5 链表 165
4.1.6 嵌入式Linux中指针使用实例 165
4.2 数组 167
4.2.1 一维数组 168
4.2.2 多维数组 170
4.2.3 字符数组 173
4.2.4 嵌入式Linux中数组使用实例 176
4.3 结构体与共用体 177
4.3.1 结构体的声明与定义 178
4.3.2 结构体的引用与初始化 181
4.3.3 结构体数组 182
4.3.4 结构体指针 184
4.3.5 共用体 188
4.3.6 typedef的使用 193
4.3.7 嵌入式Linux中结构体与共用体使用实例 195
4.4 数据类型修饰符 198
4.4.1 const和volatile 199
4.4.2 signed和unsigned 199
4.4.3 short和long 200
4.4.4 near和far 200
4.4.5 嵌入式Linux数据类型修饰符使用实例 200
4.5 存储类修饰符 201
4.6 本章小结 205
第5章 嵌入式Linux C语言预处理器与重要函数 207
5.1 头文件的概念和配置 208
5.2 预处理器 210
5.2.1 预处理的概念 211
5.2.2 预定义宏 211
5.2.3 文件包含 214
5.2.4 条件编译 215
5.2.5 行号控制 217
5.3 字符串函数 218
5.3.1 char数据类型 218
5.3.2 字符串输入 221
5.3.3 字符串输出 222
5.3.4 字符串函数 224
5.3.5 嵌入式Linux中字符串编程实例 235
5.4 文件输入/输出函数 238
5.4.1 嵌入式Linux C文件概述 238
5.4.2 基本I/O函数 240
5.4.3 文件打包和压缩 246
5.4.4 其他I/O函数 250
5.4.5 嵌入式Linux中文件输入/输出编程实例 252
5.5 内存操作函数 254
5.5.1 类型转换 254
5.5.2 分配和释放内存 261
5.5.3 内存块操作 264
5.5.4 位操作 267
5.5.5 内存关键字 270
5.5.6 嵌入式Linux中内存操作编程实例 273
5.6 Linux内核函数 276
5.6.1 Linux内核介绍 276
5.6.2 进程管理函数 277
5.6.3 文件操作函数 285
5.6.4 时间函数 297
5.6.5 信号处理函数 298
5.6.6 消息管理函数 306
5.6.7 线程操作函数 310
5.6.8 网络编程函数 318
5.6.9 嵌入式Linux内核的移植和修改 326
5.6.10 嵌入式Linux中内核编程实例 329
第6章 嵌入式LinuxC语言常用数据结构 333
6.1 链表 334
6.1.1 链表概述 334
6.1.2 单向链表 335
6.1.3 循环链表 340
6.1.4 双向链表 342
6.1.5 链表与数组 344
6.1.6 链表与栈 345
6.1.7 嵌入式Linux中链表使用实例 351
6.2 树 352
6.2.1 树概述 352
6.2.2 二叉树 353
6.2.3 平衡二叉树 358
6.2.4 嵌入式Linux中树的使用实例 359
6.3 哈希表 360
6.3.1 哈希表概述 360
6.3.2 哈希表构造 360
6.3.3 哈希表处理冲突的方法 362
6.3.4 嵌入式Linux中哈希表使用实例 363
6.4 本章小结 364
第7章 嵌入式Linux C语言嵌入汇编语言与移植性问题 365
7.1 嵌入汇编语言 366
7.1.1 内嵌汇编的语法 366
7.1.2 GCC对内嵌汇编语言的处理方法 370
7.1.3 嵌入式Linux中嵌入汇编实例 371
7.2 移植性问题 374
7.2.1 字长和数据类型 374
7.2.2 数据对齐 376
7.2.3 字节顺序 378
7.2.4 嵌入式Linux中代码移植实例 378
7.3 本章小结 379
第3篇 嵌入式Linux C语言编程实践第8章 工控触摸屏人机界面系统的开发 383
8.1 嵌入式数控系统人机界面介绍 384
8.1.1 嵌入式数控系统及其人机界面概述 384
8.1.2 工控触摸屏人机界面系统的现状 385
8.2 嵌入式数控系统硬件结构 386
8.2.1 CEB270开发板介绍 386
8.2.2 嵌入式数控系统硬件总体结构 387
8.2.3 Intel Xscale PXA 270处理器 388
8.2.4 Flash 390
8.2.5 SDRAM 390
8.3 人机界面程序开发模式 391
8.3.1 嵌入式数控系统软件结构 391
8.3.2 数控系统人机界面特点 391
8.3.3 嵌入式数控系统的软件开发模式 392
8.3.4 宿主机与目标机 392
8.3.5 交叉编译 393
8.3.6 远程调试 393
8.3.7 数控系统人机界面开发环境 394
8.4 嵌入式Linux系统移植基础 395
8.4.1 Bootloader的作用 395
8.4.2 Bootloader移植 397
8.4.3 U-BOOT的移植 400
8.4.4 内核启动部分的移植 401
8.5 设备驱动移植基础 406
8.5.1 设备驱动程序接口 408
8.5.2 设备驱动程序模块 409
8.5.3 设备驱动程序结构 410
8.6 文件系统移植基础 411
8.6.1 JFFS2文件系统 411
8.6.2 嵌入式根文件系统 413
8.7 移植U-BOOT到人机界面开发板上 416
8.7.1 选择U-BOOT的原因 416
8.7.2 U-BOOT主要目录结构 417
8.7.3 U-BOOT支持的主要功能 417
8.7.4 U-BOOT移植过程 418
8.7.5 将U-BOOT移植到开发板的具体过程 419
8.8 人机界面开发板的Linux内核移植 421
8.8.1 准备Linux内核源代码 421
8.8.2 修改Linux内核源代码 421
8.8.3 内核调试 423
8.8.4 总结 423
8.9 本章小结 424
第9章 基于PCI总线的无线网卡驱动开发 425
9.1 Linux设备驱动程序概述 426
9.1.1 Linux设备驱动程序与内核的关系 426
9.1.2 Linux内核的组成 426
9.1.3 Linux硬件驱动架构 427
9.1.4 设备驱动程序与内核的接口 428
9.1.5 内核为驱动程序提供的支持 429
9.2 Linux设备驱动程序开发基础 431
9.2.1 内存管理问题 431
9.2.2 中断处理 433
9.2.3 I/O端口 438
9.2.4 DMA处理 439
9.2.5 时间流 440
9.3 Linux下的设备与模块分类 443
9.4 Linux字符设备驱动开发介绍 444
9.4.1 主设备号和次设备号 444
9.4.2 字符设备驱动程序的组成 445
9.4.3 文件操作 446
9.5 块设备的驱动程序 448
9.6 网络设备接口驱动程序 449
9.6.1 网络设备概述 449
9.6.2 网络设备与字符设备、块设备的不同点 450
9.6.3 网络设备的运行机制 450
9.6.4 数据包的发送与接收 451
9.6.5 网络设备驱动的实现模式 452
9.7 Ralink无线网卡介绍 453
9.7.1 Ralink无线网卡结构 453
9.7.2 无线通信协议的选用 454
9.8 Ralink无线网卡驱动开发 455
9.8.1 Ralink无线网卡驱动程序的开发概述 455
9.8.2 关键数据结构的开发 455
9.8.3 802.11帧结构的设置 460
9.8.4 设备初始化模块驱动程序开发 463
9.8.5 设备打开模块驱动程序的开发 465
9.8.6 数据发送模块驱动程序的开发 471
9.8.7 中断处理模块驱动程序的开发 478
9.8.8 设备关闭模块驱动程序的开发 481
9.8.9 设备卸载模块驱动程序的开发 482
9.8.10 驱动程序IOCTL函数 484
9.8.11 驱动程序的调试 493
9.9 本章小结 494
第10章 基于Linux的嵌入式微浏览器的设计与开发 495
10.1 嵌入式微浏览器概述 496
10.1.1 嵌入式微浏览器的定义 496
10.1.2 嵌入式微浏览器的发展历程 496
10.1.3 浏览器的应用 497
10.1.4 嵌入式微浏览器的应用 498
10.1.5 嵌入式微浏览器的设计要求 499
10.1.6 嵌入式微浏览器与桌面浏览器的区别 500
10.1.7 嵌入式微浏览器的特点 501
10.1.8 当前主流嵌入式微浏览器分析 502
10.1.9 3G的概念与业务分类 505
10.1.10 嵌入式微浏览器与3G的结合 507
10.1.11 嵌入式微浏览器与WAP技术的结合 508
10.1.12 嵌入式微浏览器与Java技术的结合 509
10.2 嵌入式微浏览器的相关协议介绍 510
10.2.1 HTTP概述 510
10.2.2 HTTP报文 510
10.2.3 HTTP请求 513
10.2.4 HTTP响应 515
10.2.5 HTTP实体 516
10.2.6 TCP/IP 516
10.2.7 Socket套接字 518
10.2.8 GPRS 519
10.2.9 PPP 524
10.2.10 WAP规范 529
10.3 嵌入式微浏览器相关规范与标准介绍 532
10.3.1 HTML规范 532
10.3.2 HTML的语法树 534
10.3.3 CSS 2.0介绍 534
10.3.4 XHTML 535
10.3.5 XML 536
10.3.6 无线标记语言WML 537
10.3.7 DOM技术标准 549
10.3.8 DOM的发展历程 550
10.3.9 XPCOM组件对象模型 552
10.3.10 XPCOM组件 554
10.3.11 XPCOM组件内部机制 556
10.4 嵌入式微浏览器相关技术难点剖析 559
10.4.1 网页标记的取舍 559
10.4.2 HTML标记的容错处理 560
10.4.3 系统内存优化 563
10.4.4 页面的布局合理性问题 565
10.4.5 可移植性问题 565
10.4.6 DOM的基本接口 566
10.4.7 DOM接口对XHTML的操作 570
10.4.8 图形用户界面 572
10.5 基于Linux的嵌入式微浏览器的总体设计 575
10.5.1 体系结构设计 575
10.5.2 总体模块结构 576
10.5.3 主要数据结构 577
10.5.4 嵌入式微浏览器的数据流程 578
10.6 关键模块的设计与开发 578
10.6.1 系统设计概述 579
10.6.2 HTTP设计和实现 581
10.6.3 HTML解析模块 587
10.6.4 DOM模块 595
10.6.5 Content模块 602
10.6.6 Layout排版模块 602
10.6.7 显示引擎的设计 602
10.6.8 GFX模块 603
10.6.9 Widget模块 608
10.6.10 View模块 611
10.6.11 Embeding API 612
10.7 嵌入式微浏览器在模拟环境下的运行情况 613
10.8 本章小结 614