您的位置 首页 芯闻

干流嵌入式Linux动态扩展技能比较剖析

随着嵌入式技术的快速发展和嵌入式设备的普及,嵌入式应用发展的一个关键趋势是从静态的、固定的系统功能到动态的、可扩展的系统功能。本文主

跟着嵌入式技能的快速开展和嵌入式设备的遍及,嵌入式运用开展的一个要害趋势是从静态的、固定的体系功用到动态的、可扩展的体系功用。

本文首要进行嵌入式Linux体系内核动态扩展技能的评论。首要,介绍嵌入式 Linux体系的开展情况和研讨嵌入式Linux 动态扩展性的含义。然后,评论现在几种首要的中心动态扩展技能,以及各种技能在嵌入式体系上的优缺陷。最终,剖析嵌入式Linux动态扩展性研讨所面对的应战和开展趋势。

导言

嵌入式体系是计算机技能、通讯技能、半导体技能、微电子技能、语音图画数据传输技能等先进技能和详细运用方针相结合后的更新换代产品。体系无剩余软件,硬件亦无剩余存储器,可靠性高,本钱低,体积小,功耗少;可运用于家电、工业、通讯、国防等范畴。其产品形状丰厚多样,市场潜力巨大。

嵌入式Linux的呈现,给整个嵌入式国际带来了无限生机。Linux具有内核可裁剪、功率高、稳定性好、移植性好、源代码敞开等长处,还内含了完好的TCP/IP网络协议栈,很适合在嵌入式范畴运用。与传统的实时操作体系(RTOS)比较,选用嵌入式 Linux这样敞开源码的操作体系的别的一个优点是,Linux开发集体看来会比RTOS的供货商更快地支撑新的IP协议和其他协议。例如,用于 Linux的设备驱动程序要比用于商业操作体系的设备驱动程序多。因而,越来越多的公司和个人正在把Linux作为嵌入式操作体系的首选。

嵌入式体系因为其作业环境、方位散布、与运用体系的结合办法等方面的原因,在体系的晋级、修正方面存在着适当的困难,且费用高。现在大多数嵌入式体系内核只能在必定程度上进行静态扩展,这意味着修正某些内核特点值后要从头编译内核,对普通用户而言难以完结。通讯的开展使得嵌入式操作体系的动态扩展成为可能,能够在长途操控的基础上添加嵌入式体系的灵活性,延伸嵌入式体系的寿数;一起,因为嵌入式Linux的运用日益广泛,研讨嵌入式Linux的动态扩展具有重要含义。

动态扩展是指体系在运转状态下完结体系的晋级和保护。动态扩展技能现在被广泛运用在软件体系开发的各个范畴。组件、可扩展的数据库体系、自动网等多种技能都是动态扩展技能在各个范畴的详细表现。在嵌入式操作体系范畴,动态扩展技能研讨的首要方针是完结内核笼统的扩展。完结操作体系内核笼统的动态扩展能够进步体系的灵活性、适应性,使体系能够依据运用的需求,供给特定的服务。可是,因为嵌入式体系硬件资源有限,这对研讨嵌入式 Linux体系中心的动态扩展性是一个极大的应战。

本文首要评论嵌入式Linux体系中内核笼统的动态扩展技能。

1、几种首要的内核动态扩展技能的剖析

当时运用于操作体系中的动态扩展技能首要有四种:微内核技能、可扩展内核技能、解说器技能/JOS技能和内核下载技能/LKM技能\[1,2\]。这三种技能已经在桌面操作体系的不同环境中得到了充沛的运用。嵌入式操作体系及其运用环境具有桌面操作体系所不同的特征,它在功用、地址空间、所需存储空间和底层拜访频率等方面的特征,使得咱们在扩展技能的挑选上需求加以权衡。

(1)微内核技能

在微内核操作体系中,内核中包含了一些底子内核功用(如创建和删去使命、使命调度、内存办理和中止处理等),部分操作体系笼统和要害服务(如文件体系、网络协议栈等),都是在用户空间运转的。这大大减小了内核的体积,一起也极大当地便了整个体系的晋级、保护和移植。体系经过中心到用户层向上调用服务的办法来为运用程序供给服务。因为服务存在于用户层,用户可经过修正服务来取得不同的行为,因而也称为用户层扩展技能。因为一切的运用程序都要运用操作体系供给的API或体系调用,完结内存办理、进程办理、I/O、设备办理等,因而经过在用户空间监督并截获某个进程的体系调用,然后将扩展功用代码刺进体系调用中,就能够扩展Linux操作体系功用。

与内核空间功用扩展比较,在用户空间扩展安全性更强,对Linux操作体系和运用程序愈加通明。用户层扩展技能的缺陷在于,将服务提升到用户层使程序运转进程中中心态和用户态之间的切换和自陷次数添加,导致体系负载添加,体系功用下降。别的,微内核与传统的嵌入式Linux内核在结构上是彻底不同的。在嵌入式Linux中,假如选用该技能来添加体系的动态扩展功用,需求对内核结构从头规划\[2\]。

