曹维国,郑志峰,杨海凝,温培培,段洁
(1.长春理工大学 光电工程学院,长春 130022;2.广东工商职业学院实训中心,肇庆 526020)
中高空面阵CCD航空相机操作系统裁剪技术研究
曹维国1,郑志峰2,杨海凝1,温培培1,段洁1
(1.长春理工大学光电工程学院,长春130022;2.广东工商职业学院实训中心,肇庆526020)
针对面阵CCD航空相机操作系统的实际需求,结合相机中PC104总线结构的硬件资源,对所采用的Linux系统进行实用性裁剪。采用粗粒度和细粒度相结合的裁剪方法,来增强Linux内核的抢占性,改善Linux内核的实时调度器的调度策略,以构建具有较强实施处理能力的嵌入式系统。在不同环境下,对系统的启动和任务响应性能的试验测试表明,裁剪后的系统稳定、可靠,且可达到启动时间小于5s,任务响应时间小于20ms的性能指标。
航空相机;操作系统;裁剪;Linux
中高空面阵CCD航空相机主要配装于军用侦察机,其任务是从中高空实时获取高分辨率可见光目标图像信息。而面阵CCD航空相机的操纵控制系统作为其控制核心,其响应速度直接影响航空相机的工作性能,故影响航空侦察任务的完成情况。为了满足航空相机的实时性设计要求,通常选择Linux系统作为其主控系统。因为Linux系统成熟、稳定、源代码开放和可裁剪,且不存在黑箱技术。而现有的Linux是一个通用的操作系统,虽然它采用了许多先进技术来提高系统的运行和反应速度,但它本质上不是一个实时操作系统,应用于航空相机嵌入式环境中还存在诸多的不足。例如关中断问题、进程调度问题和时钟问题等,这些缺点延迟高优先级的中断请求,妨碍了高优先级进程实时抢占CPU和降低了周期性的实时任务实施效率。本文针对存在的不足,对现有的通用Linux系统进行实用裁剪与改造,从而减少移植工作的盲目性和加快嵌入式Linux系统的移植进度,并将其应用于中高空面阵CCD航空相机操纵系统中。为开发中国航空领域具有自主知识产权的嵌入式处理器、嵌入式操作系统和嵌入式高端产品奠定了基础,对提高我国武器装备的设计水平和自动化程度,具有重要的战略意义和广泛的应用前景。
根据Linux裁剪方法研究现状,现有的Linux的裁剪技术主要有基于Linux自配裁剪技术,基于Linux系统的源代码裁剪技术,基于调用图的Linux内核的裁剪技术。
1.1基于Linux自配裁剪技术
在Linux内核的初始设计时,将内核的所有相关功能进行模块化设计,并对所有功能模块采用配置选项的独立设置,再根据不同功能嵌入式系统设计需求,在实际应用中采用内核编译指令make menuconfig对内核模块进行编译。这种做法是利用Linux系统自配的编译工具实现了内核的裁剪,设计出不同嵌入式系统所需的内核。
此种裁剪技术适用于功能比较单一和专门的嵌入式系统,其系统所配套外围硬件也相对单一,所以应用此技术裁剪时,首先要明确Linux系统中的所有模块的配置选项,再选择具体的硬件所需驱动模块进行配置。采用此种裁剪技术剪后的内核占用的系统存储空间相对较小,既满足了嵌入系统所需的硬件配置要求,也实现了其功能的可行操作。此种裁剪方法的粒度较大,也称作为粗粒度裁剪。
1.2基于Linux系统的源代码裁剪技术
在嵌入式系统的实际裁剪中,可在分析Linux内核源代码的详细功能基础上,参考嵌入式系统的具体运行需求,通过修改内核代码,例如保留执行运行操作的内核代码,去除不相关的代码或者函数,提供实际应用中的需要的代码,降低无关代码所占空间。此种裁剪方法的优点是裁剪粒度较小,裁剪内容相对详细;但缺点是操作难度很大,对于源代码的内容量大的操作不易实现。
1.3基于调用图的Linux内核的裁剪技术
基于调用图的Linux内核的裁剪过程分为以下五个步骤:
(1)建立应用程序的调用图
Linux系统设计的程序的调用图有C=(V,R),则有公式(1):
式中,V为程序中所有的函数集合;R为函数调用关系集合。
根据公式(1)建立的调用图应用程序代码,再依据公式和程序代码建立应用程序调用图,就可直接的对库函数进行调用选择,从而去除无关内容。
(2)建立共享库调用图
Linux系统庞大功能的实现对函数库中函数的大量调用,所以建立的调用共享库是Linux系统重要构成,系统所涉及到的程序的基本函数全部保存在共享库中,但是由于其内容庞杂,其占用大量的存储空间,因此针对此问题,需要对共享库的裁剪。
通常,Linux系统内部的共享库是以调用图的形式给出的,如图1所示,其可直观看出系统对库函数的调用结构,使用时,可直接调入到Linux中,且为应用程序提供的多个入口。建立的共享库调用图的目的是为了解相关数据的重复调用性,无关数据库则可直接剔除,实现对共享调用库的裁剪。
图1 共享调用图示意图
(3)建立内核调用图
建立内核调用图和建立库调用图的方法相似,当系统有异常请求或中断信号时,内核就会进行中断判别,根据不同的中断级别进行相应的中断处理,此时只有建立内核调用图,才能明确启动内核函数的具体条件和时间。根据内核函数启动的情况,来去除Linux裁剪中无关的函数。
(4)建立混合调用图
建立混合调用图[1]的方法是在分析以上三种调用图的建立原理基础上,采用三种调用图建立技术优点,弱化其技术缺点,结合实际应用系统的设计要求,构造实际应用系统的混合调用图。如图2给出了面阵CCD航空相机操纵系统图像采集模块的混合调用图。
图2 操纵系统图像模块的混合调用图
(5)内核函数和库函数的调用
设计应用程序时,因无法直接调用内核函数,因此,必须参照所建立的共享库函数与内核函数的映射关系和应用程序与库函数的调用关系。实际调用时对所需的内核函数进行实用性裁剪,同时,可有效去除无关的内核函数。以图2所建立的混合调用图看出,所编写的航空相机操纵系统的图像采集模块的应用程序调用的库函数包括有printf、mmap、munmap和ioctio,内核函数有sys-open、sys-close、sys-write、sys-mmap、sys-ioctl、sys-munmap,而其他无关的库函数和内核功能函数将被裁剪去除。
针对基于PC104总线的硬件资源进行了Boot Loader移植,根据应用需求,将移植后系统采用不同的裁剪方法进行裁剪。
2.1内核相关源代码修改裁剪
系统要修改的相关源代码包括启动程序和arch目录中代码修改文件[2]。对启动程序的修改就是通过对内核入口代码的修改来实现的,具体的做法就是修改路径为/arch/arm/kernel/head-army.s相关源代码文件。内核启动时,内核首先通过入口代码核实PC/104控制寄存器的配对值与Linux内核代码默认信息是否一致。因此,通过修改入口代码可使得Linux内核的正常启动。因为Linux的启动程序中涉及到arch目录,所以必须对arch目录相关文件必须进行一定修改,才能满足不同嵌入式系统的启动要求,主要涉及的文件有Makefile、config.in和entry-army.S。arch目录中与启动有关的文件代码修改流程如图3所示。
2.2粗粒度裁剪内核配置
图3 启动相关文件代码修改流程图
基于Linux自配裁剪技术的粗粒度裁剪内核配置有四种方式:make config、make oldconfig、make menuconfig和make xconfig。根据所需系统的技术要求,选择不同方式的内核配置方式,由于每种应用系统代码修改操作流程不同,以致于操作过程的可操作性难易不同。根据操纵系统程序代码的特点,本文选择了make xconfig方式进行配置,因其具有菜单式配置选项设置,操作过程可视、简便,且有利于提高应用程序代码的重复使用率,使编程简化,节省存储空间[2-4]。图4(a)、(b)给出了操纵系统主控计算机中Linux平台的Xwindow界面。
图4 粗粒度的裁剪内核配置界面图
对于Linux内核提供的配置时,多功能模块给出了Y、N和M三种选择,具体含义分别为将该功能编译到内核、不选择编译和编译存储为实时动态模块并等待需要插入内核。本文为实现所设计的嵌入式系统内核构建最小,多项功能模块的配置选择为N。目的提高内核内存利用率,减少启动时间。
2.3细粒度裁剪内核函数和库函数
基于Linux系统的源代码裁剪技术的细粒度裁剪主要是通过函数分析程序,选择系统为实现某一特定功能必须的函数或者库函数,并剔除无关的函数包,以实现内核空间优化[5]。
表1给出了所设计的操纵系统的应用程序必须调用的库函数,并给出了函数库与内核函数的对应关系。通过此表就可剔除系统无关的函数包,如strcpy。
本文要构造一个具有实时响应能力的实用性Linux系统,其必须具备开关机、重启和任务响应等功能,所以本文对操纵系统进行相关启动和任务响应测试[6]。系统在模拟的环境工作条件下,分别对未裁剪和裁剪后的系统进行了720小时的间歇性性能测试试验,每次试验至少连续工作4小时以上,让被测试系统间歇性执行启动,重启和不同的任务响应,并且在试验测试结束一年以后进行实际应用试验测试。
首先要进行的是开关机与重启测试,系统的启动时间通过系统函数top和uptime可以计算得到。为了验证启动时间的精确性,系统同时采用第三方设备(精密定时器,精度100μs)进行测试。依据航空相机自检工作周期为3.2s~4.6s,故要求裁剪后的系统的启动测试要求时间小于等于5s。经过多次测试后,得到未裁剪和裁剪后系统的启动时间如表2所示。
在进行任务响应功能测试,系统上电启动后,正确连接适配器和外部测试端口,根据应用软件相关提示信息,进行测试,系统文件嵌入相关的计时程序和第三方计时硬件,该程序可自动记录任务响应时间。依据航空相机快门响应范围为1/5000s~1/125s和其姿态调整时间为2.8ms~10.1ms,可以得到裁剪后的系统的任务响应测试要求时间小于等于20ms,具体任务响应测试数据见表3所示。
表1 库函数和内核函数的对应关系
表2 系统启动时间数据表
表3 任务响应测试数据表
由表2和3测试结果分析可知,所设计的面阵CCD航空相机嵌入式Linux系统方案可行,裁剪方法有效。经过实验室测试和实际航拍考核,结果表明该系统稳定、可靠,并且具备嵌入式Linux系统的基本功能和任务响应功能,达到了启动时间小于5s和任务响应时间小于20ms的技术指标的要求。
研究了Linux内核的裁剪技术,采用粗粒度与细粒度相结合的裁剪方法,对所研究的面阵CCD航空相机的操作系统进行裁剪,使裁剪后的系统抢占性和内核实时调度器的调度策略两方面性能得到了大幅度的增强和改善。经过实验室测试和实际航拍考核,表明该系统启动时间小于5s,任务响应时间小于20ms,系统运行稳定、可靠,而本文所研究的裁剪技术对同类型嵌入式系统性能改造也具有较强的实际应用价值。
[1] 张云蓉,王培东.基于调用图的嵌入式Linux裁剪技术研究[J].哈尔滨理工大学学报,2004,9(2):60-62.
[2] 黄义文.Linux操作系统内核裁剪的分析[J].中国民航飞行学院学报,2010,6(2):56-59.
[3] 张国峰.基于Linux的三维图形渲染平台的构建和优化研究[J].系统仿真学报,2006,1(S2):466-469.
[4] 曾福振,闵联营.基于ARM和Linux的嵌入式平台的构建[J].微型机与应用,2011,30(12):51-57.
[5] 刘云新,张尧学.一个基于Linux的嵌入式实时操作系统[J].计算机工程与应用,2001,1(7):64-67.
[6] 段洁.中高空面阵CCD航空相机操纵系统关键技术研究[D].长春:长春理工大学,2013.
Research on Tailoring Technology of Operation System of Medium-high Altitude Area Array CCD Aerial Camera
CAO Weiguo1,ZHENG Zhifeng2,YANG Haining1,WEN Peipei1,DUAN Jie1
(1.School of Optoelectronic Engineering,Changchun University of Science and Technology,Changchun 130022;2.Guangdong College of Business and Technology,Zhaoqing 526020)
In view of the actual demand of operating system of the air plane array CCD camera,and combining with the hardware resources of the PC104 bus structure,the Linux system adopted in CCD camera is cut practically,which based on the tailoring method adopting the combination of coarse-grained and fine-grained to enhance the Linux kernel preemption.Through improving the scheduling strategy of Linux kernel scheduler,we build a embedded system with the strong implementation capacity.The system startup and task of the response performance test in different environment shows that the cut systems is stable,reliable,and can achieve the startup time less than 5s,the performance of the task response time less than 20ms.
aviation camera;operating system;tailoring;Linux
TP391
A
1672-9870(2015)05-0058-06
2014-11-21
曹维国(1958-),男,高级实验师,E-mail:caoweiguo269@sohu.com