嵌入式操作系统的移植

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式操作系统的移植
——以Linux系统移植为例
摘要:本文简述了嵌入式操作系统及其移植的目的,分析了嵌入式操作系统移植的过程与具体操作步骤,提供了移植过程中的剪裁方法,并介绍了多任务实时处理在软件编程中的应用。

0 引言
随着科技的发展,微机的硬件规模越来越大,功能越来越强,从而给运行嵌入式操作系统提供了物质基础。

各种操作系统就此应运而生。

嵌入式操作系统,是一种运行在嵌入式硬件平台上,对整个系统及其所操作的部件、装置等资源进行统一配置、协调和控制的系统软件,负责嵌入系统的全部软、硬件资源的分配、调度工作,控制协调并发活动。

与普通的操作系统相比,嵌入式操作系统主要有微型化、可裁剪性、高可靠性、易一致性几个不同点。

按应用范围划分,有通用型和专用型两种。

通用型可用于多种应用环境,如:Windows CE、VxWorks、µCLinux以及µC/OS-Ⅱ等;专用型则有Symbian、Plam OS等。

1 嵌入式操作系统移植的目的
在电子技术高速发展的今天,单片机嵌入式技术的应用越来越广泛。

嵌入式实时操作系统在目前的嵌入式应用中,尤其在功能复杂、系统庞大的应用中也愈来愈重要,其能大大提高系统可靠性和开发效率。

市场上单片机的品牌、种类、型号繁多,如:Inter公司的51系列单片机、德州仪器(TI)的 TMS370和MSP430两大系列通用单片机等。

由于嵌入式操作系统的可移植性,我们只需对嵌入操作系统做一些修改,就可以使其运行在不同的硬件平台上,帮助我们去管理和控制不同的硬件资源和调度任务。

这个修改的过程就可以称作移植,对于嵌入式操作系统在实际工程中的推广应用有着重要的意义。

由于嵌入式系统所使用的芯片型号多种多样,很多芯片不能直接兼容,所以通过修改部分代码,把能在甲芯片上运行的程序,也能在与之不完全兼容的乙芯片上正确运行,就叫移植。

系统移植的概念也相近,只是涉及到的芯片更多。

2 嵌入式操作系统移植的方法及具体步骤
对不同的操作系统,其移植方法不同。

以下以Linux操作系统的移植为例进行说明。

2.1 移植准备
在进行移植时,首要任务是建立一个最基本的开发环境。

该环境具备一套跨平台开发工具。

它包含有编译器、连接器、除错器等,另外还要准备制作文档系统所需的软件。

以PC机作为宿主机构建一套完整的交叉编译系统来调试目标板。

而在目标平台上只需要准备一段开机程序,如Ether boot,Red boot等,此程序可以在除错阶段取得系统的映像(image)文件后启动或者直接从Flash room中来引导系统。

一旦启动后就进入Linux操作系统,同
时也可以使用GDB server作为远端除错工具。

2.2 移植过程及具体操作步骤
Linux操作系统的移植总共三大部分:内核的重新编译,bootloader的重新编译和根文件系统的移植。

主要有以下几个过程:
(1)内核配置
(2)体系结构相关代码修改
(3)连接脚本
(4)中断处理
(5)加载文件系统
(6)编写驱动程序
(7)编译文件系统
2.2.1 内核的重新编译
为了使Linux内核能在不同的目标平台上运行,需要根据平台的处理器类型和外围接口,对Linux内核文件进行正确的配置。

如果修改完Linux的内核文件,使其能在目标平台上正确跑起来,那么整个移植过程就基本完成了。

具体步骤如下:
(1)首先获取某一版本的Linux内核源码,根据具体的目标平台对源码进行必要的改写(主要是修改体系结构相关的部分);
(2)添加一部分外设驱动(如网卡驱动、USB驱动),打造一款适合于目标平台的新的操作系统,也就是常说的内核配置或内核定制;
(3)对该系统进行针对目标平台的交叉编译,生成一个内核映象文件;
(4)最后通过一些手段将该映象烧写到目标平台中。

