嵌入式系统移植的简单介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式操作系统的移植
综述:嵌入式操作系统与通用操作系统的最显著的区别之一就是它的可移植性。
一款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。
为了使嵌入式操作系统可以在某款具体的目标设备上运行,嵌入式操作系统的编写者通常无法一次性完成整个操作系统的代码,而必须把一部分与具体硬件设备相关的代码作为抽象的接口保留出来,让提供硬件的OEM厂商来完成。
这样才可以保证整个操作系统的可移植性。
一、移植的定义及其目的
由于嵌入式系统所使用的芯片型号多种多样,很多芯片不能直接兼容,所以通过修改部分代码,把能在甲芯片上运行的程序,也能在与之不完全兼容的乙芯片上正确运行,就叫移植.
嵌入式操作系统移植的目的是指使操作系统能在某个微处理器或微控制器上运行。
二、移植的方法与具体操作步骤
2.1 在进行移植时,我们的首要任务就是要建立一个最基本的开发环境。
该环境具备一套跨平台开发工具。
它包含有编译器、连接
器、除错器等,另外还要准备制作文档系统所需的软件。
以PC机作为宿主机构建一套完整的交叉编译系统来调试目标板。
而在目标平台上只需要准备一段开机程序,如Ether boot,Red boot等,此程序可以在除错阶段取得系统的映像(image)文件后启动或者直接从Flash room中来引导系统。
一旦启动后就进入Linux操作系统,同时也可
以使用GDB server作为远端除错工具。
2.2 内核的移植
为了使Linux内核能在不同的目标平台上运行,要求我们根据平台的处理器类型和外围接口,对Linux内核文件进行正确的配置,同时。
修改内核文件Linux移植的主要步骤。
如果修改完Linux的内核文件,使其能在目标平台上正确跑起来,那么整个移植过程就基本完成了。
2.3 移植的具体步骤
(1)首先获取某一版本的Linux内核源码,根据具体的目标平台对源码进行必要的改写(主要是修改体系结构相关的部分);
(2)添加一部分外设驱动(如网卡驱动、USB驱动),打造一款适合于目标平台的新的操作系统,也就是常说的内核配置或内核定制;(3)对该系统进行针对目标平台的交叉编译,生成一个内核映象文件;
(4)最后通过一些手段将该映象烧写到目标平台中。
三、移植过程中如何进行剪裁
3.1 进行方式
进行的方式必须有效率的建立系统,基本可行的方法有两种:
(1)从其中一个发行版本中把不必要的部份全部删掉,留下我们想要的系统。
(2)把系统所有的功能依规格从新建立起来。
3.2开发环境
要建立一个最基本的开发环境,必需具备一套跨平台的开发工具
(Cross Development Kit) ,包含有编译器,连接器,调试器等。
另外还要准备制作文件系统所需的程序。
而目标平台上,只需准备一段系统开机程序,如etherboot[5] ,redboot[6] 等。
此程序可以在调试阶段时,从网络取得系统映像档(image) 后启动,或是直接从闪存中,把系统启动。
一旦启动后,就进入Linux 的操作系统,同时亦可使用GDB server 作为远端调试的工具。
3.3 开发过程
可以分为几个部份。
首先要准备Linux 的内核,配上根目录所在的文件系统,再加上守护进程程序和应用程序等,经过压缩后,打包成一个含有内核的映像文件。
目标平台透过网络或闪存,取得映像文件后,进行解压缩,经过系统启动,初始化后,就是一台使用嵌入式Linux 为操作系统的机器。
四、“软件编程”如何应用嵌入式操作系统的多任务实时处理的特点
一方面,实时操作中的多任务引起的并发性和实时性,要求操作系统对资源分配具有更强的控制能力。
通常的办法是采取设立前台与后台两个作业的分配办法。
前台作业中包含实时采集、控制、处理有关的任务,任务优先级较高;后台作业一般是对数据进行分析、输出数据、响应操作员请求等任务,优先级较低。
后台作业中与后台作业并非完全孤立的;后台作业所需数据由前台作业存储共享内存区内,作业之间通过共享存储区进行数据交换。
另一方面,实时任务总是由某个事件发生或时间条件满足来激活。
事件有两种:内部事件和外部事件。
时间驱动也有两种:按绝对时间驱
动和按相对时间驱动。
内部事件驱动是指某一程序运行的结果导致另一任务的启动,这个结果可能是数据满足一定条件,也可能是释放了某一资源;而最典型的实时任务是由外部事件驱动的。
在实时系统中,外部事件发生有时是不可预测的,由外部事件驱动的任务一般是需要立即执行的任务,它的优先级最高。
绝对时间驱动是指在某指定时刻执行的任务,也就是在自然时钟的绝对时间执行。
相对时间驱动是指周期性执行的任务,总是相对上一次执行时间计时,执行时间间隔一定。
除了周期性任务外,还有一些同步任务也可能由相对时间驱动,如等待某种条件到来。
等待时间是编程设定的。
相对时间可用计算机内部时钟或软件计时。
我们在实时设计当中,这两方面的问题都有所体现,所有的事件驱动和时间驱动都体现在设置相应的任务标识和线程标识。
当硬件环境一定时,依据这些标识,通过安排系统内中断响应方式和调整任务调度算法,可以有效解决多任务并行问题,因为系统的实时性主要取决于这两点。