内核移植(精选八篇)
内核移植 篇1
Linux内核具有内核稳定等特点,并且十分方便定制,这个内核具有完善健全的网络通信和进行文件管理的模式和机制,使其成为计算机领域的一种新型的软件。在一些职能手机中都有相当大量的运用。然而,在嵌入式发展的领域,各种硬件系统的结构都不尽相同,大多都是具有种类繁多的特点。本文中我们主要研究如何使linux快速的移植到新的硬件平台上,成为了当前必须要解决的一个问题。
1 linux 操作系统
操作系统是计算机系统中的一个系统软件,这个系统管理与控制计算机中的硬件设施和那软件设施。还对整台计算机的工作流程进行的组织与合理的把握,组织这些流程方便我们对计算机资源进行更有效的整合利用,从而方便信息的集中,为浙西额计算机用户们提供起来一个功能更加强大的。更加方便快捷高效的工作环境。Linux是逐渐在互联网被大众所熟知的,摒弃而这个内核系统也在一天天的不断完善,具有很多优势,高效稳定广泛适用于各种各样的信息平台。操作系统是存活在在计算机中的一个最为基本的系统,这个系统负责计算机中的所有测资源,包括硬件与软件组织,操作系统也是唯一一个能够直接的与计算机的硬件系统打交道的软件,同时还为计算机用户提供了良好的界面,因此操作系统是协调计算机的各组成分之间关系的重要的软件系统。在我们国家随着操作系统的出现和问世以来,我们对操作系统的使用,也促进了操作系统的发展,这些是自从计算机问世以来,就在这个领域内取得了一个重大的进展。操作系统具体指的就是一种系统软件,操作系统的功能有:管理系统资源、控制一定的程序的执行、提供各种类型的个性服务,从而为用户高效能有效充分的使用来提供一个最优化最合理的运行环境。
Linux内核采用的个体的内核结构,并且还与一些具体的与之有关的硬件平台保持的有密切的关系。如果我们要把linux内核往新的硬件平台上移植,就需要克服种种不易于解决的难关。我们只有仔仔细细的对linux内核移植的理论进行深刻的研究,充分的分析linux内部的体系和结构构造,还要尽量的保证系统内核中的硬件结构的体系的结构与之无关的部分要区分开来,我们才能从根本上保证好Linux内核的真正高效准确的移植。Linux从90年代才问世,发展到21世纪的今天,已经成为一项功能强大并且设计勾结都很完善的操作系统之一,在各种商业操作系统中站稳了脚跟。在一些新兴的嵌入式的领域之中也取得了长远的发展,又因为硬件产品的更新换代快,种类繁复多样。为了使linux能够快速适应这些新的硬件产品,广泛的拓展这个linux的使用的范围,我们就需要对Linux的内核代码进行必要的移植和调试。Linux在自己的pc上,自行设计了操作系统并且开发了真正属于他自己的一个程序。
2 linux 操作系统的内核移植
Linux内核移植的难点:这种linux内核具有效率高、结构单一等特点。但是这种内核的移植比微内核的移植要相对的差一些。Linux设计是以实用为最主要的目的,实用也是其设计理念。所以对linux系统来说,它的设计和开发最注重的是整个系统的效率,甚至在设计中不惜牺牲部分来促进整个移植系统的效率。Linux采用单体形成内核的结构,降低了内核的可移植性。微内核作为一种新型的操作系统,也是十分先进的,微内核的出现标志着我国计算机的长远发展,也是一种潮流和趋势。但是目前微内核的发展状况并不是很好,这个系统的通信效率不高。通信效率的降低直接影响到了整个操作系统的性能,导致性能的降低。但是linux没有使用微内核结构,而是采用了最为简单快捷的单内核来进行运行。采用的是单体内核的结构模式,这个单体内核的各个部分的关系都十分的紧密,虽然我们要进行的移植工作大部分都集中在计算机的硬件部分。但是由于这个操作系统的各个部分都是密切的相连的,即使是对其中的一个部分做了修改,就会立即牵连到奇他的部分,其他部分的性能立即会受到影响。这些都增加了移植工作的难度。又由于linux的设计是以实用并且高效率为最主要的目标,所以我们一定要根据这些硬件的特性来对系统内核进行一定的优化。但是在这个内核中的很多的硬件特性都是在固定的硬件中才会存在的。如果说把其他一些的硬件平台去,若是对这个内核部分进行大幅度的修改,就会普遍增加内核进行移植的难度。
Linux内核对尽情移植提供了有效的支持,虽然linux内核采用的并不是一种相对灵活便捷的单体内核机制,但这些并没有真正的影响到linux内核平台的无关性。我们是想一下,linux之所以能够成为目前来说,最广泛的支持硬件平台的一种操作系统。除了拥有一大批优秀高质量的开发团队以外,最主要的是在计算机领域拥有自己的先进的思想,在这些思想的引领下,从而提出来更多先进的结构。Linux用来提高内核可移植性的三种最主要的方法。
经过这么多年的发展,嵌入式的系统已经逐渐的渗透到人们的工作生活与学习中。嵌入式
系统现如今得到了广泛的应用。我们平常生活中用到的mp3等数码工具,这些产品中用到的都是嵌入式系统,这种系统在某种程度上改变了我们的生活方式。让我们的生活变得更加的智能与电子化。到目前为止,我国嵌入式正处在蓬勃发展中。在嵌入式开发系统的软件开发的环境设计中,主要涉及的内容有Linux移植,尽管嵌入式系统有很宽广的市场和大量的需求,但是嵌入式系统的发展仍然是一个无比痛苦和缓慢的过程。除了这些系统引导的程序以外,一个完全嵌入式的linux系统还需要一个包括linux内核以及必须要有的设备驱动程序、以及必不可缺少的文件系统,这些都是嵌入式linux系统移植的工作的主体部分。掌握了这些基本的内核结构之后,接下来就要在目标板上进行实际中的移植工作。相关的内核文件可以从网站上直接下载,进行移植工作我们首先要做的工作就是实现这些内核对不同的设备的设置。在进行移植的过程中我们要注意我们需要掌握linux内核的移植的技术,充分的利用linux开放源代码的各种优势,使linux真正的为我们的科研工作和商业服务。
我们需要介绍linux内核的主要工作由:系统介绍操作系统的一般理论,研究linux内核进行移植的基本原理。并且还要详细介绍linux内核移植的困难之处,并且还要对linux系统中增加系统的可移植性进行比较与分析,进一步介绍linux移植工作的主要内容和方法。Linux在国内的推广比在国外晚了好多年,近些年来有更多的软件爱好者来学习linux的应用与开发。与此同时,很多专业的高校都把这些作为实验课的内容,推广了linux技术的同时也为其发展奠定了基础。随着linux核心技术的不断成熟与发展,它的各种性能都在逐步趋向稳定,安装起来也具有方便快捷等特点,支持多种语言的发行版本。并且linux也得到了广大厂商的大力支持,这一切都使linux这个年轻有活力的系统充满了新的希望和活力。Linux可以说是完全是一个互联网时代的产物,因为它诞生于互联网,发展于互联网,并且在互联网中不断的壮大起来。
3 结语
内核移植 篇2
关 键 词:SkyEye 虚拟;仿真 Linux
1 引言
目前,以消费类电子产品和移动终端应用为代表的嵌入式系统应用开发正在快速发展,市场需求的不断变化与多种异构硬件体系结构的并存,给嵌入式系统开发与教学带了一系列挑战,面对嵌入式系统开发与教学过程中存在的研发成本过高、硬件环境不稳定等问题,引入一种快速、高效和低成本的开发环境,对于提高嵌入式系统的开发效率和开发质量具有重要意义。
2 SkyEye概述
SkyEye是一个由清华大学陈渝博士开发并建立的开源软件项目,中文名称为“天目”。SkyEye的目标是在常规的Linux和Windows平台上仿真多种主流的嵌入式开发板和外部设备,实现一个可扩展的硬件模拟框架。SkyEye属于一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件,其硬件模拟逻辑结构图下图1所示。目前SkyEye只提供Linux 和Windows两种平台下的安装程序。
3 基于SkyEye嵌入式开发环境的建立
SkyEye共包含两个软件包,一个为SkyEye的发布版本包,另外一个为SkyEye的测试套件包,其中测试套件包用来对相应版本的SkyEye软件包进行测试。
3.1 安装SkyEye
(1)从source网站上下载SkyEye的最新版本1.3.3的源代码,以root权限登录Linux后解压
# tar xvjf SkyEye-1.3.3_rel.tar.gz
(2)编译程序
# ./configure
#make lib
#make
这里需要说明的是,其中make lib用来编译第三方的库,make来编译SkyEye的源代码
(3)安装SkyEye到opt目录下
# make install_lib
# make install
3.2 SkyEye的目录与文件分析
安装成功后会在opt目录下生成以下目录
Bin:存放SkyEye的工具。其中mknandflashdump用来制作nandflash镜像文件,SkyEye为命令行应用程序,prof_convert用来把代码覆盖率的结果文件进行格式转换,uart_instance可以通过一个xterm终端来显示串口的输出。
Include: SkyEye开发插件时所用到的头文件,这些头文件定义了SkyEye提供的API函数的原型
Info:info格式的文档
Lib:存放SkyEye的核心库libcommon.,so和其他一些以动态库存在的插件
Testsuite:存放测试用例
4 在SkyEye中模拟基于S3C2440内核的移植
4.1 构建基于ARM S3C2440仿真环境,建立配置文件skyeye.config,内容如下
cpu: arm920t
mach: s3c2440x
# physical memory
mem_bank: map=M, type=RW, addr=0xc0000000, size=0x00800000
mem_bank: map=M, type=RW, addr=0xc0800000, size=0x00800000, file=./initrd.img
mem_bank: map=M, type=RW, addr=0xc1000000, size=0x01000000
# all peripherals I/O mapping area
mem_bank: map=I, type=RW, addr=0x48000000, size=0x20000000
mem_bank: map=I, type=RW, addr=0x19000300, size=0x00000020
net: type=cs8900a, base=0x19000300, size=0x20,int=9, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1
lcd: type=s3c2440x, mod=gtk
#dbct:state=on
4.2 裁减编译Linux内核
# make xconfig
# make
4.3 将编译生成的内核镜像文件和配置文件复制到/opt/bin/下,执行SkyEye
#./skyeye-e vmlinux skyeye.config
5 结束语
目前,笔者移植的内核版本为2.6.30.4的Linux已经能稳定地运行在SkyEye虚拟平台上,为嵌入式软件设计和嵌入式系统教学节约了大量的硬件平台的搭建时间,并有效的结约了成本。当然由于SkyEye的目标不是验证硬件逻辑,而是协助开发、调试和学习系统软件,所以在实现上SkyEye与真实的硬件环境相比还是有一定差别的。SkyEye在时钟节拍的时序上也不保证与硬件完全相同,对软件透明的一些硬件仿真进行了一定的简化。相信随着该开源项目的不断发展,SkyEye的易用性和通用性会得到提高,并成为嵌入式领域开发的有效工具。
参考文献
[1] 李明,陈渝.一个开放源码的嵌入式仿真环境——SkyEye.单片同与嵌入式系统应用.2003
[2] 宋靖,吴庆波.嵌入式系统仿真环境运行环境SkyEye应用研究.微处理机.2007
[3] 周兆丰,候向峰. 基于SkyEye的嵌入式系统仿真环境的构建. 单片同与嵌入式系统应用.2010
[4] skyeyev3_usermanual-v6.http://sourceforge.net/
[5] Li Ming.Analysis and Comparison of Two Simulation Environment of Embedded Software.IC&Components.2003
内核移植 篇3
随着计算机技术及集成电路技术的深入发展,嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。伴随着巨大的产业需求,我国嵌入式系统产业的人才需求量也一路高涨,嵌入式开发将成为未来几年最热门最受欢迎的职业之一。随着“物联网”、“三网融合”等不断提速,3G网络全面铺开,将带来更大的人才需求。在未来相当长的时间内,嵌入式软件人才都将是企业争夺的目标。在嵌入式开发学习过程中,实验条件往往是嵌入式专业发展的瓶颈问题。文献[4]中给出了一种利用软件技术来搭建一个虚拟的嵌入式开发环境的方法,在此基础上,本文通过对Linux内核进行移植和裁剪,使其可以在文献[4]中的嵌入式开发环境中运行,实现特定的功能和用途。
1 Linux内核移植与裁剪
众所周知,Linux是一个开放源代码的操作系统,它遵循GPL规则,我们可以自由地使用、修改和扩展它。正是由于这一特色,Linux受到越来越多人士的青睐。在使用Linux系统过程中,我们可以随时对Linux内核进行重新编译或者升级,使得该内核更适合自己的系统或者发挥更大的作用。那么在嵌入式开发中,我们也可以对Linux内核进行裁剪,并将裁剪后的内核移植到嵌入式系统中,进行嵌入式开发。
嵌入式中的移植,简单地说就是程序写好后,使用一种特殊的编译器编译源码并链接成可执行二进制文件,这个程序就能拿到相应的嵌入式微处理器上运行。当然,这时这个程序是不能在普通PC上运行的。这种特殊的编译器在普通PC机上运行,但编译的程序运行于其它CPU,我们一般称为交叉编译器。在嵌入式移植中,一般包含内核移植和系统移植两部分,这里主要介绍的就是内核移植。内核移植其实就是把可以在普通电脑上运行的Linux系统内核进行裁剪,使之可以运行在各种各样的嵌入式系统中。
在进行内核移植过程中,首先需要一个新版本的交叉编译工具链gcc。Linux内核一般会依赖许多gcc特有的特性,所以选择gcc尤为重要,gcc选择不对,可能会导致移植过程繁琐,错误频出。其次,编译链接库也是必需的,而且必须是目标平台的编译链接库。gcc和编译链接库都准备好的话,并且是和内核相匹配的版本,就可以进行内核移植。
2 虚拟开发环境中的内核移植与裁剪
在进行Linux内核移植过程中,我们采用的Linux内核版本是2.6.20.20,虚拟开发环境采用的是REDHAT ENTERPRISE LINUX 5.4+skyeye1.3.2,下面介绍具体操作步骤。
2.1 安装交叉编译工具链arm-linux-gcc-4.4.3
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译,这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。由于Linux内核2.6.20.20版本较高,我们要选择一个和该内核版本相匹配的交叉编译工具链,这样编译过程中出错比较少,这里我们选择arm-linux-gcc 4.4.3版本。假设arm-linux-gcc-4.4.3已经被下载到根目录下,安装过程如下:
2.2 Linux原始内核2.6.20.20裁剪和移植
Linux是一个可移植性非常好的操作系统,它广泛支持了许多不同体系结构的计算机。通常情况下Linux内核仅仅支持普通的计算机体系结构,而且体积较大。为了让其支持嵌入式系统,那么就必须对内核进行移植和裁剪,减少其体积和不需要的代码。在进行移植之前,我们必须对原始的Linux内核进行简化和部分修改,过程如下:
首先下载到linux-2.6.20.20.tar.bz2文件,然后进行解压缩。
jxvflinux-2.6.20.20.tar.bz2
解压后会在目录里面生成一个linux-2.6.20目录,进入到该目录,进行内核裁剪和修改。
(1)gedit Makefile&
将ARCH=$(SUBARCH)改成ARCH=arm
将CROSS_COMPILE=改成CROSS_COM-PILE=arm-linux-
(2)make s3c2410_defconfig
(3)gedit scripts/mod/sumversion.c&
添加#include"limits.h"
(4)gedit include/asm-arm/arch-s3c2410/memory.
h&
将#define PHYS_OFFSET UL(0×30000000)改成#define PHYS_OFFSET UL(0x C0000000)
(5)gedit include/asm-arm/arch-s3c2410/map.h&
将#define S3C2410_CS6(0×30000000)改成#define S3C2410_CS6(0x C0000000)
(6)gedit arch/arm/mach-s3c2410/time.c&
将函数s3c2410_timer_setup中的if(tcnt>0xffff){改成if(tcnt>0xffffffff)
2.3 linux内核2.6.20.20编译
编译前的配置:
make menuconfig
将Boot options->Default kernel command string改成mem=32M console=tty SAC0 root=/dev/ram initrd=0x C0800000,0x00800000 ramdisk_size=2048 rw
配置完成后,就可以进行编译了,编译命令:
#make
整个编译过程比较长,编译成功后会在linux-26.20目录里面生成一个vmlinux文件,这就是编译后的arm linux内核镜像。
2.4 在Sky Eye中运行linux内核2.6.20.20
在linux-2.6.20目录中建立一个skyeye.conf配置文件,并修改部分配置文件代码,修改方法在文献[4]中已经有介绍,这里不在罗列,可以参照skyeye帮助文件。
然后启动skyeye运行linux内核:
#skyeye-e vmlinux-n
运行后,会出现ARM LINUX的标志,则表示该内核已经成功运行了。
当出现/>提示符后,就可以在该提示符后输入常用的Linux命令和运行简单的嵌入式程序。
3 结束语
本文主要以虚拟嵌入式开发环境为载体,对Linux内核2.6.20.20进行了移植和裁剪,使得在嵌入式系统中成功运行了linux内核,使得虚拟开发环境的功能和实用性得到更大的提高。在后续的研究中,我们还将在此基础上进行LCD、触摸屏、网络功能、远程调试等方面进行扩展和移植。
参考文献
[1]陈渝,杨晔,李明,等.嵌入式系统仿真环境—SkyEye[J].电子设计应用,2004,(2).
[2]陈渝,李明,杨晔.源码开放的嵌入式系统软件分析与实践-基于SkyEye和ARM开发平台[M].北京:北京航空航天大学出版社,2004.
[3]尹文超,陈渝,等.SkyEye模拟器的LCD及TouchScreen模拟模块的设计、实现与验证[J].计算机科学,2005,32(6):189-192.
[4]李小航.基于虚拟技术的嵌入式软件开发环境的构建与实践[J].电脑知识与技术,2010,(32).
[5]SkyEye网站[EB/OL].http://www.skyeye.net/.
内核移植 篇4
1 Linux内核移植环境介绍
Linux内核移植需要Linux操作系统和交叉编译环境的支持。Linux操作系统采用Ubuntu 11.04版本。Ubuntu是一个目前非常流行的Linux操作系统。它基于Debian发行版和GNOME桌面环境。和其他Linux发行版相比,Ubuntu非常易用,预装了大量常用软件,中文版的功能也较全,在Windows操作系统下不用分区即可安装使用,就如同安装一个应用软件那么容易。
交叉编译,就是在一个平台上(如X86架构)生成另一个平台上(如ARM架构)上可执行的代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。交叉编译环境采用arm-linux-gcc-3.4.5作为基于ARM9平台的编译器,其编译出来的程序可以在ARM平台上直接运行。
2 Linux内核的移植过程
2.1 交叉编译环境的搭建
假设将下载好的arm-linux-gcc-3.4.5解压缩到“/usr/arm-linux-gcc”目录下。首先,对其进行解压缩。
$tar jxvf arm-linux-gcc-3.4.5.tar.bz2
其次,将arm-linux-gcc命令的存储路径追加赋值给环境变量PATH。
$PATH=/usr/arm-linux-gcc/3.4.5/bin:$PATH
最后,编辑“/etc/profile”文件,添加将arm-linux-gcc存储路径追加赋值给系统环境变量PATH的命令,实现开机自动加载arm-linux-gcc命令。
PATH=$PATH:/usr/arm-linuxgcc/3.4.5/bin
2.2 Linux内核移植
内核移植就是将内核从一个硬件平台转移到另外一个硬件平台上运行。一般是从一个与开发板相匹配的Linux内核开始,进行适当的裁剪或增加。在嵌入式Linux系统开发中,在用户的硬件系统中,CPU和其运行的硬件平台都是根据项目的特定需求来进行开发的。本文所采用的Linux内核为Linux-2.6.22。假设将下载好的Linux-2.6.22解压到“/home/work/Linux-2.6.22”,其具体实现步骤如下。
(1)在Linux-2.6.22内核顶层Makefile里指定处理器体系结构arm与交叉编译器arm-linux-;
(2)进入内核源码目录,在终端下执行命令“make s3c2410_defconfig”,在内核根目录下生成配置文件;执行“make menuconfig”命令,启动配置界面,点击File Systems→Miscellaneous filesystems,勾选“YAFFS file system support”选项,使其支持yaffs2文件系统。
(3)修改内核代码使其完全匹配实验所用开发板。修改内核源码“arch/arm/mach-s3c2440/mach-smdk2440.c”,将ARM芯片时钟频率改为12MHz;修改源码“arch/arm/plat-s3c24xx/common-smdk.c”中的NAND Flash分区方法与Bootloader的相同,分区方法如下所示。
(4)使用命令“make zImage”可以生成z Image格式的内核映像文件。内核映像文件位于“arch/arm/boot”。
最后,将编译好的内核代码通过的BootLoader下载到开发板上,Linux操作系统就成功的移植到了ARM9处理器中。
3 结语
本文针对一个特定的开发板,提供了移植嵌入式Linux内核的过程与方法。对Linux-2.6.22内核版本进行裁减、移植,编译生成的内核在ARM9处理器的目标板上成功运行,且保留了Linux原有的工作稳定的特点。将Linux内核移植于嵌入式系统中作为嵌入式系统的底层研发平台是一个复杂的问题,移植后系统的实时性、稳定性、安全性和精简程度等方面问题还需要在以后的设计中进一步研究。
参考文献
[1]韩敬海.嵌入式Linux开发技术及实践[M].西安电子科技大学出版社,2014.
内核移植 篇5
嵌入式系统就是以应用为中心,以计算机技术为基础的软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。Linux操作系统是一种性能优良、源码公开且被广泛应用的免费操作系统,由于其体积小,可裁减,运行速度高等优点,因此可以作为研究嵌入式操作系统和非实时操作系统的典范。EL-ARM-830+型教学实验系统是一种综合的教学实验系统,该系统采用了ARM920T核,32位微处理器,实现了多模块的应用实验。在实验板上有丰富的外围扩展资源,可以完成ARM的基础实验、算法实验和数据通信实验、以太网实验。
1 Linux的实验环境搭建
1.1 Redhat9.0操作系统的安装
安装Redhat9.0前,先把串口配置好,这是建立Linux系统和试验箱之间的串口通信。配置完以后在启动Linux系统时点击全屏,这样做的目的是让Linux系统占取网络资源。点击VM→setting在弹出的窗口点击左下角的Add按钮,此时选择serial Port,依次点击“下一步”,直到配置完串口。
1.2 配置NFS网络文件系统
首先在Linux主机的终端上执行setup,弹出菜单界面后,选中Firewall configuration,回车,进入系统服务选项菜单,选择no firewall关闭防火墙(如果安装了防火墙),按空格键就会选中,然后退出。但是,setup里面会照样显示防火墙设置是high的,这个可以不必理会。之后选中System services,回车,进入系统服务选项菜单,在其中选中[*]nfs,然后按F12键退出,再选择方向键,退出setup界面,返回到命令提示符下。利用编辑器打开/etc/exports文件(输入命令vi/etc/exports),按A进入文本输入模式,将这个默认的空文件修改为只有如下一行内容:、
/(rw)
/home/nfs
然后,保存退出(按ESC键进入命令模式,输入:进入到最后行模式,输入wq!保存退出),之后改变目录到/etc/rc.d/init.d/下(输入命令cd/etc/rc.d/init.d/),执行如下命令:
./nfs start
终端内输出:
(1)安装交叉编译器。打开Linux系统下的终端,在里面输入命令cd/linuette/RPMS/改变目录到/linuette/RPMS下,输入如下命令:
#rpm-Uvh*.rpm
等待系统安装,如果所有的RPMS内的文件全部正确安装,将会在根目录下的/opt文件夹内生成一个host文件夹,交叉编译库就在该目录下,到此交叉编译环境就搭建好了。
(2)用交叉网线连接主机和实验系统。在Linux的开始菜单里启动终端,在终端[root@localhost root]#minicom–s回车,按S键选择Serial Port setup回车,弹出串行口设置界面,按A键编辑Serial Device:/dev/ttys0回车;按E键,再按I键,回车,选择为Bps/Par/Bits:115200 8N1回车;按F键,选择Hardware Flow Control:No。设置完后回车,然后用上下选择键,选中Modem and dialing,将Init string,Reset string,Hang-up string设置为空,再选中Save setup as dfl这一项,回车,保存为默认的配置,下次进入minicom时就不用再设置了。用上下选择键选中Exit回车退出设置,进入minicom。
(3)Linux系统下网络设置。点击左下角的小红帽,选择系统设置→网络,然后双击设备eth0的蓝色区域,进入以太网设置界面,在静态设置IP地址栏下面输入与宿主机一个网段的IP地址、网关及子网掩码,确定后激活网络设备。
(4)Ping通主机和实验系统。在minicom下,给系统上电,系统正常起来后,利用ifconfig eth0xxx.xxx.xxx.xxx来改变实验系统的IP地址,让该地址的前三段和主机的前三段一致,最后的一段,可以选择与主机不重复的小于255的任意值。利用mount命令,挂载主机的nfs系统下的共享目录。
利用命令chmod 777/home/nfs改变/home/nfs文件夹的属性,让其变为可读可写,输入mount–o nolock 192.168.0.1:/home/nfs/mnt/yaffs回车,即可完成把主机上的/home/nfs下的文件挂载到实验系统的/mnt/yaffs目录下。
2 BootLoder引导程序的移植
在嵌入式系统中,BootLoader的作用与PC机上的BIOS类似,通过BootlLoader可以完成对系统板上的主要部件如CPU,SDRAM,FLASH、串行口等进行初始化,也可以下载文件到系统板上,对FLASH进行擦除与编程。当运行操作系统时,它会在操作系统内核运行之前运行,通过它,可以分配内存空间的映射,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统准备好正确的环境。因此,正确建立Linux移植的前提条件是具备一个与Linux配套、易于使用的Boot Loader,它能够正确完成硬件系统的初始化和Linux的引导。
系统使用的BootLoader是VIVI。VIVI是CPU加电后运行的第一段程序,其基本功能是初始化硬件设备,建立内存空间的映射图,从而为调用嵌入式Linux内核做好准备。为能够实现正确引导Linux系统的运行,以及当编译完内核后,快速下载内核和文件系统,VIVI首先通过串口下载内核和文件系统,当系统正常运行起来后,网络驱动正常运行后,VIVI就通过网口下载内核和文件系统。同时,它也具有功能较为完善的命令集,对系统的软硬件资源进行合理的配置与管理。
当上电或复位后,VIVI启动,位于NANDFLASH中的前4 KB程序便从NANDFLASH中由S3C2410自动拷贝到一个叫SteppingStone的4 KB的内部RAM中,该RAM之后被映射到地址0x00处。此时,也就是VIVI前4KB代码开始运行,进行第一阶段的硬件初始化,主要工作为:关Watchdog Timer,关中断,初始化PLL和时钟主频设定,初始化存储器控制器。VIVI初始化的主要内容:
VIVI初始化阶段一(在/arch/s3C2410/head.s文件内):
3 Linux内核的移植
3.1 内核移植
实验系统运行的Linux版本是针对2.4.18进行移植的Linux-2.4.18.-rm7-pxa1版本。本实验是把该移植好的内核,让它如何在自己的硬件系统上正常的运转起来。
Linux内核主要由5个子系统组成:进程调度子系统、进程间通信子系统、内存管理子系统、虚拟文件系统子系统、网络接口子系统。
(1)设置目标平台和指定交叉编译器:在最上层的根目录/Makefile文件中,首先要指定所移植的硬件平台,以及所使用的交叉编译器。改为如下:
也就是说,所移植的硬件平台是ARM,所使用的交叉编译器是存放在目录/opt/host/armv4l/bin/下的armv4l-unknown-Linux-xxx等工具。
(2)arch/arm目录下Makefile修改。系统的启动代码是通过这个文件产生的。在Linux-2.4.18内核中要添加如下代码:
这里TEXTADDR确定内核开始运行的虚拟地址。
(3)arch/arm目录下config.in修改。配置文件config.in能够配置运行“make menuconfig”命令时的菜单选项,由于2.4.18内核中没有S3C2410的相关信息,所以要在该文件中进行有效的配置。
(4)arch/arm/boot目录下Makefile修改。编译出来的内核存放在该目录下,这里指定内核解压到实际硬件系统上的物理地址。要根据实际的硬件系统修改解压后,内核开始运行实际的物理地址。
(5)arch/arm/boot/compressed目录下Makefile修改。该文件从vmLinux中创建一个压缩的vmlinuz镜像文件。该文件中用到的SYSTEM,ZTEXTAD-DR,ZBSSADDR和ZRELADDR是从arch/arm/boot/Makefile文件中得到的。添加如下代码:
(6)arch/arm/boot/compressed目录下添加heads3c2410.s。该文件主要用来初始化处理器。
(7)arch/arm/def-configs目录下添加配置好的S3C2410的配置文件。
(8)arch/arm/kernel目录下Makefile修改。该文件主要用来确定文件类型的依赖关系。
(9)arch/arm/kernel目录下的文件debug-armv.s修改。在该文件中添加如下代码,目的是关闭外围设备的时钟,以保证系统正常运行。
(10)arch/arm/kernel目录下的文件entryarmv.s修改,CPU初始化时处理中断的汇编代码。
(11)arch/arm/mm目录下的相关文件。那里面则是移植好的有关arm的内存管理代码。
(12)arch/arm/mach-s3c2410目录下的相关文件。那里面则是针对s3c2410这款处理器编写的所需代码。
3.2 制作cramfs文件系统
利用工具软件MKCRAMFS制作cramfs文件系统,MKCRAMFS工具在/实验软件/tools/目录下,该文件系统是一个只读压缩的文件系统,文件系统类型可以是ext2,ext3等。这里提供的一个系统目录是root_tech,它里面包含将来要用到的所有文件,它在/实验软件/source_code/的目录内,为root.tar.bz2。把制作工具和root_tech放在同一个文件夹下并对root.tar.bz2进行解压,在终端下切换到那个文件夹目录下使用命令MKCRAMFS root_tech rootfs.cramfs,就可把root_tech制作成文件名为rootfs.cramfs的只读的压缩的cramfs文件系统了。系统启动后,内核将把它加载到内存中,解压。
4 结语
本文针对一个特定的目标平台,提供了构建一个基本嵌入式Linux系统的过程与方法。对Linux 2.4内核版本进行裁减、移植,编译生成的内核在S3C2410处理器的目标板上成功运行,且保留了L inux原有的工作稳定的特点。将Linux操作系统移植于嵌入式系统中作为嵌入式系统的底层研发平台是一个复杂的问题,移植后系统的实时性、稳定性、安全性和精简程度等方面问题还需要在以后的设计中进一步研究。
摘要:以研究将Linux内核移植到嵌入式系统的技术为目的,描述了Linux-2.4.18.-rm7-pxa1移植到S3C2410处理器目标板上的方法。详细介绍了Linux内核移植方法与步骤,并说明了如何搭建移植环境。结果表明,该方法简单实用,达到了预定目标。
关键词:嵌入式系统,Linux,S3C2410,移植
参考文献
[1]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.
[2]唐朝云,孙丹,盛焕烨.基于Linux的嵌入式数字监控系统的设计与实现[J].计算机工程,2003,29(10):152-154.
[3]Samsung Electronic.S3C2410A32-bit RISC microprocessoruser's mannual[S].Revision 1.0.Republic of Korea:Sam-sung Electronic,2004.
[4]张杰,吴敏,曹卫华.基于S3C2410的Linux移植[J].微型电脑应用,2005(3):57-59.
[5]刘振纲,刘成安,卢剑翔.移植标准Linux到S3C2410[J].微计算机信息,2006(11):152-153.
[6]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2009.
[7]李侃,廖启征.基于S3C2410平台与嵌入式Linux的图像采集应用[J].微计算机信息,2006(2):125-127.
[8]陈长华,冀小平,王哲,等.基于嵌入式Linux系统的MiniGUI的移植与应用[J].科技情报开发与经济,2009(3):9-12.
[9]吴明晖.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004.
内核移植 篇6
关键词:SkyEye虚拟,仿真Linux
1 引言
目前, 以消费类电子产品和移动终端应用为代表的嵌入式系统应用开发正在快速发展, 市场需求的不断变化与多种异构硬件体系结构的并存, 给嵌入式系统开发与教学带了一系列挑战, 面对嵌入式系统开发与教学过程中存在的研发成本过高、硬件环境不稳定等问题, 引入一种快速、高效和低成本的开发环境, 对于提高嵌入式系统的开发效率和开发质量具有重要意义。
2 SkyEye概述
SkyEye是一个由清华大学陈渝博士开发并建立的开源软件项目, 中文名称为“天目”。SkyEye的目标是在常规的Linux和Windows平台上仿真多种主流的嵌入式开发板和外部设备, 实现一个可扩展的硬件模拟框架。SkyEye属于一个指令级模拟器, 可以模拟多种嵌入式开发板, 可支持多种CPU指令集, 在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行, 而且开发人员可以通过SkyEye调试操作系统和系统软件, 其硬件模拟逻辑结构图下图1所示。目前SkyEye只提供Linux和Windows两种平台下的安装程序。
3 基于SkyEye嵌入式开发环境的建立
SkyEye共包含两个软件包, 一个为SkyEye的发布版本包, 另外一个为SkyEye的测试套件包, 其中测试套件包用来对相应版本的SkyEye软件包进行测试。
3.1 安装SkyEye
(1) 从source网站上下载SkyEye的最新版本1.3.3的源代码, 以root权限登录Linux后解压
(2) 编译程序
这里需要说明的是, 其中make lib用来编译第三方的库, make来编译SkyEye的源代码
(3) 安装SkyEye到opt目录下
3.2 SkyEye的目录与文件分析
安装成功后会在opt目录下生成以下目录
Bin:存放SkyEye的工具。其中mknandflashdump用来制作nandflash镜像文件, SkyEye为命令行应用程序, prof_convert用来把代码覆盖率的结果文件进行格式转换, uart_instance可以通过一个xterm终端来显示串口的输出。
Include:SkyEye开发插件时所用到的头文件, 这些头文件定义了SkyEye提供的API函数的原型
Info:info格式的文档
Lib:存放SkyEye的核心库libcommon., so和其他一些以动态库存在的插件
Testsuite:存放测试用例
4 在SkyEye中模拟基于S3C2440内核的移植
4.1 构建基于ARM S3C2440仿真环境, 建立配置文件skyeye.config, 内容如下
4.2 裁减编译Linux内核
4.3 将编译生成的内核镜像文件和配置文件复制到/opt/bin/下, 执行SkyEye
5 结束语
目前, 笔者移植的内核版本为2.6.30.4的Linux已经能稳定地运行在SkyEye虚拟平台上, 为嵌入式软件设计和嵌入式系统教学节约了大量的硬件平台的搭建时间, 并有效的结约了成本。当然由于SkyEye的目标不是验证硬件逻辑, 而是协助开发、调试和学习系统软件, 所以在实现上SkyEye与真实的硬件环境相比还是有一定差别的。SkyEye在时钟节拍的时序上也不保证与硬件完全相同, 对软件透明的一些硬件仿真进行了一定的简化。相信随着该开源项目的不断发展, SkyEye的易用性和通用性会得到提高, 并成为嵌入式领域开发的有效工具。
参考文献
[1]李明, 陈渝.一个开放源码的嵌入式仿真环境——SkyEye.单片同与嵌入式系统应用.2003
[2]宋靖, 吴庆波.嵌入式系统仿真环境运行环境SkyEye应用研究.微处理机.2007
[3]周兆丰, 候向峰.基于SkyEye的嵌入式系统仿真环境的构建.单片同与嵌入式系统应用.2010
[4]skyeyev3_usermanual-v6.http://sourceforge.net/
内核移植 篇7
uClinux针对嵌入式应用的特点, 对Linux的内核 (所用版本为linux2.6) 进行了修改和重新编译, 其大小远小于原来的。它包含Linux常用的API, 保留了原来Linux操作系统具有的高稳定性、强大的网络功能和卓越的文件系统支持功能等优点。
ADSP-BF533是业界领先的嵌入式多媒体处理器, 拥有运算速度高达600MHz的DSP内核, 采用ADI与Intel共同开发的MSA体系结构 (同Intel XSCALE嵌入式处理器) , 两个16位乘法器和两个40位ALU, 专门的视频处理硬件单元和视频处理指令, 丰富的DMA通道, 内嵌大容量高速SDRAM, 支持动态电源管理。
1建立开发环境
要在Blackfin上嵌入uClinux操作系统, 首先应建立相应的开发环境。嵌入式系统开发环境一般分成主机端 (HOST) 和目标板 (TARGET) 两个部分。本文所用的主机系统和开发平台如下: Windows XP与LINUX (内核为2.6) 双操作系统。P42.4GHz, 512 MB内存 Blackfin533 EZ-KIT 开发板。
建立交叉编译环境:
硬件环境建立之后, 就需要创建软件开发环境。软件环境主要是指Blackfin体系结构的交叉编译环境。建立交叉编译环境首先要有交叉开发工具。交叉编译工具是指一组运行在某一种处理器上, 却可以编译出另一种处理器上执行的指令的工具。在官方网站http://blackfin.uclinux.org上提供了BLACKFIN系列处理器内核的交叉编译工具。
使用root用户, 执行rpm-ivh blackfin-toolchain-08r1-8.i386.rpm, 结束后在/opt下会出现/uclinux/bfin-elf和/uclinux/bfin-uclinux两个新文件夹, 此时Blackfin所用的交叉编译器已建立成功。
接下来安装gcc4.1 compiler, 运行命令:
rpm-ivh
blackfin-toolchain-elf-gcc-4.1-08r1-8.i386.rpm;
rpm-ivh
blackfin-toolchain-uclibc-full-08r1-8.i386.rpm
设置环境变量$PATH
export
PATH=$PATH:/opt/uClinux/bfin-uclinux/bin/
2利用U-boot引导内核
U-Boot, 全称 Universal Boot Loader, 是遵循GPL条款的开放源码项目. 其源码目录、编译形式与Linux内核很相似, 事实上, 不少U-Boot源码就是相应的Linux内核源程序的简化, 尤其是一些设备的驱动程序, 从U-Boot源码的注释中能体现这一点。
U-BOOT具有源码公开的特点, 开发人员可根据自身需要进行裁剪, 支持多种处理器和嵌入式操作系统内核;具有多种设备驱动源码;支持多种引导方式;具有功能强大且成熟、稳定等很多优点。本文使用U-BOOT引导内核。
当系统上电后, U-Boot从地址OxO开始执行, 将存储器映射重新配置, 并会执行uClinux的固化内核。
从网上下载u-boot_1.1.6.tar.bz2, 在terminal下键入:
tar-xjvf u-boot_1.1.6.tar.bz2
此时会出现名为u-boot_1.1.3的文件夹, 将当前目录转为此文件夹下, 键入以下命令:
make clean;删除源代码生成的执行文件和所有的中间目标文件
make mrproper
make bf533-ezkit_config (对应不同型号的开发板)
make (编译)
以上步骤完成后, 会出现以下文件:
u-boot:这是elf文件, 可以用它生成其它格式的文件。
u-boot.bin:这是二进制文件, 可以用来升级u-boot。
将主机系统转换为Windows XP下, 打开VDSP++4.5开发软件, 点开TOOL下的flash programmer, 打开如图1所示的选项环境:
按图中所示设置好参数后, 点击load file即可。
3嵌入uClinux
3.1硬件环境的建立
将主机系统转为Windows XP系统。将ezkit板和主机用串口连接起来, 打开hyperterminal, 选COM1, 确定后进入设置参数界面 (如图2所示) 。
设置好参数后, 按确定。给板子上电后, 自动启动U-boot。
3.2编译uClinux
作为操作系统的核心, uClinux内核负责管理系统的进程、内存、设备驱动程序、文件系统和网络系统, 决定着系统的各种性能。uClinux内核采用模块化的组织结构, 通过增减内核模块的方式来增减系统的功能。
内核配置:
这里需要根据自己的硬件平台来配置内核代码。配置过程如下:
(1) 从blackfin网站上下载uClinux-dist-2008R1.5-RC3.tar文件,
(2) 解压:tar-jxvf uClinux-dist-2008R1.5-RC3.tar
(3) 进入文件夹 :cd uClinux-dist-2008R1.5-RC3
(4) 设置环境变量:
export
PATH=$PATH:/opt/uClinux/bfin-uclinux/bin/:
/opt/uClinux/bfin-linux-uclibc/bin/:/opt/uClinux/bfin-elf/bin/
(5) make menuconfig
(6) make
3.3移植uClinux
uClinux内核有2种可选的运行方式:一种是在FLASH上直接运行;另一种是加载到内存中运行, 系统启动时从FLASH 中读取压缩的内核代码到内存中解压, 然后开始执行, 这种方法比第一种的速度更快 (RAM 的存取速度比FLASH的快) 。所以选取第二种方法。编译好的内核文件可以由Visual DSP” 开发装置, 通过网口或串口把linux.dxe下载到目标板的FLASH 中, 从设定的入口地址 (一般为0xl000) 执行即可启动内核。启动uClinux就可以在超级终端看到uClinux的欢迎信息和简单的shell提示符, 界面如图3所示。
在bfin>后键入:“loadb”, 点击“传送”, “发送文件”, 出现如图3的界面:
按图3设置好参数后, 点击发送, 则出现传送文件的界面, 并显示进度。
当传输完成后, 在bfin>后输入:bootm 0x01000000 (经压缩)
此时将启动Uclinux, 超级终端如下图显示:
到此, uClinux已成功的嵌入到BF533 ezkit中。
4总结
对于嵌入式开发来说, 工作的第一步就是将操作系统移植到开发板上去。这是一个非常重要的过程, 移植人员必须根据不同的硬件选择不同的操作系统, 然后根据自己的应用裁剪uClinux内核, 以适应项目的需要。
本文使用的移植方法已经成功地使用于多个项目中。虽然只讲述了基于BF-533的移植过程, 但是其方法和思想同样适用于其他的开发环境中。
参考文献
[1]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社, 2006.6.
[2]廖日坤.ARM嵌入式应用开发技术白金手册[M].北京:中国电力出版社, 2005.10.
[3]陈峰.Blackfin系列DSP原理与系统设计[M].北京:电子工业出版设, 2004.
内核移植 篇8
μC-OSII是一种基于优先级的可抢先的硬实时内核。自从1992年发布以来,在世界各地都获得了广泛的应用,它是一种专门为嵌入式设备设计的内核,目前已经被移植到40多种不同结构的CPU上,运行在从8位到64位的各种系统之上。尤其值得一提的是,该系统自从2.51版本之后,就通过了美国FAA认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上。
1 μC-OSII内核特点
1.1 公开源代码
许多商业实时内核的软件是以源代码形式提供的。μC-OSII注解的详尽,且组织有序,仅仅给出一个源码是远远不够的。
1.2 可移植性
绝大部分μC-OSII的源码是用移植性很强的ANSI C写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得μC-OSII便于移植到其他微处理器上。如同μC-OS一样,μC-OSII可以移植到许许多多微处理器上。条件是,只要该微处理器有堆栈指针,由CPU内部寄存器入栈、出栈指令。另外,使用的C编译器必须支持内嵌汇编(inline assembly)或者该C语言可扩展、可连接汇编模块,使得关中断、开中断能在C语言程序中实现。μC-OSII可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。 从移植了的μC-OS升级到μC-OSII,全部工作一个小时左右就可完成。因为μC-OSII和μC-OS是向下兼容的,应用程序从μC-OS升级到μC-OSII几乎不需要改动或根本不需要改动。
1.3 可固化
μC-OSII是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(C编译、连接、下载和固化),μC-OSII可以嵌入到读者的产品中成为产品的一部分。
1.4 可裁剪
可以只使用μC-OSII中应用程序需要的那些系统服务。也就是说某产品可以只使用很少几个μC-OSII调用,而另一个产品则使用了几乎所有μC-OSII的功能。这样可以减少产品中μC-OSII所需的存储空间(RAM和ROM),这种可裁剪性是靠条件编译实现的。只要在用户的应用程序中(用#define constants语句)定义那些μC-OSII中的功能是应用程序需要的就可以了。程序和数据两部分的存储用量已被最大努力的压低了。
1.5 占先式
μC-OSII完全是占先式的实时内核。这意味着μC-OSII总是运行就绪条件下优先级最高的任务。大多数商业内核也是占先式的,μC-OSII在性能上和它们类似。
1.6 多任务
μC-OSII可以管理64个任务,然而,目前这一版本保留8个系统。应用程序最多可以有56个任务。赋予每个任务的优先级必须是不同的,这意味着μC-OSII不支持时间片轮转调度法。该调度法适用于调度优先级平等的任务。
1.7 可确定性
全部μC-OSII的函数调用与服务的执行时间具有其可确定性。也就是说,全部μC-OSII的函数调用与服务的执行时间是可知的。进而言之,μC-OS系统服务的执行时间不依赖于应用程序任务的多少。
1.8 任务栈
每个任务有自己单独的栈,μC-OSII允许每个任务有不同的栈空间。以便压低应用程序对RAM的需求。使用μC-OSII的栈空间校验函数,可以确定每个任务到底需要多少栈空间。
1.9 系统服务
μC-OSII提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。
1.10 中断管理
中断可以使正在执行的任务暂时挂起。如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。
1.11 稳定性与可靠性
μC-OSII是基于μC-OS的,μC-OS自1992年以来已经有好几百个商业应用。μC-OSII与μC-OS的内核是一样的,只不过提供了更多的功能。
2 应用示例
在巡检器上(内核为LPC2148)移植μC-OS。
2.1 巡检器需要实现的功能
通过LPC2148自带A/D实现8路数据采集;实现液晶屏实时显示从A/D采集来的信号量;通过USB与上位机实现通信。
2.2 LPC2148性能指标
LPC2148具有引脚数64个;
片内SRAM 32+8(kB)其中8kB RAM主要供USB DMA使用,但该RAM亦可作为数据和代码的通用RAM,并且在任何时候都可以被CPU访问,这8k RAM地址空间为0x7FD0 0000~0x7FD0 1FFF;USB端点有2kB;片内Flash有512k;10位ADC通道数14个;10位DAC通道数1个。
2.3 μC-OSII的移植
首先,将μC-OSII 移植到LPC214上,移植方法如下:
在OS-CPU.H中定义相关的宏,声明LPC2148能够识别的数据类型和堆栈增长方向。
在OS-CPU-C.C中定义以下6个函数:OSTaskStklnit( );OSTaskCreateHook( );STaskSwHook( );OSTaskDelHook( );OSTaskStatHook( ); OSTimeTickHook( )。
在OS-CPU-A.ASM中修改以下几个汇编函数:OSStartHighRdy, OSCtxSw, OSIntCtxSw,OSTickISR。
在主头文件INCLUDES.H中增加OS-CPU.H, OS-CPU-C.COS-CPU-A.ASM.
在配置文件OS-CFG.H中,定义最大事件数,最多内存分块数,最多消息队列数,最多任务数,最低任务优先级,是否允许信号量使能,是否允许邮箱使能,是否允许消息队列使能,时钟节拍数以及其他的一些配置。通过修改这些设置,可对μC-OSII进行裁剪,使之适应本系统的具体需要。
2.4 μC-OSII下多任务机制的实现
根据系统的功能模块,可将整个系统划分为几个并行存在的任务来运行,各个任务完成相对独立的功能。μC-OSII是占先式操作系统,对任务的调度是按优先权的高低进行的,优先权的设置是按照整个系统运行的时序来确定的,对系统安全运行较重要和对实时性要求较严格的任务,设成较高的优先级。各个任务根据优先级由高到低依次如下:8个A/D预处理任务、液晶显示任务、USB通信任务、键盘任务和系统服务任务。在系统运行过程中,各任务的优先级固定不变。
在μC-OSII中,每个任务都处在以下几种状态之一的状态下,这几种状态是就绪态、运行态、等待态和中断态。就绪态意味着该任务已经准备好,可以运行了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行。运行态的任务是指该任务掌握了CPU的控制权,正在运行中。等待态是指该任务在等待,等待某一事件的发生。最后,发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂不能运行,就进入了被中断状态。任务在μC-OSII内核的调度下在各个状态之间转换。任务的状态转换如图1所示。
在本系统中,各个任务之间都有数据需要交换,本文采用了消息机制进行任务间的通信,通过消息邮箱向各个任务发送消息,依次完成数据的传递。在由μC-OSII管理的多任务机制下,程序流程如图2所示。
3 结束语
本文完成了基于32位ARM微处理器LPC2148和嵌入式实时操作系统μC-OSII的嵌入式巡检器的设计开发,并为嵌入式系统的开发提供了一种解决方案。
本系统各方面性能都得到了很大的提高:系统中采用实时操作系统进行任务调度,中断结束后优先级高的任务立即由就绪态转换为运行态,中断响应时间被限制在较小范围内,故而实时性得到较大提高;系统中为任务设置了超时函数,时间用完后,任务必须交出CPU使用权。如果某任务出现问题,不致于影响别的任务,从而提高了可靠性;各任务间相对独立,可以通过添加新任务的方法增加新功能,无须对原有代码进行大修改,其可扩展性比单任务机制好;处理能力大,ARM7处理器的三级流水线结构,可以保证一个机器周期完成一条以上指令,充分提高了运行速度。本系统具有实时性、高可靠性、小型化、智能化、集成化和低成本的特点。
参考文献
[1]杨恒.ARM嵌入式系统设计及实践[J].自动化仪表,西安电子科技大学出版社,2004(25):1-5.
[2]周立功,张华,等.深入浅出ARM7:LPC213x/214x.下册[M].北京:北京航空航天大学出版社,2006(1).
[3]周立功.嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005:68-75.
[4]Jean J.Lebrosse.MicroC/OS-II The Real-Tune Kernel Second Edititon[M].2002.