2.2.2 bootloader的重新编译
bootloader的重新编译一般分为两个阶段:
(1)根据开发板的硬件资料做一些初始化的工作(汇编):
初始化PLL;
初始化存储空间,SDRAM, 地址空间分配;
初始化串口,LED 等基本调试硬件;
设置系统运行模式,设置各种模式的堆栈。

(2)实现bootloader通用的一些功能:
用户界面(命令行);
串口驱动,网口驱动,usb驱动,flash驱动;
下载协议xmoden,tftp;
下载功能(内核,ramdisk等),烧写flash。

2.2.3 根文件系统的移植
移植根文件系统需要文件:busybox-1.13.4.tar.bz2
(1)解压busybox-1.13.4.tar.bz2
(2)编辑Makefile文件
(3)进行默认配置
(4)对配置信息进行修改
(5)编译
(6)对配置信息进行修改
(7)创建配置文件
(8)复制常用的库文件
3 移植过程中的剪裁方法
3.1 进行方式
进行方式必须高效地建立系统,基本可行的方法有两种 :
(1)从其中一个发行版本中把不必要的部份全部删掉,留下我们想要的系统。

(2)把系统所有的功能依规格从新建立起来。

3.2 开发环境
要建立一个最基本的开发环境,必须具备一套跨平台的开发工具(Cross Development Kit),包含有编译器,连接器,调试器等。

另外还要准备制作文件系统所需的程序。

而在目标平台上,只需准备一段系统开机程序,如etherboot,redboot等。

此程序可以在调试阶段时,从网络取得系统映像档(image)后启动,或是直接从闪存中,把系统启动。

一旦启动后,就进入Linux的操作系统,同时亦可使用GDB server作为远端调试的工具。

3.3 开发过程
首先要准备Linux的内核,配上根目录所在的文件系统,再加上守护进程程序和应用程序等,经过压缩后,打包成一个含有内核的映像文件。

目标平台透过网络或闪存,取得映像文件后,进行解压缩,经过系统启动,初始化后,就是一台使用嵌入式Linux为操作系统的机器。

4 多任务实时处理在软件编程中的应用
实时设计中,主要涉及到两方面的问题:多任务实时处理的并发性与实时性以及其激活方式。

所有的事件驱动和时间驱动都体现在设置相应的任务标识和线程标识。

当硬件环境一定时,依据这些标识,通过安排系统内中断响应方式和调整任务调度算法,可以有效解决多任务并行问题,因为系统的实时性主要取决于这两点。

4.1 并发性与实时性
实时操作中的多任务引起的并发性和实时性,要求操作系统对资源分配具有更强的控制能力。

通常的分配办法是设立前台与后台两个作业。

前台作业中包含实时采集、控制、处理有关的任务,任务优先级较高;后台作业一般是对数据进行分析、输出数据、响应操作员请求等任务,优先级较低。

后台作业中与后台作业并非完全孤立的;后台作业所需数据由前台作业存储共享内存区内,作业之间通过共享存储区进行数据交换。

4.2 激活方式
实时任务总是由某个事件发生或时间条件满足来激活。

事件有两种:内部事件和外部事件。

时间驱动也有两种:按绝对时间驱动和按相对时间驱动。

内部事件驱动是指某一程序运行的结果导致另一任务的启动,这个结果可能是数据满足一定条件,也可能是释放了某一资源;而最典型的实时任务是由外部事件驱动的。

在实时系统中,外部事件发生有时是不可预测的,由外部事件驱动的任务一般是需要立即执行的任务,它的优先级最高。

绝对时间驱动是指在某指定时刻执行的任务,也就是在自然时钟的绝对时间执行。

相对时间驱动是指周期性执行的任务,总是相对上一次执行时间计时,执行时间间隔一定。

除了周期性任务外,还有一些同步任务也可能由相对时间驱动,如等待某种条件到来。

等待时间是编程设定的。

相对时间可用计算机内部时钟或软件计时。

相关文档
最新文档