嵌入式linux系统的裁剪优化和测试技术

2012-10-17 16:58:26
科技传播 2012年3期
关键词:源码开发板配置文件

胡 晋

同济大学电信学院,上海 201804

1 裁剪需求分析

Linux操作系统并不是专为嵌入式系统设计的,应用于嵌入式设备时必须进行裁剪优化,其目的之一是为了简化已有的操作系统内核的功能和结构,以满足嵌入式系统对资源的限制需求。

嵌入式操作系统需要裁剪的对象主要有:引导及初始化程序,操作系统内核,系统动态加载模块,动态链接库以及根文件系统等。定制裁剪的一般操作过程如下:获取linux内核、GNU utility等源代码,根据项目需求和具体平台对内核源代码进行补丁操作,手工配置,去掉多余的功能模块,保留部分开发调试用模块和目标功能模块,生成配置文件。然后根据配置文件进行自动交叉编译和链接,生成压缩过的适合具体硬件平台的内核映像文件。再以同样方式生成引导初始化程序映像和根文件系统映像,最后把三者通过适当的方式安装到目标开发板中,生成我们的目标操作系统,并且进行功能和性能测试分析。

2 内核的裁剪和移植

内核裁剪方式有多种,有基于原内核提供的kbuild体系的裁剪方法,有基于代码分析的linux裁剪方法,有基于调用图的linux裁剪方法。基于短开发周期的需求考虑,选择采用kbuild体系的裁剪方法。Kbuild体系通过预定义一些变量(obj-m,obj-y)和目标(bzImage),使内核的编译和扩展变得十分方便,具有很强的可定制性。

2.1 选择交叉编译环境

可以有多种方式来建立交叉编译环境,包括自行通过源码编译,通过外部工具进行批处理编译,本文采用开发板自带的交叉编译器。

2.2 支持开发板的arm架构

原始内核源码包缺乏支持目标开发板的模块,需要打上由厂商所提供的补丁。

2.3 修改内核Makefile文件

在内核源码目录下的Makefile中修改指定内核架构和交叉编译器,这样就不需要在编译时再指定了。

2.4 选择默认配置文件,在此基础上进行内核配置的修改

配置内核有四种基本方式,有基于字符终端的也有在图形界面下配置的。

make config 基于文本的最为传统的配置界面,不推荐使用;

make menuconfig 基于文本选单的配置界面,字符终端下推荐使用;

make xconfig 基于图形窗口模式的配置界面,Xwindow下推荐使用;

make oldconfig 如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦。

以make menuconfig为例,选择相应的配置时,有三种选择,它们分别代表的含义如下:

Y-将该功能编译进内核;

N-不将该功能编译进内核;

M-将该功能编译成可以在需要时动态插入到内核中的模块;

配置过程需要使用空格键进行选取。在每一个选项前都有个括号, 但有的是中括号有的是尖括号,还有一种圆括号。

用空格键选择时可以发现,中括号里要么是空,要么是"*",而尖括号里可以是空,"*"和"M"。这表示前者对应的项要么不要,要么编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的几个选项中选择一项。

快速配置方法:make localmodconfig。Linux 2.6.32 开始引入了一个make localmodconfig用于简化kernel的配置。make localmodconfig会执行lsmod命令查看当前系统中加载了哪些模块(Modules),将原来的配置文件中不需要的模块去掉,仅保留前面lsmod出来的这些模块,从而简化了内核的配置过程。

这个方法的缺点是:仅能使编译出的内核支持已经加载的模块。因为该方法使用的是lsmod的结果,如果有的模块当前没有加载,那么就不会编到新的内核中。

配置完成后,保存退出,配置程序会自动生成一个隐藏的配置文件.config,需要把这份文件另存到其他地方以便管理和使用。编译内核时,源代码目录顶层Makefile文件读取该目录下的.config文件,得到内核配置过程中所产生的编译宏。Makefile根据这些使用编译宏,决定所编译的文件列表,并通过Rules.make使用公共规则产生相应的目标。

在GCC中,最常用的优化选项是-Os,有-O0 -O1 -O2 -O3-Os。-O0关闭编译器优化,-O1是第一级优化,编译器将在不显著增加编译时间的基础上,尝试减少代码尺寸,缩短执行时间。使用-O2和-O3将增加优化级别,同时仍然保留-O1所采取的优化方法。-Os是介于-O2和-O3之间的优化级别,使用-O3优化可能造成不好的后果。

2.5 编译内核

在内核源码目录执行下列命令,生成内核镜像文件。

