目录
一、前言
嵌入式操作系统可以统称为应用在嵌入式系统的操作系统,它具有一般操作系统的功能,同时具有嵌入式软件的特点,主要有可固化(固化在ROM,上电运行)、可配置(任务数量等参数)、可裁剪(组件)、独立的板级支持包(不依赖硬件),可修改,不同的CPU有不同的版本,应用的开发需要有集成的交叉开发工具。
嵌入式OS系统从80年代开始,从支持8位微处理器到16位、32位、64位微处理器,从单一MCU到多品种MCU,从仅有内核到提供其他功能模块,如文件系统,TCP/IP网络系统、GUI系统等。目前嵌入式OS的市场不断细分针对不同领域的产品。
二、OS分类和体系结构
2.1 OS分类
从面向应用领域来分:包括面向信息家电的OS,面向智能手机的OS,如SymbianOS.PalmOS,安卓OS,苹果IOS等,面向汽车电子的OSES-OS,面向工业控制的OS,医疗电子、军事装备应用、航空航天等(LinuxOS是一种弱实时的操作系统,任务时间无法保证,无法用于实时控制的应用领域)
从实时性的角度来分:嵌入式实时操作系统具有强实时特点,如VxWorks(美国WindRiver,卖给了Intel)、QNX、Nuclear(Ment Graphic)、 OSE(欧洲)、DeltaOS(中国,国防领域)、各种ITRON OS(日本)等。非实时嵌入式操作系统一般具有弱实时特点(娱乐系统),如WinCE、版本众多的嵌入式Linux、PalmOS,还有安卓系统等。
ARMCotexV7将嵌入式分为三个领域:A(应用控制器),R(实时控制器),M(微控制器),RM领域具有实时性。手机上的一般分为baseband(通讯4G/3Gstack)处理器和应用处理器,基带使用实时操作系统ITRON OS,应用处理器使用如安卓系统和苹果IOS等非实时操作系统。
从商业模式来分类:商用型的功能稳定、可靠,有完善的技术支持和售后服务,开发费用+版税。开源型特点是开放源码,只收服务费,没有版税。如Embeded linux ,RTEMS,eCOS,FreeRTOS。
2.2 OS体系结构
嵌入式系统有自己的架构成为体系结构,它是操作系统的基础,定义了硬件与软件的界限、内核与操作系统其它组件(文件、网络、GUI等)的组织关系、系统与应用接口。目前操作系统体系结构可以分为单块结构、层次结构、客户端/服务器(微内核)结构(多核,分布式)。
层次结构:
客户端/服务器结构:
目前嵌入式操作系统主要采用分层和模块化相结合的结构或微内核结构。分层和模块化结合的结构将操作系统分为硬件无关层、硬件抽象层和硬件相关层,每层再划分功能模块。这样移植工作便集中在硬件相关层,与其余两层无关,功能的伸缩则集中在模块上,从而确保其具有良好的可移植性和可伸缩性。而采用微内核结构,则可以利用其可伸缩特点适应硬件的发展,便于扩展。
层次模块化示例:
客户/服务结构示例:
三、OS构成
3.1 OS内核
内核是嵌入式操作系统的基础,也是必备的部分。内核还提供特定的应用编程接口,但目前没有统一的标准。内核包括:任务管理、内存管理、通信同步与互斥机制、中断管理、时间管理、任务扩展......
(1)任务管理
任务管理是内核的核心部分,具有任务调度、创建任务、删除任务、挂起任务、解挂任务、设置任务优先级等功能。
通用计算机的操作系统追求的是最大吞吐率,为了达到最佳整体性能,其调度原则是公平,采用Round-Robin或者可变优先级调度算法,调度时机主要以时间片为主驱动。
而嵌入式操作系统多采用基于静态优先级的可抢占的调度,任务优先级在运行前通过某种策略静态分配好的,一旦有优先级更高的任务就绪就马上进行调度。
(2)内存管理
嵌入式操作系统的内存管理比较简单,通用OS广泛采用了虚拟内存的技术,为用户提供一个功能强大的虚存管理机制。但由此会给系统带来不确定性和更多的资源占有。
嵌入式实时操作系统通常不会采用虚拟内存管理(速度慢),而是静态内存分配和动态内存分配相结合的管理方式。有些内核利用MMU机制提供内存保护功能。嵌入式非实时操作系统可以采用虚拟存储的管理方式。
虚存管理:操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要装入的程序以及将要调入的页或段(换入换出)――具有请求调入和置换功能,只需程序的一部分在内存就可执行。
(3)通信同步互斥机制
这些机制提供任务间、任务与中断处理程序间的通信、同步和互斥功能。一般包括各类信号量、消息队列、事件、管道、异步信号和共享内存等功能。与通用OS不同的是,嵌入式操作系统需要解决在这些机制中的使用中出现的优先级反转问题。
(4)中断管理
中断管理最基本的功能向操作系统应用开发更简单的API,即告诉操作系统什么时候进入中断什么时候退出中断。一般包括:
- 安装中断服务程序
- 中断发生时,对中断现场进行保存,并转到相应的中断服务程序上执行
- 中断退出前,对中断现场进行恢复
- 中断栈(中断独立的栈空间)切换(与任务栈切换)
- 中断退出时的任务调度
注:如果中断空间是独立的,即中断栈空间,如果不是独立的有可能是使用任务栈空间,有可能出现栈溢出的情况。
(5)时间管理
- 提供高精度、应用可设置的系统时钟,该时钟是嵌入式系统的时基,可设置为十毫秒以下。
- 提供日历时间,负责与时间相关的任务管理工作,如任务对资源有限等待的计时、时间片轮转调度等,提供软定时器管理等。
- 通用操作系统的系统时钟的精度由操作系统确定,应用不可调,且一般是几十毫秒(linux系统10ms,windows一般40ms)
(6)任务扩展
任务扩展功能是内核中设置一些Hook的调用点,在这些调用点上内核调用应用设置的、应用自己编写的扩展处理程序,以扩展内核的有关功能。
Hook调用点有任务创建、任务切换、任务删除、出错处理等。
3.2 TCP/IP网络系统
TCP/IP协议已经广泛应用于嵌入式系统中。嵌入式TCP/IP网络系统提供符合TCP/IP协议标准的协议栈,提供socket编程接口。
嵌入式TCP/IP网络系统的特点:
- 可剪裁:能根据嵌入式系统的功能的要求对完整的TCP/IP协议进行剪裁,以满足用户的需求
- 采用零拷贝技术,提高实时性:TCP/IP协议栈没有用于各层数据传递的缓冲区,协议栈各层间传递的都是数据指针。
- 采用静态分配技术:在网络初始化时就静态分配通信缓冲区,设置了专门的发送和接收缓冲,避免数据处理任务的阻塞等待。
3.3 嵌入式文件系统
与通用的文件系统相比,嵌入式文件系统较为简单,主要具有文件的存储、检索、更新等功能,一般不提供保护和加密等安全机制。
以系统调用和命令方式提供对文件的各种操作,主要有:
- 设置和修改对文件和目录的存取权限
- 提供建立、修改、改变、删除目录等服务
- 提供创建、打开、读写、关闭、撤销文件等服务
如Fat16,Fat32等文件系统
3.4 Micro uC/OS简介
uC/OS-II是一个抢占式实时多任务内核,开源的OS。它是用ANSI的C语言编写的,包含一小部分汇编语言代码,使之可以提供给不同架构的微处理器使用。至今,从8位到64位,uC/OS已经在40多种不同架构的微处理器上使用。最新版本是uC/OS-III,用于商业目的必须取得许可证。
uC/OS-II全部以源代码方式提供,大约5500行。CPU相关的部分被独立出来,所以该OS很容易移植到不同架构的嵌入式微处理器上。uC/OS-II的特点包括
- 开放源代码,可移植,可固化,可裁剪
- 可抢占性,支持多任务,可确定性,任务栈
- 系统服务,中断管理
- 稳定性和可靠性
四、嵌入式开发工具
嵌入式软件开发工具可以分为:
(1)与嵌入式OS无关的开发工具,用于开发板级测试软件,辅助硬件调试,基本的驱动程序,系统软件如OS
(2)与嵌入式OS相关的开发工具,用于开发部分特定OS的驱动程序,BSP,基于嵌入式OS应用
4.1 开发工具分类
根据嵌入式软件开发的不同阶段,使用的开发工具可以分为:
- 需求分析工具
- 软件设计工具
- 编码、调试工具
- 测试工具
- 配置管理工具、维护工具等
开发的三个步骤:软件生成(编辑工具、编译链接工具)、调试(交叉调试工具eclipse、非交叉调试工具Simulator在板子和软件同步开发过程中)、固化运行(代码烧写工具)
测试工具一般都是通用工具,常用的工具包括:
- 内存分析工具:检测动态分配内存时产生的缺陷(软件内存)
- 性能分析工具:对某些关键代码(任务执行时间、内存消耗)进行优化来改进性能,如逻辑分析仪
- 覆盖分析工具:追踪哪些代码被执行过(代码插桩技术),如GarmaCP工具
- 缺陷跟踪工具:发布代码后,测试出bug,对其跟踪记录的工具(git,okit等)
4.2 调试和固化目标文件
4.3固化运行Boot
Boot模块是整个应用系统代码的入口模块,主要功能是初始化CPU环境,使目标机硬件初始化为已知的状态。具体来说
- 初始化芯片引脚
- 初始化系统外部控制寄存器
- 初始化基本输入输出设备
- 初始化MMU,包括片选控制寄存器等
- 执行数据拷贝
4.4 交叉调试器
当板子上电后,Rom monitor 首先初始化目标机,初始化要求的外围设备,如最基本的串口和用于内存刷新的系统计时器芯片;初始化用于下载目标代码的内存空间;初始化中断控制器和安装中断处理程序;然后初始化自己的程序空间;最后等待宿主机端调试器的命令。
Rom monitor可以下载目标代码、对目标机系统内存进行读写、对寄存器读写、设置和清除不同类型断点、单步执行指令、复位系统等。
ROM Monitor: 一种用于替代目标机上的ROM芯片的设备,即ROM仿真器。
工作原理:
- 目标机的CPU可以读取ROM Emulator 设备的ROM芯片的内容
- RE设备上的ROM芯片的地址可以实时地映射到目标机的ROM地址空间,从而仿真目标机的ROM
- RE设备只是为目标机提供ROM芯片和在Target和Host间建立一条高速通信通道
- 不完备的调试方式,需要结合ROM Monitor方式
ICE(in circuit Emulator)一种用于替代目标机上CPU的设备,即在线仿真器。
OCD(On Chip Debugging)即片上调试器,支持两种模式一般模式和调式模式。一般模式下CPU从内存读取指令执行;调试模式下CPU从调式端口读取指令,通过调式端口可以控制CPU进入和退出调式模式。
OCD存在各种实现如JTAG(joint Test Access Group)BDM(background Debugging Mode)OnCE(on chip emulation)。
JTAG优点是可以对软件下载、执行、调试和控制,为复杂实时跟踪调试提供途径;可以进行多内核和多处理器的板级和芯片级调试,通过串接为芯片制造商提供芯片生产、测试途径;不占用系统资源,能够调试没有外部总线芯片,代价非常小。
JTAG缺点是通过串口依次传递数据,速度比较慢,只能进行软件断点级别调试,不能完成实时跟踪和多种事件触发等复杂调试功能。
4.4 非交叉调试
simulator 是一种软件模拟器,非交叉调试,在宿主机上创建一个虚拟的目标机环境,将应用代码下载到这个虚拟目标机上运行和调试。
simulator适用于对时间特性没有严格要求、没有特殊外设、只需要验证逻辑是否正确的应用程序。
参考:
OS虚存管理:https://blog.csdn.net/hanzhen7541/article/details/100986092