嵌入式系统
Posted Keep--Silent
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式系统相关的知识,希望对你有一定的参考价值。
文章目录
- 文件权限
- 文件类型
- 设备
- 寻址方式
- 处理机
- Linux系统进程
- 嵌入式系统特点
- Linux 支持的文件系统
- 嵌入式系统的组成
- CISC和RISC的比较
- ARM体系的七种工作模式 和 两种工作状态
- 寄存器
- MMU
- 哈佛结构和冯·诺伊曼结构对比
- Qt
- 内核
- gcc的编译
- 嵌入式系统的设计步骤
- Boot Loader
- Linux作为嵌入式操作系统的优势
- 交叉编译
- 链接
文件权限
第一段1位:表示文件类型,d表示目录文件,-表示普通文件
第二段3位:表示所有者权限,分别表示:读、写、执行
第三段3位g:表示所在组权限,分别表示:读、写、执行
第四段3位o:表示其他用户权限,分别表示:读、写、执行
修改权限-chmod 即 修改权限change mode
修改文件所有者 chown即change owner
文件类型
Linux文件类型常见的有:
(1)普通文件:符号是 -
(2)目录文件:符号是 d
(3)字符设备文件:符号是c
(4)块设备文件:符号是b
(5)符号链接文件:符号是l
设备
字符设备、块设备 和 网络设备
寻址方式
- 1、立即数寻址( 操作数直接在指令中 mov R1,#3:将3放到R0)
- 2、寄存器寻址 ( 操作数放在寄存器中 mov R0,R1:将R0的值放到R1中)
- 3、寄存器间接寻址
(操作数在寄存器值为地址指向的内存中 mov R0,[R2]:将R2中的值为地址指向内存中的数放到R0中) - 4、寄存器位移寻址
(当第二个数为位移方式时、将寄存器的值先位移处理得到操作数 mov R0,R1,lsl#3:将R1中值左移3位放到R0中) - 5、寄存器基址寻址(也叫基址变址寻址)
由间接寻址发展而来,先对寄存器中的值进行计算,再以结果为地址,取其指向内存值为操作数。
示例: LDR R0, [R1, #4]:先将R1中的值加4 然后以结果为地址 对应的内存操作数放到R0 - 6、多寄存器寻址
一条指令传送多个(最多16个)寄存器值
示例: STMIA R0!,R2-R7,R12:将 R2 到 R7 和 R12 放到 R0 指向的地址中 - 7、相对寻址
以程序计数器 PC 的当前值为基地址,指令中的地址标号作为偏移量,
将两者相加之后得到操作数的有效地址 BL NEXT:跳转到NEXT标签处 - 8、拷贝寻址。将连续的寄存器值进行操作。
STMIA R0! ,R1-R7:将R1~R7的数据保存到R0指向的地址中 - 9、堆栈寻址。将栈用于操作数保存或者导出的操作。
STMFD SP!,R1-R7,LR:将R1~R7,LR入栈,SP更新。满递减堆栈
处理机
处 理 机 处 理 器 存 储 器 总 线 数 据 总 线 地 址 总 线 控 制 总 线 处理机\\left\\\\beginaligned &处理器\\\\ &存储器\\\\ &总线\\left\\\\beginaligned &数据总线\\\\ &地址总线\\\\ &控制总线\\\\ \\endaligned\\right.\\\\ \\endaligned\\right. 处理机⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧处理器存储器总线⎩⎪⎨⎪⎧数据总线地址总线控制总线
Linux系统进程
Linux系统进程共有三类:
(1)交互进程: 由一个shell终端启动的进程,在执行过程与用户进行交互操作,可以运行与前台或者后台。
(2)批处理进程: 该进程是一个进程集合,负责按顺序启动其他进程。
(3)守护进程:守护进程是一直运行的一种进程,经常在Linux系统启动时启动,在系统关闭时终止。它们独立与控制终端并且周期性的执行某种任务或等待处理某些发生的事件。例如httpd进程,一直处于运行状态,等待用户的访问。还有常用的crond进程,这个进程与windows的计划任务,可以周期性的执行用户设定的某些任务。
嵌入式系统特点
1)可裁剪性。支持开放性和可伸缩性的体系结构。
2)强实时性。EOS实时性一般较强,可用于各种设备控制中。
3)统一的接口。提供设备统一的驱动接口。
4)操作方便、简单、提供友好的图形GUI和图形界面,追求易学易用。
5)强稳定性,弱交互性。嵌入式系统一旦开始运行就不需要用户过多的干预、这就要负责系统管理的EOS具有较强的稳定性。嵌入式操作系统的用户接口一般不提供操作命令,它通过系统的调用命令向用户程序提供服务。
6)固化代码。在嵌入式系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。
7)更好的硬件适应性,也就是良好的移植性
Linux 支持的文件系统
Linux目前几乎支持所有的Unix类的文件系统,除了我们在安装Linux操作系统时所要选择的ext3、reiserfs和ext2外,还支持苹果MACOS的HFS,也支持其它Unix操作系统的文件系统,比如XFS、JFS、Minix fs 及UFS等,您可以在kernel的源码中查看;如果您想要让系统支持哪些的文件系统得需要把该文件系统编译成模块或置入内核;
当然Linux也支持Windows文件系统NTFST和fat,但不支持NTFS文件系统的写入;支持fat文件系统的读写
Linux也支持网络文件系统,比如NFS等;
嵌入式系统的组成
嵌入式系统由硬件和软件两大部分组成,用于实现对其他设备的控制、监视或管理等功能。前者是整个系统的物理基础,它提供软件运行平台和通信接口;后者实际控制系统的运行。
硬件:嵌入式微处理器、外围电路、外围硬件设备。
软件:BOOTLOADER、嵌入式操作系统、用户的应用程序等。
硬件
硬件:嵌入式微处理器、外围电路、外围硬件设备。
- CPU是嵌入式系统的核心处理器,又称为嵌入式微处理器,负责控制整个嵌入式系统的执行;
- 外围电路包括嵌入式系统的内存、I/O端口、复位电路、ADC/DAC(模数转换器/数模转换器)和电源等,与核心处理器一起构成一个完整的嵌入式目标系统。
- SRAM(STATIC RANDOM ACCESS MEMORY)为静态随机存储器
- FLASH为闪存器,固态存储器
- DRAM(DYNAMIC RANDOM ACCESS MEMORY)为动态随机存储器
- 外部设备指嵌入式系统与真实环境交互的各种设备,包括通用串行总线USB(UNIVERSAL SERIAL BUS)、存储设备、鼠标、键盘、液晶显示器(LCD,LIQUIDCRYSTAL DISPLAY)、红外线数据传输(IRDA,INFRARED DATA ASSOCIATION)和打印设备等。
软件
软件:BOOTLOADER、嵌入式操作系统、用户的应用程序。
- BOOTLOADER完成硬件环境的初步初始化,为固件库或操作系统设置一个可以运行、工作的环境。
- 操作系统控制着应用程序与硬件的交互,完成实时和多任务操作;或者用户程序通过固件库与硬件进行交互。
- 应用程序控制着系统的运作和行为,完成各种设计功能。
嵌入式系统的软件可分成4个层次:
① 设备驱动接口(DDI)负责嵌入式系统与外部设备的信息交互;
② 实时操作系统(RTOS)分成基本和扩展两部分,
- 基本功能是操作系统的核心,负责整个系统的任务调度,存储分配、时钟管理和中断管理,提供文件、图形用户界面(GUI)等基本服务;
- 扩展功能是为用户提供操作系统的扩展功能,包括网络、数据库等;
③ 可编程应用接口(API)也称为编程中间件、应用中间软件,是为编制应用程序提供的各种编程接口库,它针对不同应用领域、不同的安全要求分别构建,从而减轻应用开发者的负担;
④ 应用软件是针对不同应用而由开发者自己编写的软件。
CISC和RISC的比较
CISC
CISC(Complex Instruction Set Computer)的主要特点有:
1)指令系统复杂庞大,指令数目一般为200条以上。
2)指令的长度不固定,指令格式多,寻址方式多。
3)可以访存的指令不受限制。
4)各种指令使用频度相差很大。
5)各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。
6)控制器大多数采用微程序控制。
7)难以用优化编译生成高效的目标代码程序。
如此庞大的指令系统,对指令的设计提出了极高的要求,研制周期变得很长。后来人们发现,一味追求指令系统的复杂和完备程度不是提高计算机性能的唯一途径。在对传统CISC指令系统的测试表明,各种指令的使用频率相差悬殊,大概只有20%的比较简单的指令被反复使用,约占整个程序的80%;而有80%左右的指令则很少使用,约占整个程序的20%。从这一事实出发,人们开始了对指令系统合理性的研究,于是RISC随之诞生。
RISC
RISC(Reduced Instruction Set Computer)的主要特点有:
1)选取使用频率最高的一些简单指令,复杂指令的功能由简单指令的组合来实现。
2)指令长度固定,指令格式种类少,寻址方式种类少。
3)只有Load/Store(取数/存数)指令访存,其余指令的操作都在寄存器之间进行。
4)CPU中通用寄存器数量相当多。
5)RISC一定采用指令流水线技术,大部分指令在一个时钟周期内完成。
6)以硬布线控制为主,不用或少用微程序控制。
7)特别重视编译优化工作,以减少程序执行时间。
值得注意的是,从指令系统兼容性看,CISC大多能实现软件兼容,即高档机包含了低档机的全部指令,并可加以扩充。但RISC简化了指令系统,指令条数少,格式也不同于老机器,因此大多数RISC机不能与老机器兼容。由于RISC具有更强的实用性,故应该是未来处理器的发展方向。但事实上,当今时代Intel几乎一统江湖,且早期很多软件都是根据CISC设计的,单纯的RISC将无法兼容。此外,现代CISC结构的CPU已经融合了很多RISC的成分,其性能差距已经越来越小。复杂指令CSC可以提供更多的功能,这是程序设计所需要的。
比较
1)RISC更能充分利用VLSI芯片的面积。CISC的控制器大多采用微程序控制,其控制存储器在CPU芯片内所占的面积为50%以上,而RISC控制器采用组合逻辑控制,其硬布线逻辑只占CPU芯片面积的10%左右。
2)RISC更能提高运算速度。RISC的指令数、寻址方式和指令格式种类少,又设有多个通用寄存器,采用流水线技术,所以运算速度更快,大多数指令在一个时钟周期内完成。
3)RISC便于设计,可降低成本,提高可靠性。RISC指令系统简单,故机器设计周期短;其逻辑简单,故可靠性高。
4)RISC有利于编译程序代码优化。RISC指令类型少,寻址方式少,使编译程序容易选择更有效的指令和寻址方式,并适当地调整指令顺序,使得代码执行更高效化。
ARM体系的七种工作模式 和 两种工作状态
ARM体系的七种工作模式
用户模式(usr) | 大多数程序运行于用户模式 | ||
特权模式 | 系统模式(sys) | 运行具有特权的操作系统任务 | |
异常模式 | 中断模式(irq) | ||
快速中断模式(fiq) | 必须进快处理中断请求,并离开这个模式 | ||
管理模式(svc) | 操作系统使用的保护模式 | ||
数据访问终止模式(abt) | 数据或指令预取终止时进入该模式 | ||
未定义指令终止模式(und) | 未定义的指令执行时进入该模式 |
- 可以通过 软件 来进行模式切换,或者发生各类中断、异常时CPU 自动 进入相应的模式。
- 用户模式与系统模式两者使用相同的寄存器,都没有SPSR(Saved Program Statement Register,已保存程序状态寄存器),但系统模式比用户模式有更高的权限;
- 系统复位或开机时则进入到SVC模式下;
- 当遇到软中断(SWI,Software Interrupt)时,也将进入到SVC模式下;
- 进入特权模式是为了处理中断、异常、或者访问被保护的系统资源;
两种工作状态
- ARM: 32位,ARM状态执行字对齐的32位ARM指令。
- THumb: 16位,执行半字对齐的16位指令
- ARM和Thumb两种状态之间的切换不影响处理器的工作模式和寄存器的内容。
- ARM处理器在处理异常时,不管处理器处于什么状态,则都将切回到ARM状态。
CPU上电处于ARM状态。
ARM中断模式(IRQ)和快速中断模式(FIQ)区别:
- FIQ的优先级比IRQ高。
- IRQ可以被FIQ所中断,但FIQ不能被IRQ所中断,在处理FIQ时必须要关闭中断。
- FIQ模式下,比IRQ模式多了几个独立的寄存器。
- 不要小看这几个寄存器,ARM在编译的时候,如果你FIQ中断处理程序足够用这几个独立的寄存器来运作,它就不会进行通用寄存器的压栈,这样也省了一些时间。
- FIQ的中断向量地址在0x0000001C,而IRQ的在 0x00000018。(也有的在FFFF001C以及FFFF0018)
- 写过完整汇编系统的都比较明白这点的差别。18只能放一条指令(18-1c 4个字节),为了不与1C处的FIQ冲突,这个地方只能跳转,而FIQ不一样,1C以后没有任何中断向量表了,这样可以直接在1C处放FIQ的中断处理程序,由于跳转的范围限制,至少少了一条跳转指令。
- IRQ和FIQ的响应延迟有区别
- IRQ的响应并不及时,从Verilog仿真来看,IRQ会延迟几个指令周期才跳转到中断向量处,看起来像是在等预取的指令执行完。FIQ的响应不清楚,也许比IRQ快。
寄存器
Arm 处理器总共有 37 个寄存器,其可以分为以下 2 类:
-
- 通用寄存器( 31 个)
- 不分组寄存器( R0 — R7 ),共 8 个。
- 分组寄存器( R8 — R14 )
- PC 指针( R15 )
- 通用寄存器( 31 个)
-
- 程序状态寄存器( 6个 )
- CPSR( 1个 )
- SPSR( 5个 )
- 程序状态寄存器( 6个 )
寄存器功能说明
-
R0 - R12 存取数据,临时数据
-
R13:sp 用于指向不同模式的栈顶。栈,每种模式都需要开辟一块内存,用于在该模式下 函数调用,临时分配的数据存放在此处。
Stack Pointer (SP)
,栈指针寄存器,该寄存器始终保存着一个指向栈顶的值,值得注意的地方;SP寄存器的Bit[1:0](最低两位)始终为0,因此这个寄存器是按照字对齐的,也就是四个字节;
M3有两个堆栈指针,并且同一时刻只能使用其中的一个;
主堆栈指针(MSP/SP_main):复位后默认使用的堆栈指针寄存器,用于操作系统内核以及异常处理例程(包括中断服务例程);
进程堆栈指针(PSP/SP_process):由用户的应用程序代码使用。
寄存器R13通常被用作堆栈指针寄存器,另外究竟使用哪个寄存器,由CPU的控制寄存器来决定;Handler mode :即系统发生异常(中断等)的情况会进入该模式,通常使用SP_main;
Thread mode:用户程序正常运行时处于该模式,可以选择使用SP_main 或 SP_process;
CPU的Configuration Control Register,如下图所示; -
M3
有两个堆栈指针,并且同一时刻只能使用其中的一个;- 主堆栈指针(
MSP/SP_main
):复位后默认使用的堆栈指针寄存器,用于操作系统内核以及异常处理例程(包括中断服务例程); - 进程堆栈指针(
PSP/SP_process
):由用户的应用程序代码使用。
- 主堆栈指针(
-
R14 : lr 程序跳转的时候,返回到的地址就保存到此处
-
R15 :pc 要执行的下一条指令地址,就存放在此处,每次指令执行完,就自动+4
-
CPSR:程序状态寄存器。程序执行的时候,有很多临时标记位,结果是0 是否溢出,是否有借位,是否有 进位,当前cpu模式,
-
SPSR:用于模式切换,将切换前的 cpsr 保存到 新的模式的 spsr,模式切换回去的时候,再将spsr的内容还原到cpsr。
MMU
MMU(Memory Management Unit)是内存管理单元的简称
- 1.将虚拟地址转化为物理地址
- 2.进行访问权限的管理
哈佛结构和冯·诺伊曼结构对比
区别:
冯诺依曼结构采用指令和数据统一编址,使用同一条总线传输,CPU读取指令和数据的操作无法重叠。
哈佛结构采用指令和数据独立编址,使用两条独立的总线传输,CPU读取指令和数据的操作可以重叠。
利弊:
冯诺依曼结构主要用于通用计算机领域,需要对存储器中的代码和数据频繁的进行修改,统一编址有利于节约资源。早起的微处理器大多采用冯·诺依曼结构,最典型的就是intel的x86微处理器,取指令和取操作数都是在同一总线上,通过分时复用的方式进行,优点是硬件简单,但是缺点是在告诉运行时,不能达到同时取指令和取操作数,从而会形成传输过程的瓶颈。
哈佛结构主要用于嵌入式计算机,程序固化在硬件中,有较高的可靠性、运算速度和较大的吞吐量。哈佛总线技术以DSP和ARM为代表的,采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,在硬件上也是分开的,这就允许同时取指令和取操作数,也就是比冯结构快一步,从而大大提高运算能力,例如最常见的运算中,一条指令同时可以取两个操作数,在流水线处理时,同时还有一个取指令操作,冯式结构就需要先取指令,再取操作数,而哈佛结构则允许同时运行,取指令同时,直接取操作数,而且可以取完操作数后,直接取下一条指令,这样不会出现取指令和取操作数重叠执行的情况,效率大大提高。
Qt
Qt是一个跨平台应用程序和UI开发框架。使用Qt只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。Qt原为奇趣科技公司(Trolltech,www.trolltech.com)开发维护,现在被Nokia公司收购。目前在Nokia的推动下,Qt的发展非常快速,版本不断更新。
Qt/Embedded的主要特点是什么?(5分)
参考答案:
是一个专门为嵌入式系统设计的图形用户界面的工具包(1分)。支持UNIX和Windows平台(1分)。采用面向对象的思想开发(1分),开发接口与桌面的Qt相同,因此桌面应用程序可方便的移植到Qt/E(1分)。不分层的架构使得其他运行速度很快(1分)。
内核
分为 进程管理系统 、 内存管理系统 、 i/o管理系统 和文件管理系统等四个子系统
gcc的编译
可分为预处理、编译、汇编和链接等四个阶段
嵌入式系统的设计步骤
(1)**需求分析阶段,**罗列出用户的需求;(1分)
(2)**体系结构设计阶段,**描述系统的功能如何实现;(1分)
(3)详细设计阶段,进行硬件系统与软件系统的分类划分,以决定哪些功能用硬件实现,哪些用软件实现;(1分)
(4)**系统集成,**把系统的软件、硬件和执行装置集成在一起,(1分)进行调试,发现并改进在设计过程中的错误;(1分)
(5)****系统测试,****对设计好的系统进行测试,看其是否满足给定的要求。(1分)
Boot Loader
介绍
Bootloader就是操作系统内核运行的一段小程序,完成进行初始化系统硬件设置的任务,包括CPU、SDRRAM、Flash、串口等初始化,时钟的设置、存储器的映射。(2分)
分为启动加载模式和下载模式。
(1) 启动加载模式
启动加载(Boot laoding)模式又称为“自主”(Autonomous)模式,是指 Bootloader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。(2分)
(2) 下载模式
在下载模式下,目标机上的 Bootloader 将先通过串口连接或网络连接等通信手段从宿主机下载文件。(2分)
作用
(1)首先,bootloader是在特定硬件平台运行的程序,严重依赖于硬件平台,需要移植;(2)是系统上电之后,第一个运行的程序,系统在上电或复位时通常都从地址 0x0 处开始执行,而在这个地址处安排的通常就是系统的 Boot Loader 程序;(3)bootloader程序的设计目标是启动嵌入式操作系统,嵌入式操作系统的启动需要一定的条件,这些条件由bootloader来满足;(4)Bootloader一般具有对存储器和网络接口操作的功能;如擦除、读写Flash,通过USB、串口下载文件等
Linux作为嵌入式操作系统的优势
Linux作为嵌入式操作系统的优势主要有以下几点:
1. 可应用于多种硬件平台。Linux已经被移植到多种硬件平台,这对于经费,时间受限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发后移植到 具体的硬件上,加快了软件与硬件的开发过程。Linux采用一个统一的框架对硬件进行管理,从一个硬件平台到另一个硬件平台的改动与上层应用无关。(1分)
-
Linux的高度模块化使添加部件非常容易。本身内置网络支持,而目前嵌入式系统对网络支持要求越来越高。(1分)
-
Linux是一个和Unix相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件(包括X86,Alpha、ARM和Motorola等现有的大 部分芯片)等特性的一种通用操作系统。(1分)
-
Linux可以随意地配置,不需要任何的许可证或商家的合作关系。其程序源码全部公开,任何人可以修改并在GUN通用公共许可证(GNU General Public License)下发行。这样,开发人员可以对操作系统进行定制,适应其特殊需要。(1分)
-
Linux带有Unix用户熟悉的完善的开发工具,几乎所有的Unix系统的应用软件都已移植到了Linux上。其强大的语言编译器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。(分)
交叉编译
所谓交叉编译,是指在一个平台上编译生成在另一个平台上运行的可执行程序。(3分)。之所以采用交叉编译,是因为目标平台上不具备直接运行开发环境的条件
链接
链接分硬链接和符号链接
符号链接可以建立对于文件和目录的链接。符号链接可以跨文件系统,即可以跨磁盘分区。符号链接的文件类型位是l,链接文件具有新的i节点。(3分)
硬链接不可以跨文件系统。它只能建立对文件的链接,硬链接的文件类型位是-,且硬链接文件的i节点同被链接文件的i节点相同
以上是关于嵌入式系统的主要内容,如果未能解决你的问题,请参考以下文章