生成的内核镜像位于源码目录的arch/arm/boot/,第一步命令生成的是zImage,是一般情况下默认的压缩内核映像文件,通过压缩vmlinux,再加上一段自解压代码生成。第二步命令是生成uImage,uImage是使用工具mkimage对普通zImage之前加上一段长度为64字节的字段生成,说明了该内核的版本,加载位置,生成时间,内核大小等信息,是ARM架构专用的映像文件。

3 根文件系统的实现

典型的嵌入式linux根文件系统具有几个特征,其一是根文件系统中文件、库和目录,通常是经过必要的选取和简化的,其二是根文件系统是经过压缩的,系统启动时解压到内存中。

嵌入式linux根文件系统制作工具BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox 通过传递特定参数的方式来实现特定的linux工具和命令,提供超过200个Linux工具和命令的简化模式。

图1 不同系统创建进程比较

图2 不同系统本地管道通信延迟比较

图3 不同系统创建删除10k文件系统时间比较

3.1 配置和编译

由于BusyBox也采用了ncurses工具,因此可以通过类似编译内核的配置方式:make menuconfig来进行BusyBox的具体配置过程。配置过程中,可以在Makefile中具体指定ARCH和CROSS_COMPILE,安装目录,是否采用动态编译和需要哪些linux命令工具。

3.2 制作jffs2镜像

通过mkfs工具生成经过压缩的根文件系统镜像jffs2.img。

4 系统测试

将内核镜像文件uImage和根文件系统镜像文件jffs2.img通过开发板工具载入开发板flash进行功能测试,也可以在boot阶段通过tftp来完成载入内存工作。测量内核静态体积大小,缩小到约原来的30%。

4.1 初步启动测试结果

嵌入式linux操作系统成功启动。

4.2 可用性测试

通过对U盘,网卡等板上设备使用、C应用程序运行,操作系统命令运行等进行测试,结果正常。

4.3 性能基准测试

lmbench具体通过内存拷贝,内存读写,管道,上下文切换,网络连接的建立,文件系统,进程创建,信号处理,系统调用等参数来建立性能指标体系。

4.4 测试结果及其分析

在原来的嵌入式操作系统和目标操作系统上运行lmbench100次,获取有效数据进行处理分析, 性能指标选取有如下几类:processes-time,pipe communication latencies,File create&delete latencies。比较各性能指标平均数发现,裁剪后的linux操作系统性能提升约5%~10%,稳定性有一定提高。

5 结论

随着linux的发展,linux内核的体积越来越大,通过优化内核体积和系统内存占用,可以在一定程度上提升linux的性能表现。目前linux的裁剪定制主要依赖于灵活的kbuild体系,通过条件编译来实现。其他更细粒度的技术比如代码分析技术,调用图技术还有待发展和成熟。

[1]Anand K Santhanam,Vishal Kulkarn.嵌入式设备上的linux系统开发[DB/OL].http://www.ibm.com/developerworks/cn/linux/embdev/samsung.com,2004,3.

[2]李绍勋,陈朔鹰,罗国良.linux2.6内核测试及其到ARM嵌入式平台的移植[J].理论和研究测试卷,2005(5).

[3]刘文峰,李程远,李善平.嵌入式Linux操作系统的研究[J].浙江大学学报:工学版,2004,38(4):447-452.

[4]马永光,席亚宾,林永君.基于linux的嵌入式操作系统的研究[J].计算机世界网,2003.

[5]郑家玲,张云峰,嵌入式系统的内核载入过程浅析[J].微型机与应用,2002(11):59-60.

[6]TINYNew project home page of tiny:http://tinylab.org/index.php/projects/tinylinux.

[7]Karim Yaghmour.构建嵌入式linux系统.台湾:O'Reilly,2005:579-613.

[8]Greg Kroab-Hartman.Linux Kernel in a Nutsbell:O'Reilly,2010.

[9]G Gogniat,M auguin,L Bianco.A Codesign Back-End Approach for Embedded System Design.ACMTrans On Design Automation of Electronic System,2000,5:492-509.

猜你喜欢
源码开发板配置文件
基于网页源码结构理解的自适应爬虫代码生成方法
计算机应用(2023年6期)2023-07-03 14:11:56
基于图神经网络的软件源码漏洞检测方法
计算机时代(2023年6期)2023-06-15 17:49:09
提示用户配置文件错误 这样解决
企业如何保护源码
搭建简单的Kubernetes集群
互不干涉混用Chromium Edge
忘记ESXi主机root密码怎么办
Microchip最新推出两款PIC32 Curiosity开发板
浅析单片机开发板的设计与制作
电子制作(2017年22期)2017-02-02 07:10:14
基于数据结构教辅系统的实验课程改革
计算机教育(2016年4期)2016-05-20 02:36:05