第7章嵌入式系统软件及操作系统基础
一、基础
1.特点:规模小、开发难度大(硬件资源有限,时间和空间的限制,涉及到底层软件,运行环境和开发环境)、
高实时性和可靠性要求、软件固化储存
2.分类:系统软件、应用软件——目标机上
支撑软件:辅助软件开发工具软件——宿主机上
3.体系结构:无操作系统——软件直接建立在硬件上,规模小(循环轮转方式——把系统功能分解为若干不同的
任务,顺序执行、中断方式——处理前台程序)
有操作系统——不直接面对硬件,在操作系统基础上编程(硬件上面——设备驱动层、操作系统层、中间件层、应用软件层)
*前者出错会造成系统崩溃,后者通过系统监控进行修复,不会崩溃
4.设备驱动层(软件初始化和管理,直接对硬件进行管理&控制,为上层软件提供所需驱动支持)——又称板级
支持包(把所有与硬件相关的代码都封装起来,为操作系统提供一个虚拟的硬件平台。):
①BootLoader引导加载程序
●在操作系统内核运行之前运行的一小段程序
●初始化硬件设备、建立内存空间的映射图,将系统的软硬件环境设置到一个合适的状态,为调用操作
系统内核做好准备。
●BootLoader程序从地址0x00000000处开始
●包含片级初始化(纯硬件:设置微处理器的核心寄存器和控制寄存器,微处理器的核心工作模式,局
部总线模式等初始化)、板级初始化(硬件,其他初始化和软件,地址映射和软件参数)和加载内核
(跳转到系统内核第一条指令)
②设备驱动程序(基本功能:硬件启动/关闭/停用、读写)
函数,完成一些特定功能:
●分层结构:硬件接口(直接和硬件打交道,直接去操作控制硬件设备)、调用接口(调用硬件接口的
函数,与上层软件打交道)
●混合结构
5.中间件:不包括操作系统内核、设备驱动程序和应用软件在内的所有系统软件
a)嵌入式中间件把原本属于应用软件层的一些通用的功能模块抽取出来,形成独立的一层软件
b)为应用软件提供一个灵活、安全、移植性好、相互通信、协同工作的平台
二、嵌入式操作系统(EOS):完成某项功能,并非通用型操作系统
1.功能
●易于编程的虚拟机平台:封装硬件,为上层软件提供一个抽象编程接口。软件开发在接口上进行,不与硬
件打交道。——编程接口即对外提供的系统调用函数。
●资源管理者——使系统高效、可靠地运行
*内核(kernel):系统当中的一个组件
包含了*任务管理(资源分配与调度)、*存储管理(提高内存利用率)、I/O设备管理、文
件管理
2.分类
●按系统类型分类:商业化系统(功能强大、稳定、辅助软件齐全、应用范围广)、专用系统、开放源代码
系统
●*按响应时间分类:实时RTOS——对响应时间有严格要求(硬实时——不满足则崩溃、软实时——不满足
付代价)
非实时——各个进程分享处理器,以获得各自所需要的运行时间
●按软件结构分类:
单体结构——中间件、设备驱动程序集成在系统内核中,开销小,维护修改不方便分层结构——上层只能调用低层代码(单向),每层有API(开销大),维护简单
内核结构——在内核中只保留最核心功能,核内核外组件间通信是消息传递(不是调用,速度慢)
3.VxWorks、嵌入式Linux、Windows CE、μC/OS-Ⅱ
1.单道程序设计(操作系统在任何时候只能有一个程序在运行)
多道程序设计(并行,例,一个程序访问IO,主动交出CPU让另一个程序运行)
2.进程、线程和任务
●进程(正在执行的程序):动态产生和终止、独立运行、可并发
*一个进程可启动多个程序、一个程序可被多个进程同时执行
进程包含:相应程序、CPU上下文(程序计数器、状态字、各寄存器的当前值)、一组系统资源(管理数据结构、内存地址、使用文件)
●线程(进程当中的一条执行流程):独立运行、比进程小的CPU基本调度单位
*进程=线程+资源平台
*一个进程中可有多个线程,多线程共享大部分资源,每个线程必须有独立的一份如CPU上下文。
嵌入式多线程编程
●任务(独立运行的实体):创建时要定义的主要参数有任务优先级、栈空间大小和函数名
*任务有独立的优先级和栈空间(CPU上下文放在其中)
3.任务的实现
1)内核启动时,只有一个任务存在,由该任务派生出其他任务(父子关系)
2)创建(系统初始化——前台交互、后台特定功能的任务、任务运行过程——帮助自己完成工作、人机交互
时——输入命令、单击图标):在已存在的任务中通过调用相应系统函数(创建一个TCB任务控制块)
*过程:分配相应数据结构(存放管理信息)、分配内存(存放任务代码和数据)
3)终止:
正常退出、错误退出(致命错误、强制退出)、被其他任务踢出(调用函数)
*死循环无终止
4)状态:运行、就绪、阻塞
运行:占有CPU,在任何时刻,处于运行状态的任务个数必须≤CPU
就绪:任务已具备运行条件,但由于CPU正在运行其他的任务,暂时
不能运行该任务
阻塞:也叫等待状态(waiting),任务因为正在等待某种事件的发生而
暂时不能运行
5)TCB块(任务控制块):描述和管理任务的数据结构,是任务存在的唯一标志(停止任务只需删除TCB)
包含:任务管理信息(ID、优先级、调度信息、时间统计)、CPU上下文(可不在TCB中在栈中)、资源管理信息(存储、文件)
6)切换
步骤:在TCB中保存运行上下文→状态从运行变成就绪/阻塞→按一定策略从就绪任务中选一个→把就绪改成运行→根据新任务的TCB恢复它的运行上下文环境
7)任务队列(提高对这些任务的管理效率):根据状态把TCB加入到相应队列中去
4.任务的调度:从就绪队列中选择一个去运行
●时机:新任务被创建、任务运行结束、任务阻塞、I/O中断、时钟中断
●分不可抢占调度(前三种会调度、中断处理完回去执行原任务)、可抢占调度(五种情况都会调度)
●指标:响应时间(上下文切换时间、等待时间)、周转时间(提交到完成时间)、调度开销(调度决策所需
时间空间)、公平性、均衡性、吞吐量
●先来先服务算法FCFS(不可抢占)、短作业优先~SJF、时间片轮转~RR(每个任务分配一小段执行时间)、
优先级算法(每个任务分配优先级——静态&动态、同优先级为一组,一组内用RR)
5.实时调度系统RTOS(多基于优先级可抢占调度算法)
●三元组表示:执行时间、周期、时间期限(最大响应时间、通常是周期)
●单调速率调度算法RMS(静态优先级):任务必为周期性、周期越短优先级越高、效率低
●最早期限优先算法EDF(动态优先级):deadline最近的优先级最高
*两个算法的假设:周期=时间期限、执行时间为常量、任务间不通信
1.特点:实时——简单,甚至无管理
实时要求不高、复杂可靠——对操作系统或任务实现保护→通过MMU(内存保护硬件机制)
*MMU实现内核与应用程序的隔离,防止应用程序破坏系统和其他应用程序
2.两个模式
●实模式:不使用MMU,只有一个地址空间(无地址映射)
内存地址空间分为text(代码)、data(有初始值的全局变量)、bss(无初始值全局变量)、堆(动态分配内存)、栈(运行上下文、局部变量)五个部分。
*无保护,错误会导致系统崩溃
●保护模式:必须用MMU,系统内核和应用程序有独立地址空间,应用程序只能访问自己的地址空间;系
统&MMU共同完成地址映射
*安全、可靠,适合规模达、复杂、实施要求不高的系统
3.分区管理(把内存划分为系统区和用户区)
●固定~:利用率不高,内碎片浪费,固定分区数限制了并行执行的程序个数,易于实现&开销小&分配、回
收算法简单
●可变~:系统动态创建分区、运行结束释放占用存储区域、无内碎片有外碎片(占用分区之间的小空闲分
区)
*数据结构:分区链表,记录每个分区的情况
*分配算法:最先匹配、下次匹配、最佳匹配、最坏匹配
*回收:释放的分区左后都空闲就合并,并改动分区链表
4.地址映射——将逻辑地址转化为物理地址的过程
●概念
*物理地址(内存地址):将内存分割成大小相等的储存单元并编号
*逻辑地址(相对地址):程序编译后形成的目标代码,首地址为0,指令中的地址都是相对于首地址的相对地址
*只有把程序当中的逻辑地址转换为物理地址,才能正常运行
●映射方式(由MMU完成)
*静态:用户程序装入内存时,直接对指令代码进行修改,一次性,不能移动
*动态:运行时,要访问内存时再转换,用基地址寄存器在运行时加上逻辑地址
五、I/O设备管理
*I/O单元由设备本身、设备控制器组成
1.I/O编址
●I/O独立编址:给控制设备中的每个寄存器分配唯一的I/O端口地址,用专门的I/O指令操作(端口地址空
间完全独立,不占内存);端口、内存指令形式不同
●内存映像编址:端口地址是内存的一部分,这些内存单元专用于I/O;端口、内存统一编制
●混合编址:设备控制器——I/O独立编址,I/O设备数据缓冲区——内存映像编址
2.设备控制方式
●程序循环检测(繁忙等待、轮询):循环检测设备是否就绪、是否完成I/O;一直占用CPU
●中断驱动:要I/O、完成I/O时,发中断。I/O进行数据处理时,CPU可去执行其他任务
●直接内存访问DMA,代替CPU
3.软件:四层结构
a)中断处理程序:保存CPU上下文、为中断服务子程序设置运行环境、向中断控制器发出应答信号、执
行子程序
b)I/O设备驱动程序(直接对I/O设备进行控制):上层软件通过函数接口让设备驱动程序执行请求
*I/O设备驱动程序与设备类型密切相关(一对一)——硬件设备发生变化,只需更新相应设备驱动程序,不影响上层软件
c)设备独立的I/O软件(内核的一部分):完成设备驱动程序管理、与设备驱动程序的统一接口、设备命
名、设备保护、缓冲技术、出错报告——*为上层提供统一的访问接口
d)用户空间的I/O软件(内核之外):与用户程序进行链接的库函数在运行时,把传给他们的参数项下传
给相应系统函数,由后者完成实际I/O操作
*用户控件的I/O软件通过下层接口把参数传给系统函数,由设备独立的I/O软件的抽象函数让设备驱动程序执行请求。启动I/O操作,然后设备驱动程序被阻塞起来,直到I/O操作完成,发出中断并处理,然后唤醒被阻塞的设备驱动程序。
第8张Bootloader
一、作用
●嵌入式操作内核运行前运行的一段小程序,也是系统开机后执行的第一段程序。通过这段小程序,可以初
始化硬件设备及建立内存空间。从而将系统的软硬件环境设置成一个适合的状态,以便为最终调用操作系统内核做好准备。
●*Bootloader的作用就是用来加载操作系统,从而启动整个嵌入式系统。硬件初始化的程序用汇编、C语言
编写。
●Bootloader从第一条指令跳转后,就开始初始化各种重要的硬件,如CPU的工作频率、定时器、中断、看
门狗、检测RAM大小、Flash等。
●*一般将软件分为Bootloader、操作系统内核、根文件系统、图新窗口系统GUI和应用程序,前三者必不可
二、工作模式
●启动加载(自主模式):正常启动模式
●下载模式:提供给开发人员
三、启动流程:分为两个阶段
●stage1:依赖于CPU体系结构的代码放在其中,用汇编实现,短小精悍、启动快
1. 硬件设备初始化
2. 为加载Bootloader的stage2 准备RAM 空间(检验是否存在坏块,交替写入0x55、0xaa)
3. 拷贝Bootloader的stage2 到RAM 空间中
4. 设置好堆栈
5.跳转到stage2 的C 入口点main()函数处
●stage2:用C语言实现复杂功能(串口、以太网接口支持等)
1.初始化本阶段要使用到的硬件设备
2.检测系统内存映射(memory map)
3.将kernel 映像和根文件系统映像从flash 上读到RAM 空间中
4.为内核设置启动参数
5.调用内核(直接跳转到内核的第一条指令处)
四、V ivi
1.在下载模式下,vivi为用户提供一个命令行人机接口,通过这个人机接口可以使用vivi提供的一些命令。*若系
统没有键盘和显示就用串口连起宿主机,用宿主机中的串口软件(如超级终端)来控制
—常用命令:Load(把文件载入RAM)、Part(操作MTD分区信息)、bon(NAND Flash的简单分区)、Param (设置参数)、Boot(启动系统)、Flash(管理Flash)
2.编译
#make distclean //清除一些早先生成的无用目标文件
#make menuconfig //根据菜单中信息进行配置
#make
3.第一阶段分析:主要完成了依赖于CPU的体系结构硬件初始化,包括禁止中断、初始化串口、复制第二阶段到
RAM中等
4.第二阶段分析:入口是init/main.c,分成八步
1)vivi从main()函数开始执行,函数开始通过putstr(vivi_bannner)打印出vivi的版本。
2)主要是初始化GPIO,本步的思路和方法就是在把握好整个系统硬件资源的前提下,根据芯片的数据
手册把
所有的初始值设定,在这里利用set_gpios这个函数就可以完成初始化了。
3)进行内存映射初始化和内存管理单元(MMU)的初始化工作
4)初始化堆,然后内存会发生变化。在这里,实际上就是实现动态内存分配策略。
5)初始化mtd设备
6)配置参数,主要是init_priv_data函数。
7)提供vivi人机接口的各种命令。
8)进入Bootloader的两种模式之一
五、U-boot、WinCE、blob
第9章 Linux
1.交叉开发:在宿主机上开发程序,在目标板上运行程序(宿主机上不能运行)的方式,叫交叉开发
*目标板:嵌入式应用软件的实际运行环境or替代实际环境的仿真系统
2.GNU开发工具链:下载源代码→建立环境变量→配置安inutiles→配置Linux内核头文件→第一次编译gcc ((1)修改t-linux下的内容,屏蔽使用头文件(2)配置gcc:主要给出路径和支持的文件。(3)编译、安装gcc# make# make install)→交叉编译glicb→第二次编译gcc(重新编译来支持glibc。)
3.#gcc要编译的文件名–o 可执行文件名(无格式)
#./可执行文件名回车即可执行
4.Makefile
执行文件:***1.o ***2.o
(TAB键)gcc ***1.o ***2.o –o 执行文件
***1.o:依赖文件
(TAB键)gcc -c 依赖文件.c ***1.o
***2.o:依赖文件
(TAB键)gcc -c 依赖文件.c ***2.o
Clean:
(TAB键)rm–rf ***1.o ***2.o 执行文件
第10章图形用户接口(GUI)
定义:是操作系统和用户的人机接口。
*极大地方便了非专业用户的使用,人们不再需要死记硬背大量的命令,而可以通过窗口、菜单方便地进行操作。
●Linux 操作系统中,GUI与内核分开
●Windows中,OS与GUI捆绑在一起
1.图形基础设施:底层的图形驱动引擎,是由操作系统提供。作用:为更高一
层图形或者图形应用程序提供基本函数库/依赖库。
2.高级图形函数库:一类只提供基本的点、线、文本区域处理,另一类以窗口
部件形式,可视化编程
3.GUI窗口管理系统:复杂、难点

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。