
本书以ARM 9处理器和Linux操作系统为平台,从S3C2440A处理器及其外围设备的基本知识讲起,然后介绍在Linux操作系统下开发嵌入式系统所需的知识,最后介绍开发一个典型的嵌入式系统的全过程,使学生对嵌入式系统的开发有一个全面的认识,为今后从事嵌入式系统开发奠定了基础。
本书深入浅出,适合计算机及相关专业的师生使用,也可作为嵌入式系统爱好者学习嵌入式系统设计的入门教材和嵌入式系统开发人员的技术参考书。本书封面贴有清华大学出版社防伪标签,无标签者不得销售。
版权所有,侵权必究。
基于ARM技术的微处理器应用占据了32位RISC微处理器的大部分市场,并渗入到人们生活的各个方面。本书将以基于ARM920T核的S3C2440A芯片为核心,以Linux操作系统为平台,详细介绍嵌入式系统的设计与开发过程、调试方法。
本书共分8章,每章内容介绍如下:
第1章 嵌入式系统概述 介绍目前嵌入式系统的发展状况;嵌入式系统的定义、特点、应用领域;嵌入式系统的组成,包括嵌入式硬件组成与软件系统,为读者以后的学习打下基础。
第2章 ARM微处理器 介绍ARM处理器的技术特点和应用领域;ARM处理器体系结构、版本、变种及版本命名格式;ARM处理器的编程模型,包括ARM处理器的数据类型、工作状态、工作模式和寄存器组织、存储模式、I/O端口的访问方式和异常;ARM微处理器的选型。
第3章 ARM程序设计基础 重点讲述ARM汇编程序设计基本编程方法,包括ARM及Thumb指令集以及ARM寻址方式,并通过范例进一步讲解ARM指令集的使用方法; ARM汇编语言和汇编程序规范、程序格式;ARM汇编器的伪操作和伪指令的使用;ARM汇编程序中的常用符号、表达式、运算符和程序的基本结构;最后结合实例介绍汇编语言与C/C++语言的混合编程。
第4章 嵌入式系统硬件设计 首先介绍嵌入式最小系统的设计和S3C2440A芯片设计,然后重点介绍S3C2440A外围部件的工作原理,包括存储器控制器、Nand Flash控制器、中断控制器、通用I/O口、串行通信和定时器;嵌入式系统硬件基本电路,包括电源、复位、晶振电路、存储器接口和JTAG接口、串行接口等;S3C2440A启动程序,包括中断向量表、初始化存储器系统、初始化堆栈、初始化有特殊要求的端口和设备、初始化用户程序执行环境、改变处理器模式、呼叫主应用程序。
第5章 嵌入式操作系统基础 详细介绍操作系统的基础知识,包括操作系统的定义、功能、特征、类型;进程和线程的基本知识;中断和中断的处理;内核的分类等基础知识,这些都是开发嵌入式系统必不可少的基础知识。本章还将对当今流行的开源和商业的嵌入式操作系统进行介绍,最后针对Linux系统的特点、组成和应用前景展开介绍。
第6章 嵌入式Linux开发基础 从Linux的基本知识、常用命令讲起,这是学习Linux的入门知识,然后通过实例讲述Linux C编程的基本过程及相应的开发工具,包括vi和emacs编辑工具、gcc编译工具、make工程管理工具和gdb调试工具的使用,版本控制的基本概念,这些都是进行Linux开发必须掌握的工具。本章还将介绍多进程和多线程的开发,讲述Linux下进程和线程编程的基本方法,相应地介绍多进程和多线程的程序调试方法。最后讲解交叉编译的概念,通过实例分析如何将一个Linux的程序交叉编译为在ARM处理器上运行的程序。
第7章 构建嵌入式Linux系统 讲述构建Linux系统的全过程,包括嵌入式Linux的组成、开发主机和目标机之间的通信、Bootloader的启动、Linux内核的移植和配置、根文件系统的构建等内容。
第8章 基于Web的远程监控系统的设计实例 详细介绍一个基于Web的远程监控系统的设计过程,包括系统架构设计和软、硬件的实现。本章首先介绍嵌入式Web服务器和远程监控系统的概念,然后介绍嵌入式Web远程监控系统的整体架构设计,其中网络架构以嵌入式Web服务器为中心,通过Internet远程访问嵌入式Web服务器,嵌入式Web服务器通过现场总线控制各个节点,以达到远程监控的目的;硬件架构采用三星公司的主流ARM 9处理器S3S2440A进行构建;软件架构以Linux操作系统为平台,选择boa+CGI方案。
本书由李新荣负责编写第3、5、6、7、8章,并对本书进行了统稿,曲凤娟负责编写第1、2、4章。李建义、房好帅、王慧娟、金大兵、李楠、王静、刘立媛等也参加了本书大纲的讨论和部分内容的编写。
由于作者水平有限,书中不足之处在所难免,敬请广大读者批评指正,本书作者的邮箱为l_xinrong@sina.com(李新荣).
编 者 2011年5月
第1章 嵌入式系统概述1
1.1 嵌入式系统基础2
1.1.1 嵌入式系统的发展历史2
1.1.2 嵌入式系统的定义与特点4
1.1.3 嵌入式系统的组成5
1.1.4 嵌入式系统的应用领域6
1.1.5 嵌入式技术的发展趋势7
1.2 嵌入式系统的硬件组成8
1.2.1 嵌入式处理器9
1.2.2 嵌入式外围设备与接口10
1.2.3 典型的嵌入式处理器与开发板11
1.3 嵌入式系统的软件组成13
1.3.1 嵌入式软件的基本特点与分类13
1.3.2 嵌入式软件开发环境15
1.3.3 嵌入式软件开发的要点16
1.3.4 嵌入式操作系统18
小结19第2章 ARM微处理器20
2.1 ARM微处理器概述21
2.1.1 ARM微处理器的技术特点21
2.1.2 ARM微处理器的应用领域22
2.2 ARM微处理器体系结构22
2.2.1 RISC体系结构22
2.2.2 ARM体系结构版本23
2.2.3 ARM体系结构的变种及版本命名格式25
2.2.4 ARM微处理器系列26
2.3 ARM微处理器的编程模型30
2.3.1 ARM微处理器的数据类型30
2.3.2 ARM微处理器的工作状态30
2.3.3 ARM微处理器的工作模式31
2.3.4 ARM微处理器的寄存器组织32
2.3.5 ARM体系中的存储模式36
2.3.6 I/O端口的访问方式36
2.3.7 异常37
2.4 ARM微处理器的选型38
小结39第3章 ARM程序设计基础40
3.1 ARM指令系统41
3.1.1 ARM指令系统概述41
3.1.2 ARM寻址方式43
3.1.3 ARM指令集46
3.1.4 Thumb指令集56
3.2 ARM汇编语言和汇编语言编程规范58
3.2.1 ARM汇编语言语句格式58
3.2.2 ARM汇编器的伪操作59
3.2.3 ARM汇编器支持的伪指令69
3.3 ARM汇编语言程序格式71
3.3.1 ARM汇编语言程序中常用的符号71
3.3.2 汇编语言程序中的表达式和运算符74
3.3.3 ARM汇编语言程序的基本结构 76
3.3.4 ARM汇编程序设计举例77
3.4 汇编语言与C/C++语言的混合编程80
3.4.1 在C/C++程序中嵌入汇编指令80
3.4.2 在ARM汇编程序和C/C++程序之间进行变量的互访81
3.4.3 汇编程序、C/C++程序间的相互调用82
小结84第4章 嵌入式系统硬件设计85
4.1 嵌入式最小系统86
4.2 S3C2440A概述87
4.3 S3C2440A外围部件工作原理88
4.3.1 存储器控制器89
4.3.2 Nand Flash控制器97
4.3.3 中断控制器105
4.3.4 通用I/O口121
4.3.5 串行通信130
4.3.6 定时器141
4.4 嵌入式系统硬件基本电路149
4.5 S3C2440A启动程序152
小结156第5章 嵌入式操作系统基础157
5.1 操作系统的基本概念158
5.1.1 操作系统的定义158
5.1.2 操作系统的功能159
5.1.3 操作系统的基本特征161
5.1.4 进程和线程的基本概念162
5.1.5 进程的同步与互斥164
5.2 中断和中断处理165
5.2.1 中断165
5.2.2 中断处理与中断返回166
5.3 单内核与微内核167
5.3.1 内核167
5.3.2 单内核操作系统与微内核操作系统168
5.4 操作系统的类型169
5.4.1 单用户操作系统169
5.4.2 批处理操作系统170
5.4.3 分时操作系统170
5.4.4 实时操作系统171
5.5 当今流行的嵌入式操作系统简介172
5.5.1 嵌入式操作系统的发展172
5.5.2 使用嵌入式操作系统的必要性173
5.5.3 嵌入式操作系统选型174
5.5.4 常见的开源嵌入式操作系统简介175
5.5.5 常见的商业嵌入式操作系统简介176
5.6 Linux系统简介178
5.6.1 Linux的特性178
5.6.2 Linux版本及其特点180
5.6.3 嵌入式Linux系统及其应用前景180
小结181第6章 嵌入式Linux开发基础182
6.1 Linux系统的结构183
6.1.1 Linux内核 183
6.1.2 Linux Shell184
6.1.3 Linux文件系统185
6.1.4 Linux实用工具186
6.2 Linux常用命令187
6.2.1 磁盘管理命令187
6.2.2 文件操作命令189
6.2.3 联机帮助命令194
6.3 Linux C编辑、编译、调试工具195
6.3.1 Linux下C语言编程概述195
6.3.2 vi编辑器197
6.3.3 emacs编辑器199
6.3.4 gcc编译工具203
6.3.5 gdb调试工具205
6.3.6 make的使用和Makefile文件的编写210
6.3.7 版本控制214
6.4 Linux C编程基础215
6.4.1 Linux的进程215
6.4.2 Linux下的进程控制216
6.4.3 多线程编程入门219
6.5 调试程序222
6.5.1 调试多线程程序222
6.5.2 调试多进程程序225
6.6 交叉编译227
6.6.1 嵌入式系统开发模型228
6.6.2 交叉编译工具链228
6.6.3 交叉编译实例229
小结230第7章 构建嵌入式Linux系统232
7.1 嵌入式Linux系统的构建流程233
7.1.1 嵌入式Linux系统的组成233
7.1.2 嵌入式Linux系统的构建234
7.2 宿主机和目标机之间的通信235
7.2.1 宿主机和目标机235
7.2.2 Windows的超级终端235
7.2.3 Linux的minicom236
7.2.4 TFTP协议238
7.2.5 NFS网络共享239
7.3 Bootloader240
7.3.1 Bootloader的作用240
7.3.2 Bootloader的启动方式241
7.3.3 Bootloader的两个阶段241
7.3.4 常用Bootloader简介242
7.4 Linux内核配置和移植243
7.4.1 Linux内核移植准备243
7.4.2 内核的配置253
7.4.3 Linux内核的编译255
7.5 构建嵌入式根文件系统256
7.5.1 Linux下的文件系统256
7.5.2 嵌入式Linux的文件系统257
7.5.3 Linux根文件系统结构259
7.5.4 制作根文件系统262
小结264第8章 基于Web的远程监控系统的设计实例265
8.1 基于Web的远程监控系统简介266
8.1.1 嵌入式Web服务器和远程监控系统266
8.1.2 基于嵌入式Web的远程监控系统应用267
8.2 系统架构设计270
8.2.1 网络架构270
8.2.2 硬件架构设计271
8.2.3 软件架构设计272
8.3 系统软件实现272
8.3.1 嵌入式Web服务器的移植和配置273
8.3.2 HTML中表单的使用277
8.3.3 CGI程序设计289
8.4 Linux设备驱动程序设计302
8.4.1 Linux下的驱动程序设计基础302
8.4.2 基于Linux 2.6内核的设备驱动程序举例304
8.5 基于Web的LED远程控制系统设计308
8.5.1 LED驱动程序设计308
8.5.2 表单设计311
8.5.3 CGI程序的编写312
小结313
参考文献315