感言:其实学习了一个学期的时间,根本没有学习到什么东西,现在总结一下这个学期的收获,希望留下嵌入式知识永久的记忆。
一.绪论
1.1定义:以应用为中心,计算机技术为基础,软硬可裁,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的专用计算机系统。
1.2嵌入式系统地特点:
A. 特定的设计。
B. 各学科结合的产物。
C. 高效的设计。
D. 与具体应用相结合。
E. 存储特性。
F. 交叉开发。
1.3嵌入式的交叉开发。
主要是指嵌入式系统地软件开发方式,这是嵌入式系统区别通用计算机软件开发的最主要特性。
1.3.1对通用计算机软件开发:
A. 程序的生成:用一定的编译工具将各种计算机语言转换成计算机可以执行的二进制代码。
B. 程序的载入:使用通用的计算机工具复制程序到执行的计算机中。
1.3.2对嵌入式系统软件开发:
A. 程序的生成:使用交叉编译模式,在主机上完成程序的编写后,使主机开发工具将程序转换成目标机可以执行的二进制代码。
B. 程序的载入:从主机到目标机烧写或者其他通信方式。
1.4嵌入式系统地组成:
A. 微处理器: CPU+内存管理器+中断控制器+定时器
B. 外围硬件 内存+各种通信端口+AD/DA+时钟+电源部件
C. 嵌入式操作系统 不是必要的,但可以利用通用的功能模块,实现多层次,模块化的设计方式,使得开发更加高效。
D.应用程序
E.开发环境。嵌入式的交叉编译环境,主机到目标机的程序载入环境,主机到目标机的调试环境,主机的仿真环境。
二.嵌入式硬件组成
2.1 组成原理:
计算机内存结构模型: 诺依曼结构(指令空间和数据空间不分开)和哈佛结构(指令空间和数据空间分开)。
2.2嵌入式最小系统
2.2.1 定义:基于某处理器为核心,能够运行的基本系统。
2.2.2 最小系统的组成
A. 处理器
B. 内存(固化代码的FLASH和随机读写的RAM)
C. 时钟
D. 电源和复位
2.2.3 JTAG接口在最小系统中的应用
JTAG(联合测试行动小组)是IEEE的一个标准,可以对具有JTAG接口芯片的硬件电路进行边界扫描和故障检测。
2.3 嵌入式系统的扩展
2.3.1 内存类芯片
SRAM 线性读写 地址数据总线 运行代码 可读写数据 速度快 价格高
NOR FLASH 线性读,写需要时序 地址数据总线 固化代码和数据 运行代码 只读数据 价格较贵
SDRAM 线性读写 特殊内存控制器的支持 运行代码 可读写代码 价格便宜
NAND FLASH 根据时序读写 GPIO或者普通总线方式 大规模可读写数据 不能线性访问 价格便宜
三.ARM体系结构
3.1 ARM既可以认为是公司的名字也可以认为是一类微处理器的通称,还可以认为是一种技术的名字。
3.2 ARM微处理器的7种运行模式
1) 用户模式 正常的程序执行状态
2) 快速中断模式
3) 中断模式
4) 管理模式
5) 终止模式
6) 系统模式
7) 未定义模式
除用户模式外,其他都是特权模式
除用户模式,系统模式,其他都是异常模式
3.3 ARM工作状态
1)ARM状态 处理器执行32位的字对齐的ARM指令
2)Thumb状态 处理器执行16位的,半字对齐的Thumb指令
3.4 ARM的寻址模式。。。。。。。
1) 立即寻址
2) 寄存器寻址
3) 寄存器间接寻址
4) 基址变址寻址
5) 多寄存器寻址
6) 跳转寻址
7) 堆栈寻址
3.5 ARM的指令集
3.5.1分类:
数据处理指令,
加载/存储指令,
乘法指令,
状态寄存器访问指令,
跳转指令,
协处理器指令 。。。。。。。。。。
3.6 ARM内存管理单元 MMU
主要两个功能:
A. 将虚拟地址转换为物理地址
B. 控制内存的访问权限
四.
4.1 ARM核心微处理器的使用
4.1.1 处理器数据手册
内容如下:
处理器特点概述
处理器的功能结构及其框图
处理器的封装形式和引脚排列
处理器各个功能模块介绍
处理器的电器特性
处理器的机械特性
4.1.2 典型内部模块简介
GPIO 采用可表编程输入输出的方式,输出引脚控制LED,输入引脚控制外部按键。
UART 通用串行收发机是非常方便的一种数据传输方式。
4.2 S3C44B0X处理器
4.2.1 S3C44B0X处理器采用ARM7TDMI内核,速度可以达到66MHz
4.2.2 总线上的部件
1)内存管理单元
2)中断控制器
3)LCD控制器
4)DMA控制器
4.2.3 外部器件
1)IIC总线接口 (串行总线)
2)IIS 总线接口(音频接口)
3)UART 提供了两个独立通道的异步串口,每一个通道都可以工作在DMA模式下。
4.2.4 S3C44B0X的中断控制器有30个中断源,但是支持26个,其中有四个是重叠的。
五 实际嵌入式系统
5.1 嵌入式系统地硬件扩展
5.1.1 外围硬件扩展包括三种类型:
A, 内部模块扩展
B, 总线扩展
C, GPIO扩展
六 嵌入式软件开发基础
6.1 开发流程
编译---》汇编------》链接-----》加载程序 –》调试
6.2 常用的调试方式
1)目标机—主机 打印调试消息
2)JATG调试
3)远程gdb调试
6.3 C语言目标文件中的段
1)代码段
2)只读数据段
3)读写数据段
6.4 堆和栈的区别
堆和栈都是系统管理的动态内存,在常见的体系结构中,堆一般从低地址向高地址增长,而栈一般从高地址到低地址。
七 嵌入式Linux开发环境
7.1 GNU Tools
7.1.1 Binutils 工具集合
as GNU汇编器
ld GNU链接器
ar 归档工具
string 显示文件中的可打印字符
readelf 显示ELF文件中的各种信息
strip 去除文件中的符合
7.2 ELF文件格式
包括三种主要类型:可执行文件,可重定向文件,共享库
八 构建嵌入式Linux系统
8.1 嵌入式Linux三部分组成
A Bootloader(系统的引导程序,加载linux内核并运行,和目标系统地硬件架构密切相关)
B 内核
C 根文件系统
8.2 嵌入式linux的引导方式
1. 启动加载模式
2. 下载模式
8.3 嵌入式linux的文件系统介绍
EXT2/3 (扩展文件系统2/3)
ROMFS (只读文件系统)
CRAMFS (压缩只读文件系统)
JFFS2 (日志文件系统2)
NFS (网络文件系统)
YAFFS (另一种FLASH文件系统)
九 嵌入式Linux系统地移植
9.1 Bootloader的步骤
stage1
1)硬件设备初始化
2)为加载Bootloader的stage2准备RAM空间
3)复制Bootloader的stage2到RAM空间中
4)设置好堆栈
5)跳转到stage2的C入口点
Stage2
1)初始化本阶段要使用的硬件设备
2)检查系统地内存映射
3)将kernel映像和根文件系统映像从flash上读到RAM空间上
4)为内核设置启动参数
5)调用内核
9.2 uCLinux的特点
定义:针对微控制领域而设计的Linux系统,适合各种无内存管理单元的处理器
9.2.1 uCLinux与标准Linux主要差别
1) 虚拟内存 uClinux没有内存保护 ,应用程序可以访问系统所有的内存。
2) Flat扁平 uCLinux不能使用通用的ELF格式,而是用新的Flat文件格式