高 丽,郭翠玲
(商丘职业技术学院,河南 商丘 476000)
嵌入式Linux仿真开发环境研究
高 丽,郭翠玲
(商丘职业技术学院,河南 商丘 476000)
仿真开发环境为嵌入式Linux的学习与研究提供了一条新的途径,使嵌入式软件的开发与调试可以脱离具体的目标硬件平台,给嵌入式Linux的学习与研究提供了方便.文章详细讨论了一种构建基于arm的嵌入式Linux仿真开发环境的方法.仿真结果表明,基于提出方法构建的嵌入式仿真环境可以应用于日常无硬件开发平台的嵌入式Linux系统的学习与实验,并且具有极大的稳定性与可行性.
嵌入式Linux;SkyEye;交叉编译;ARM;仿真环境
嵌入式系统是一门实践性非常强的学科,然而,对于缺少相应的硬件开发板和完善的软件开发环境情况下,无法深入研究和学习嵌入式Linux系统.Linux下的开源仿真软件SkyEye[1]10-13可以实现基于电脑软件模拟嵌入式硬件开发板的功能,同时SkyEye提供了对当前主流嵌入式操作系统的支持.SkyEye的诸多特性,使得在缺少相关硬件开发板情况下,研究和学习嵌入式Linux系统开发得以成为现实.
嵌入式Linux仿真开发环境主要有2个部分构成,分别是搭建仿真环境和构建交叉编译工具链[2]68-70.本文首先剖析了仿真环境原理,然后详细介绍了仿真软件SkyEye的安装与配置文件,并利用crosstool脚本工具构建了基于ARM的嵌入式Linux交叉编译工具链.从而实现了利用仿真软件快速搭建一个基于ARM的嵌入式Linux仿真开发环境.
现有嵌入式开发框架一般采用个人PC机进行嵌入式软件的开发.由于CPU体系架构的不一致,导致了个人PC机上无法运行嵌入式硬件平台上的代码.一种较为通用的手段是在个人PC机上采用某种仿真软件来模拟嵌入式硬件平台,即采用仿真环境进行嵌入式Linux系统开发.基于仿真环境嵌入式开发的实质是在个人PC机平台上采用指令仿真器执行嵌入式硬件平台上的二进制代码[3]79-83.一个典型的基于仿真环境的嵌入式系统开发架构流程如图1所示.
图1 基于仿真环境的嵌入式开发
基于个人PC机的嵌入式仿真开发环境下,应用程序源代码仍然采用交叉编译工具链编译成能够在嵌入式硬件平台执行的目标机代码,然而这些代码也可以直接在个人PC机上运行.需要特别指出的是,编译后的程序源代码在个人PC机上直接运行需要有相关嵌入式硬件平台仿真器的支持.指令仿真器是嵌入式硬件平台仿真器的核心部分,其功能是将能够在嵌入式硬件平台上执行的二进制程序代码转换为个人PC机CPU体系架构所支持的程序代码[4]34-38.
构建仿真环境所必需的skyeye-1.3.2_rc1.tar.gz需从SkyEye官方站点下载获取,将其在Linux系统下进行解压缩安装.安装过程中需要超级用户的权限,在安装前切换到root用户.整个安装命令如下.
su root
_ (输入root用户的密码)
tar zxvf skyeye-1.3.2_rc1.tar.gz
cd skyeye-1.3.2_rc1.tar.gz
./configure
make
make install
SkyEye模拟的硬件配置和模拟行为由配置文件skyeye.conf中的选项确定.在使用SkyEye前,必须要对它进行相关的修改.通过编写合适的文件,可以配置出SkyEye支持的任何硬件环境.skyeye.conf文件由选项组成,每个选项描述一种需要模拟的硬件[5]78-81.
3.1 准备工具
首先给出需要准备的资源文件,如表1所示.
表1 工具包文件
为了便于管理和使用,在/home/arm/下新建一个目录soure_file存放这些资源文件.然后在/home/arm下使用tar命令解压crosstool-0.42.tar.gz.
3.2 创建脚本文件
由于要构建的是基于arm9架构的,所以要创建的是arm920t的arm-linux-gcc.在/home/arm/crosstool-0.42目录下,新建一个编译脚本arm.sh,在命令行下用vi命令编辑它的内容如下.
set-ex
RESULT_TOP=/opt/crosstool
export TARBALLS_DIR RESULT-TOP
GCC_LANGUAGES=“c,c++”
export GCC_LANGUAGES
mkdir-p $RESULT_TOP
eval ‘cat arm.dat gcc-3.3.6 - glibc-2.3.6.dat’ sh all.sh-notest
1.2.2 细胞转染 lncRNA BLACAT1 siRNA及negative siRNA采购于锐博公司。转染试剂为广州锐博公司提供的riboFectTM CP。siRNA BLACAT1序列5’-GCATCTAAACTCATCACCA-3’。按siRNA终浓度100 nM进行转染。转染具体步骤遵循riboFectTM CP试剂盒说明书。
echo Done.
3.3 建立配置文件
编译脚本arm.sh内的配置文件arm.dat和gcc-3.3.6-gblic-2.3.6.dat,必须依据嵌入式系统的具体配置做相关的修改.依据本文的实验环境,需要将交叉编译工具链选项的字段配置为:“TARGET= ARM-Linux”.配置文件gcc-3.3.6-gblic-2.3.6.dat实现对交叉编译过程中的一些必需库文件以及版本信息进行配置,其中需要将LINUX_DIR选项修改为当前所使用的嵌入式操作系统,此处为Linux-2.6.20.
3.4 执行arm.sh编译脚本
完成arm.sh中有关配置文件的调整后,需要运行脚本文件arm.sh编译交叉编译工具链.在Linux操作系统命令行下,首先需要切换到crosstool-0.42目录,然后执行“./arm.sh”.随后系统进行交叉编译工具的编译过程,通常需要1~2 h左右.当Linux操作系统完成编译过程后,opt/crosstool目录下将会出现若干个不同名称的交叉编译工具.
3.5 添加环境变量
编译完交叉工具链之后,还需要修改Linux环境变量PATH.只需要将其在Linux操作系统etc目录下的配置文件bash.bashrc中进行注册,即在配置文件中的代码的最后添加上刚刚生成的交叉编译工具链所在的存储路径,其配置代码为“export PATH=/opt/crosstool/gcc-3.3.6-glibc-2.3.6/arm-linux/bin:$PATH”.
完成交叉编译工具链和SkyEye安装后,嵌入式linux仿真开发环境就算搭建完成.我们编写了一个程序Simulation _example.c来测试搭建的仿真开发环境.
void simulation ( )
{char *t=“Embedded Linux Simulation example ! ” ;
long* paddr=(long*) 0x50000020;
while(*t)
{ *paddr=*t ;
t++;}
while ( 1 ) ;}
在Linux系统的终端命令里首先运行arm-linux-gcc生成一个Simulation_example.o文件,然后使用arm-linux-ld生成一个ELF格式的可执行程序Simulation_example,最后使用arm-linux-objcopy命令,生成一个只包含程序机器码的二进制文件Simulation_example.bin.由于s3c2410在国内比较流行,因此,我们针对s3c2410这款芯片进行仿真.配置文件skyeye的具体内容如下.
cpu : arm920t
mach : s3c2410x
mem_bank : map=M , type=RW , addr=0x00000000 , size=0x00800000 , file=. /simulation_example.bin
mem_bank : map=I , type=RW , addr=0x48000000 , size=0x20000000
把skyeye.conf与simulation_example.bin放置在同一个文件夹下.在终端中运行skyeye命令,结果可以得出,Embedded Linux simulation example!字符串在仿真环境中打印出来了,说明simulation_example能够正常运行,验证了利用构建的嵌入式Linux仿真开发环境能够进行嵌入式系统的开发与研究.
基于仿真环境的嵌入式系统的开发和学习可以脱离具体的目标机硬件,利用主机(PC)性能高、调试环境好的特点,同时又可以检验目标机系统上的代码的正确性.本文详细剖析了采用SkyEye创建基于ARM体系结构的嵌入式Linux系统仿真开发环境的方法,实验结果表明能够使用仿真开发环境进行ARM平台下的嵌入式Linux开发,具有可靠的稳定性.
[1] 王利明,李 明.一个开放源码的嵌入式仿真环境[J].单片机与嵌入式系统应用,2003(8).
[2] 刘永林,梁 莹,王诗琴.基于Linux的嵌入式交叉编译环境的建立及实现[J].电脑开发与应用,2011,24(7).
[3] 栗华山,罗 婕.嵌入式系统仿真开发环境设计与实现[J].现代计算机(专业版),2012(36).
[4] 陈 渝,韩 超.嵌入式系统设计与实践[M].北京:北京航空航天大学出版社,2009.
[5] 刘林海,王 明,杜克明.基于SkyEye的嵌入式Linux移植仿真技术研究[J].计算机与网络,2014(2).
[责任编辑 冰 竹]
2016-07-04
高 丽(1983- ),女,河南商丘人,商丘职业技术学院讲师,硕士,主要从事嵌入式系统与智能计算研究。
TP316.81
A
1671-8127(2017)02-0098-03