浅谈嵌入式Linux操作系统的开发论文_秦林林 李彤

浅谈嵌入式Linux操作系统的开发论文_秦林林 李彤

陕西黄河集团有限公司

嵌入式操作系统是指以应用为中心、以计算机技术为基础,软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统主要由它是集软硬件于一体的独立工作的"器件"。嵌入式系统的软件部分包括操作系统软件(要求实时和多任务操作)和应用程序编程。嵌入式系统开发就是指在嵌入式操作系统下进行开发。嵌入式系统的发展已经进入到了飞速发展的时代,嵌入式系统操作与一般PC机比起来有着体积小,组成更简单却能够完成想的任务。在嵌入式操作系统中,主要的是LINUX操作系统,它具有对各种设备的支持性,被广泛应用于各个领域。其特点包括软件要求固态华存储,软件代码高质量、高可靠性,系统软件的高实时性是基本要求。

一个嵌入式系统的开发环境一般包括嵌入式目标板、开发用的宿主PC机和硬件调试器,他们之间通过串口、JTAG或BDM等调试接口和网络等接口互相连接。其中,嵌入式软件系统运行与嵌入式目标板上,这些软件所对应的程序开发和编译在宿主机上运行,程序的调试则由宿主机通过硬件调试器控制目标机执行相应的操作实现。

在运行嵌入式LINUX的系统时,硬件调试器只在Bootloader程序开发以及LIUNX内核移植时有可能需要使用。应用程序的开发通常是LINUX操作系统在嵌入式目标机上运行起来之后进行。此时,更多的是在宿主机上使用GDB通过网络与目标板通信,进行程序的调试。也就是硬件调试器多在底层软件开发调试时使用,对于应用程序的开发调试通常使用其他手段。

嵌入式LINUX操作系统开发的第一步就是在宿主机上建立交叉开发所需的交叉编译环境。交叉编译环境的建立主要是在宿主机上安装交叉编译工具Cross-gcc。Cross-gcc工具链通常是使用别人已经编译好的交叉编译的GCC工具链。

在交叉编译环境建立好之后,就可以在宿主机上利用交叉编译环境构造一个嵌入式LINUX系统。LINUX操作系统是由LINUX内核和应用程序两大部分组成。LINUX内核的开发主要是根据实际的需要进行内核裁剪和配置,然后用交叉编译器编译生成内核的二进制文件映像。对于许多自行设计的嵌入式系统,内核的开发还包括根据实际的硬件系统进行内核和外设驱动程序的移植开发。应用程序通常都放在LINUX的根文件系统中。根文件系统主要存放了嵌入式的配置文件、设备文件、应用程序、动态链接库以及其他一些相关的程序文件。通常最初的根文件系统只是一个基本的根文件系统,只包含了一些必要的系统支撑程序。

在宿主机PC机上完成嵌入式LINUX软件系统的构建之后,就在嵌入式硬件系统上测试、运行构造好的嵌入式LINUX软件系统。其中,测试工作需要在宿主机上通过远程终端操控嵌入式开发板完成。通常在嵌入式开发板上存在一个内核的引导加载程序,它用于硬件的初始化,给用户提供一个操作界面,将嵌入式LINUX加载到内存中运行。除此之外,它对于嵌入式LINUX系统的开发调试也起到很大的作用。

期刊文章分类查询,尽在期刊图书馆一个基本的嵌入式LINUX系统在目标板上运行起来之后,就要进行程序移植开发和调试

Linux作为一个通用操作系统,主要考虑的是调度的公平和吞吐量等指标。然而,在实时方面它还不能很好地满足实时系统方面的需要,其本身仅仅提供了一些实时处理的支持,这包括支持大部分POSIX标准中的实时功能,支持多任务、多线程,具有丰富的通信机制等;同时也提供了符合POSIX标准的调度策略,包括FIFO调度策略、时间片轮转调度策略和静态优先级抢占式调度策略。Linux区分实时进程和普通进程,并采用不同的调度策略。

为了同时支持实时和非实时两种进程,Linux的调度策略简单讲就是优先级加上时间片。当系统中有实时进程到来时,系统赋予它最高的优先级。体现在实时性上,Linux采用了两种简单的调度策略,即先来先服务调度(SCHED-FIFO)和时间片轮转调度(SCHED-RR)。具体是将所有处于运行状态的任务挂接在一个run-queue 队列中,并将任务分成实时和非实时任务,对不同的任务,在其任务控制块task-struct中用一个policy属性来确定其调度策略。对实时性要求较严的硬实时任务采用SCHED-FIFO调度,使之在一次调度后运行完毕。对普通非实时进程,Linux采用基于优先级的轮转策略。

尽管Linux本身提供了一些支持实时性的机制,然而,由于Linux系统是以高的吞吐量和公平性为追求目标,基本上没有考虑实时应用所要满足的时间约束,它只是提供了一些相对简单的任务调度策略。因此,实时性问题是将Linux应用于嵌入式系统开发的一大障碍,无法在硬实时系统中得到应用。Linux在实时应用中的技术障碍具体表现在: (1)Linux系统时钟精度太过粗糙,时钟中断周期为10ms,使得其时间粒度过大,加大了任务响应延迟。(2) Linux的内核是不可抢占的, 当一个任务通过系统调用进入内核态运行时,一个具有更高优先级的进程,只有等待处于核心态的系统调用返回后方能执行,这将导致优先级逆转。实时任务执行时间的不确定性,显然不能满足硬实时应用的要求。(3) Linux采用对临界区操作时屏蔽中断的方式,在中断处理中是不允许进行任务调度的,从而抑制了系统及时响应外部操作的能力。

(4)缺乏有效的实时任务调度机制和调度算法。针对这些问题,利用Linux作为底层操作系统,必须增强其内核的实时性能从而构建出一个具有实时处理能力的嵌入式系统,适应嵌入式领域应用的需要。

近年来,人们对于Linux内核实时性改造提出了一些方法和设想,它们采用了不同的思路和技术方案。归纳总结,支持Linux的硬实时性一般有两种策略;一种是直接修改Linux内核,重新编写一个由优先级驱动的实时调度器sched.c,KURT是采用这一方案较为成功的实时Linux操作系统;另外一种是在Linux内核之外,以可加载内核模块的形式添加实时内核,确保其高响应特性,实时内核接管来自硬件的所有中断,并根据是否是实时任务决定是否直接响应。如RT-Linux。以上两种策略有其借鉴之处,但如果综合考虑任务响应、内核抢占性、实时调度策略等几个影响操作系统实时性的重要方面,它们还不能很好的满足实时性问题。

论文作者:秦林林 李彤

论文发表刊物:《科技尚品》2019年第1期

论文发表时间:2019/7/18

标签:;  ;  ;  ;  ;  ;  ;  ;  

浅谈嵌入式Linux操作系统的开发论文_秦林林 李彤
下载Doc文档

猜你喜欢