(2)可扩展内核技能

可扩展内核技能答运用户运用程序向内核植入(inject)代码以扩展其功用。因为被植入的代码是在中心态运转,然后避免了微内核技能中的体系功用下降的问题。被植入的代码是在中心态运转,需求有一个实时查看机制来验证代码的安全性,确保被植入代码不会导致体系的溃散。程步奇等人\[1\]运用软件毛病孤立技能来完结扩展模块的毛病孤立,确保体系不遭到扩展模块的损坏。Bershad等人\[3\]也运用软件毛病孤立技能来约束被植入代码可拜访的内存地址规模。代码安全性查看无疑添加了体系的担负,问题发生的底子原因是那些被植入的扩展性代码对中心来说是不行信赖的。为了减轻体系的担负,就需求假定被植入的代码是安全的、可信赖的。

(3)解说器技能/JOS技能

与文献\[2\]中说到的JOS(Java OperatingSystem)技能相同,该技能答应开发者用Java言语编写体系模块,例如TCP/IP协议栈或文件体系。将这些模块编译成类(class)文件,并在体系运转时由JVM(Java VirtualMachine)动态地加载。Liao等人\[4\]在1996年提出,将JVM刺进到微内核中,然后能够让用户编写Java程序,以扩展内核功用。

解说器技能是以解说的办法来履行程序代码的,比较适合于交互式体系;与编译器比较,解说器/JVM在移植时相对简略;解说器经过选用中心代码表明的办法,今世码长度小于500KB的时分,可履行的中心代码一般比编译发生的二进制代码小,这一点很适合于存储空间十分有限的嵌入式体系;最终,Java代码简略保护和编写,可移植性好,可完结代码重用。选用解说器技能的缺陷是,中心可履行代码的履行速度慢。在嵌入式 Linux体系中,内核很大一部分由运用所同享,乃至运用程序自身便是内核的一个线程,履行频率高,选用解说器技能会大大下降体系的功率。有些Java渠道选用即时(Just?in?time)编译技能来改善代码的履行速度\[2\]。该技能是运用空间来交换时刻,因而很难在硬件资源十分有限的嵌入式体系上完结。此外,因为Java言语的类库很大,在必定程度上也阻止了其在资源有限的嵌入式体系中的开展。

(4)内核加载技能/LKM技能

许多桌面操作体系,例如Linux,供给LKM(Loadable KernelModule)来动态扩展它们的内核。当模块(Module)装置到内核后就作为中心的一部分,不进行实时安全检测,全速运转。在嵌入式 Linux体系中,LKM的首要问题是:存储模块需求占用额定空间以及被加载模块的安全性。模块的安全问题能够经过软件保护技能来处理\[1\]。

Oikawa等人在1996年提出一种与LKM相似的动态中心模块(DKMs)技能\[5\]。与LKM相同,DKMs以文件的办法存储并能在体系运转进程中动态地加载和卸载。DKMs由一个用户层的DKM服务器来办理,并非由内核来办理。当中心需求某模块时,由DKM服务器担任把相应的DKM加载;当中心的内存资源紧缺时,由DKM服务器担任卸载一个没有被运用的DKM。缺陷是一切的DKM是存储在本地体系上的,占用了许多名贵的存储空间。

与Oikawa的办法不同,Chang DaWei 等人于2003年提出了OperatingSystemPortalframework(OSP)的办法\[2\]。该办法是将中心模块存储在一个资源足够的长途服务器上,并由服务器端东西OSPortal来办理所存储的模块,一起也担任处理客户端(嵌入式体系内核)宣布的恳求,依照恳求动态的挑选并衔接模块,然后经过网络传到客户端。因为模块的办理和衔接都在服务器端,所以对客户端来说能够节约许多的资源空间。OS Portal的结构如图1所示。

图1

OS Portal的结构一般,内核动态加载模块的时分,模块的衔接作业由内核完结。Chang DaWei的办法的共同之处在于把模块衔接的作业交给服务器端履行,不光下降了对内存空间的需求,也减轻了内核的担负。

2、其他相关研讨

(1)根据FPGA的可动态装备的片上体系

FPGA (FieldProgrammable GateArray,现场可编程门阵列)是电子规划范畴中最具生机和开展前途的一项技能。FPGA能完结任何数字器材的功用,上至高功用CPU,下至简略的74电路,都能够用它来完结。FPGA在嵌入式体系中的运用越来越广泛。John Williams和NeilBergmann\[6\]用uCLinux作为操作体系渠道,规划出可动态装备的片上体系(rSoC)。uCLinux从长途服务器上下载FPGA程序代码,然后运用shell脚本东西将代码写进FPGA芯片,完结体系功用的可动态扩展。

(2)动态更新Linux内核变量的办法

在进行Linux内核嵌入式开发时,常常运用内核发动进程中读取静态装备文件内容的办法对内核某些变量进行初始化。当静态装备文件改动时,只要从头发动内核才能使新的装备收效。北京科技大学的田玉凤等人\[7\]经过修正文件. /include/linux/proc_fs.h,从头编译、装置新内核后,运用/proc文件体系,可动态改动Linux内核变量。

(3)在用户空间扩展Linux操作体系功用的办法

与内核空间功用扩展比较,在用户空间扩展安全性更强,对Linux操作体系和运用程序愈加通明。魏东林、卢正鼎等人经过在用户空间盯梢截获体系调用并更改体系调用的行为来到达扩展操作体系功用的意图\[8\]。从本质上来说,该办法和本文第1部分说到的可扩展内核技能是相同的。

3、动态扩展技能面对的应战和开展趋势

(1)高实时性是嵌入式体系的底子要求

因为Linux是一种通用操作体系,而不是一个真实的实时操作体系,内核不支撑事情优先级和抢占实时特性(2003年末推出的Linux2.6内核完结了必定程度上的可抢占性),所以,在进行嵌入式Linux体系动态扩展性研讨开发时,首要的问题是扩展 Linux的实时功用。体系在进行动态扩展的进程中,假如扩展的进程时刻太长,肯定会影响到体系的实时呼应,所以要求扩展进程快速完结,例如根据LKM的内核扩展机制。假如模块加载或替换的时刻太长,在规则的时刻内不能完结,这关于嵌入式Linux的某些运用来说是不能承受的。

(2)资源有限性是嵌入式体系底子特征

嵌入式体系无剩余软件也无剩余硬件存储器,添加存储空间意味着本钱的上升。在十分有限的存储空间中要完结快速的内核动态扩展,对研讨人员来说是一个极大的应战。在桌面PC国际,尽管已经有许多动态扩展体系功用的办法,但在嵌入式国际很难完结。例如Linux体系的LKM机制,若模块加载进程不经改造,在嵌入式Linux体系中是不能运用的。

(3)等待完善的集成开发环境

一个完好的嵌入式体系的集成开发环境一般需求编译/衔接器、内核调试/盯梢器和集成图形界面开发渠道。其间的集成图形界面开发渠道包含编辑器、调试器、软件仿真器和监督器等。在Linux体系中,具有功用强大的 gcc编译器东西链,运用了根据GNU的调试器 gdb的长途调试功用,一般由一台客户机运转调试程序调试宿主机运转的操作体系内核;在运用长途开发时还能够运用穿插渠道的办法,如在Windows渠道下的调试盯梢器对Linux的宿主体系作调试。可是,Linux在根据图形界面的特定体系定制渠道的研讨上,与Windows操作体系比较还存在距离。因而,要使嵌入式Linux动态扩展的研讨愈加便利、方便,全体集成开发环境还有待进步和完善。

桌面Linux运用LKM技能成功完结了体系功用的动态扩展。嵌入式Linux承继了桌面Linux绝大部分功用和特性,桌面Linux固有的LKM机制为嵌入式Linux动态扩展的研讨带来了先天性的优势,可大大节约研讨人员的时刻和精力。在动态模块替换方面也有了很大的开展,Chris Walton等人\[9\]经过对二空间复制废物收回算法进行改善,在2000年提出了一种动态模块替换的笼统机模型。

根据JOS的动态扩展技能是一个首要开展方向。Java代码可移植性强,简略保护,在嵌入式体系上很有开展前途。选用Java技能的别的一个优点是可完结代码重用,在进行嵌入式体系开发时不用每次都从零开端。许多研讨成果也促进了Java在嵌入式体系上的运用。 DerekRayside等人在2002年提出一品种库子集挑选办法\[10\]。该办法能够让嵌入式体系中的Java程序在运转时从长途Java类库中仅挑选所需求的子集,然后下载到本地体系,然后减小对嵌入式体系存储空间的需求,处理了因Java言语的类库太大而阻止了在嵌入式体系中的运用。

结束语

跟着嵌入式Linux的快速开展和嵌入式Linux设备的遍及,人们对可动态扩展的嵌入式Linux的需求越来越火急。现在首要的几种可动态扩展体系功用的技能,例如微内核技能、JOS技能、LKM技能等,因为嵌入式体系的存储空间有限,实时性要求高,在运用到嵌入式Linux体系中时都有所缺乏。其间,桌面Linux固有的LKM机制为嵌入式Linux动态扩展的研讨带来了先天性的优势;别的,Java代码可移植性强,保护简略,在嵌入式体系上很有开展前途,因而根据JOS的动态扩展技能是另一个首要开展方向。最终,一个完善的嵌入式Linux集成开发环境是每一个开发人员所等待的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/297750.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部