嵌入式Linux交叉开发环境

嵌入式Linux交叉开发环境


2024年4月17日发(作者:)

维普资讯

第26卷 

2006年6月 

文章编号:1001—9081(2006)06Z一0261—03 

计算机应用 

Computer Applications 

Vo1.26 

June 2006 

嵌入式Linux交叉开发环境 

康涌泉,桑楠,邹楚雄,邓竹莎 

(电子科技大学计算机科学与工程学院,四川成都610054) 

(di—shui@tom.corn) 

摘要:对嵌入式软件交叉开发技术进行探讨和研究。利用开源软件在Windows操作系统下,构 

建了一个嵌入式Linux的交叉开发环境,开发了busybox等应用程序,为“龙芯gs32i”开发板搭建了一 

个嵌入式Linux的运行平台。 

关键词:嵌入式开发环境;龙芯gs32i;Cygwin;godson—hnux;BusybOX 

中图分类号:TP311.52 文献标识码:A 

0 引言 

随着嵌入式Linux应用的日益扩展,其开发环境的研究 

也越来越受到人们的重视。国内外许多公司都在致力于嵌入 

式Linux交叉开发工具和集成开发环境的研究,并推出了自 

己的产品,如:TimeSys的TimeStorm Tools、LynuxWorks的 

LynuxWorks。红旗的ControLinux EDK、英培特公司的Embest 

2 嵌入式Linux交叉开发环境 

嵌入式Linux交叉开发技术方面的研究,近年来取得了 

很大的进步,尤其是集成开发环境的应用,大大简化了用户对 

内核和应用程序的开发流程。如TimeSys公司的TimeStorm 

Tools为用户提供了友好的人机交互界面,并把交叉开发过程 

中要用到的工具都集成到一个应用环境中,帮助用户方便的 

IDE等。但出于商业利益的考虑,这些产品一般都未开放源 

码,特别是在Windows环境下如何实现面向嵌入式Linux应 

用的交叉开发,更是作为核心技术加以保护。 

“龙芯gs32i”是由中科院计算机技术研究所自主研发的 

选择交叉编译程序,确定程序的安装过程和安装位置等。 

般而言,交叉开发环境的搭建过程的核心,即交叉编译 

工具、汇编工具、连接工具、调试工具的建立,大体上都的遵循 

图2所示流程。 

编译调试工具gdb 

款高性能、低功耗SOC模式CPU,可运行MIPS32指令系 

统,支持32位Linux操作系统和x-windows视窗系统。在市 

场广阔的嵌入式应用领域,龙芯系列处理器必定会得到越来 

越广泛的应用。但是,龙芯的技术资料基本上都未公开,针对 

龙芯的嵌入式应用开发工具也比较缺乏,给用户的开发应用 

带来了很大的困难。 

l 

I 

重新编译完整的编译工具gcc 

+ 

编译该平台的glibc库 l 

+ 

编译自举的编译工具gcc 

l 

} 

I 生成汇编器、连接器、库处理工具等 

本文在分析嵌入式软件交叉开发原理的基础上,介绍了 

如何在Windows操作系统下利用开源软件、针对龙芯处理器 

实现嵌入式Linux应用软件的交叉开发环境,提出了一个比 

较完整的解决方案,并成功地为“龙芯gs32i”开发板搭建了一 

个嵌人式应用软件开发环境。 

’ + 

I准备硬件环境头文件I lPC环境工具和库等 

图2交叉开发环境建立流程 

3 godson—linux交叉开发环境 

godson-llnux是利用Cygwin构造的一个嵌入式Linux开 

发环境,分成宿主端和目标端两部分。 

应用程序 

1 嵌入式软件的交叉开发 

宿主机:PC 

编译器 

汇编器 

连接器 

调试工具 

目标机:嵌入式 

系统平台 

】 

I 

Flash 

DOC 

l 

l 

I 

虚 ̄ALinux操作系统 

godson-linux 

调试代理 

图1交叉开发环境示意 

配置工具、工程工具、调试工具 

汇编工具、连接工具 

如图1所示,嵌入式软件的交叉开发环境通常由“宿主 

Cygwin I 

I 

l动态链接库 

} 

机”和“目标机”两部分构成。应用程序在宿主机上编辑、编 

译,下载到目标机上运行;对应用程序的调试是通过运行于目 

标机的调试代理程序(或仿真器)与宿主机上运行的调式工 

具一起协同来控制其调试过程。 

Windows ̄作系统 

图3交叉开发环境宿主端结构 

宿主端结构如图3所示。其中,Cygwin是RedHat公司提 

供的一个开源集成环境,它是Windows到Linux的一种中介: 

收稿日期:2005—1O一08:修订日期:2005—12一O8 基金项目:国家863计划资助项目(M0701060103AAIZ2210) 

作者简介:康涌泉(1978一),男,I ̄Jtl安岳人,硕士研究生,主要研究方向:嵌入式Linux技术、Linux BSP技术; 桑楠(1964一),男,四川成 

都人,副教授,博士研究生,主要研究方向:嵌入式实时系统、嵌入式软件工程;邹楚雄(1976一),男,湖南新宁人,硕士研究生,主要研究方向: 

嵌入式交叉调试工具;邓竹莎(1982一),女,I ̄J rl康定人,硕士研究生,主要研究方向:嵌入式实时系统. 

维普资讯

262 计算机应用 2006.年 

提供类Linux的开发指令,让所有IAnux的开发指令在 

现在,有godson-linux工具链,有适用于gs32i体系的c 

库,该回过头去重新编译一个完整的gcc了,先运行make 

clean清除掉编译Bootstrap gee时留下的痕迹,再重新配置如 

下: 

/confiure一g一prefix=/usr/local/crossdcv一一target godson-linux一一 

enable-lngauages=C.C++ 

Windows平台可以得到识别和执行,但编译生成的最终结果 

只能在Windows操作系统下运行。 

基于Cygwin,可以集成适应于“龙芯gs32i”平台的交叉开 

发工具链,包括配置工具、工程工具、编译工具、调试工具和C 

函数库等,共同构成了一个基于Windows的虚拟Linux交叉 

开发环境宿主端。 

然后运行make&&make istnall完成gcc的编译安装。至 

此,已经成功构建起一个适用于龙芯“gs32i”的交叉编译器。 

4.2交叉调试器 

交叉开发的目标机端构造如图4所示。通过在目标机上 

运行调试代理程序的方式,将目标机上程序的运行状态发送 

到宿主机上,从而实现对应用程序的控制和调试工作。本系 

程序的调试是检查程序正确性、可靠性、稳定性的重要手 

统中采用了gdb发行包中的调试代理程序gdbserver。 

} 目标机 

f 磊 厂_面醺孬]厂 丽 

l I令程序ll gdbserver I 

; + I 

I 嵌入式Linux内核驱动程序 I 

} 

l 龙芯开发板 I 

图4交叉开发环境目标端结构 

4重要组成模块的设计说明 

4.1交叉编译器 

交叉编译器是整个交叉开发环境的核心模块,所有应用 

程序的编译都必须由该模块完成才能在特定的硬件平台运 

行。 

在本系统中,需要一个工具能编译适应于龙芯体系的c 

函数库,然后再利用这个c库系统完成对gee的编译,这个工 

具被称作bootstrap gcc,如图5所示。 

l 准备gs32i环境头文件 I 

 }I 

 }I 编i ̄binutils l 

I 

l编译自举的(bootstrap)gee I 

bootstrap gee工具已经可以编译内核了 

I 

I 编译gs32i的glibc I 

I 

I 重新编译完整的gcc I 

图5交叉编译器构建过程 

bootsrtap gee的编译配置过程如下: 

/configure—prefix=/usr/local/cmssdcv--with—ncwlib一-target= 

godson—linux--enable—languages=C—disable—threads一-disable. 

shared 

配置完成后运行make&&make install即可完成bootsrtap 

gee工具的编译和安装。bootsrtap gee运行时不依赖于c库, 

可以直接编译Linux的应用程序或c库函数,但因其支持的 

函数有限,有些程序可能会编译不成功。现在,利用bootsrtap 

gcc工具来编译GNU的c库glibc,这里要用到godson.1inux工 

具链提供的工具,在编译之前将工具链的路径加入到PATH 

中,运行: 

export PATH=/usr/local/cmssdev/bin:¥PATH 

配置过程如下: 

CC=sod ̄on—linux-gee RANLIB=godson-linux.ranlib AR:画ods0n— 

linux-ar./configure—・prefix=/usr/local/crossdev/godson.1inux 

--

enable—add-ons=linuxthrcads host godson-linux 

然后运行make&&make isntall完成 bc的编译和安装。 

段,也是应用程序开发必不可少的组成部分。利用刚才生成 

的交叉编译器来构建交叉调试器,这里采用GNU的Gdb工具 

作为宿主机上对应用程序调试的工具。其配置如下: 

CC godson—linux—gee./configure 

一一

target godson-linux--pmfLX=/usr/local/cmssdev 

然后运行make&&make isntall完成gdb的编译安装,在 

宿主机上就可以用这个交叉调试工具来调试应用程序。 

4.3调试代理 

应用程序运行于龙芯目标平台,作为资源受限的嵌入式 

系统,这里选择使用调试代理程序来实现对应用程序的调试。 

gdbserver是gdb发行包中的一个应用程序,为应用于“gs32i” 

目标板,需要进行合理的配置和编译。切换到gdb-6.0/gd ̄ 

gdbserver/目录下,输入如下配置命令: 

/confiugre host i686一pc—linux-gnu—target Sod ̄on—linux 

然后运行make命令编译生成最终可执行文件gdbserver, 

将其拷贝到目标机平台/usr/sbin目录下,作为系统用户应用 

程序。 

5 系统实现 

实践中选择一台PC机作为宿主机,龙芯“gs32i”开发板 

作为目标机。采用上述方法,可以构造基于龙芯“gs32i”的嵌 

入式开发环境。 

但是,嵌入式系统的目标机往往是一个裸机,无法直接运 

行嵌入式Linux,为此,本系统利用Busybox为Linux系统构造 

个可运行环境。具体的配置生成过程描述如下: 

运行make menuconfig进行配置,设置build options选项 

中cross compiler prefix ̄'J/usr/local/cmssdev/bin/godson. 

1inux-,设置isntallation prefix为/mnt/hdb,选择系统需要的 

shell以及各种小应用程序,完毕以后保存配置文件并退出, 

运行make命令就得到编译好的busybox。 

为硬盘创建一个linux ext2分区,并mount到/mnt/hdb。 

安装busybox时就在硬盘分区中创建了/bin和/sbin目录和应 

用程序,再根据系统需要创建系统目录、设备文件节点等,创 

建一个/bk目录,将之前交叉编译得到的适应于龙芯“gs32i” 

目标板的内核拷贝到该目录下,拷贝系统所需应用程序及动 

态连接库到相应目录,同时修 ̄/etc/fstab、/etc/inittab、/etc/ 

init.d/rcS脚本。至此,整个目标系统就可以直接从硬盘引 

导。 

至此,整个基于龙芯开发板的Linux系统交叉开发环境 

已构造完成,下面利用该环境实现一个专为嵌入式环境设计 

的图形用户界面——MiIligIli库。其源码可以从http://www. 

minigui.conr/download下载到,解开后会形成三个目录 

“libminigui一1.3.0”、“minigui.res.1

3.0”、“mde.1.3.0”。 

Minigui有两种运行模式,一种是thread模式,另一种是lite模 

维普资讯

6月 康涌泉等:嵌入式Linux交叉开发环境 263 

式,实验中选择的是lite模式(关于Minigui的更多信息,请查 

阅其手册)。设置环境变量PATH如下: 

PATH=/usr/godsen—linux/bin:SPATH 

还未在该系统上实现图形窗口,只能在虚拟终端上进行操作, 

给应用开发人员的使用带来一些不便。这些问题将会在未来 

的研究中逐步解决,使交叉开发环境更加完善,并在应用领域 

得到更大的扩展。 

参考文献: 

ftl WIN—BINSEE,PAO—ANN HSIUNG,TRONG・YENLEE,eto2. 

Software platform for embedded software development【A】,Real— 

Time and Embedded Computing Systems and Applications,9th Inter- 

首先编译Minigui的函数库libminigui,进入libminigui一1. 

3.0目录进行配置: 

/configure host i686一pe—linux—gnu一一enable—lite 

配置完成后输入命令make install,系统将开始编译和生 

成minigui的动态和静态库文件,并将生成的库文件安装到/ 

mr/local/lib目录下,相应的头文件将会安装到/usr/lcalo/ 

include/minigui目录下,然后进入minigui-res-1.3.0目录安装 

national Conference,RTCSA 2003【C】,Berlin,Germany:Springer- 

Verlag.2004.545—57. 

资源文件,至此,Mimgui图形开发环境就建立起来了,利用该 

环境,编译mde.1.3.0中的演示程序,编译完成后,该演示程 

序在龙芯“gs32i”系统平台上成功运行起来。 

【2】LEHRBAUM J,WEINBERG W.Cross—development of embedded 

Linux programs on windows・based host computers【J】,Elektonirk, 

2003,52(16):45—9. 

【3】 SEUNGWOO SON,CHAEDEOK LIM.HEUNG-NAM KIM.Debug- 

6结语 

在嵌入式软件系统设计中,交叉开发环境的设计至关重 

要,本文通过对嵌入式Linux交叉开发平台技术的探讨和研 

究,利用开源软件构建了一个嵌入式Linux的交叉开发环境, 

并成功地在龙芯“gs32i”系统上实现了一个嵌入式Linux运行 

平台,在此基础上,可以构建更丰富的应用,目前已经完成 

web服务器、SSH服务程序、Mi ̄isui库等。 

当然这个交叉开发平台还有很多不足,其编程、编译、链 

ging protocol for remote cr0s8 development environment【A】,Proceed・ 

ings of the Seventh International Conference on Real—Time Systems 

nd Applaications(RTCSA'00)【C】.2OOO. 

【4】 陈滔,李志刚.刘执远,等.CC—Linux集成开发环境的设计与实现 

【J】.计算机工程与应用,2001,37(23). 

【5】 刘执远.嵌入式Linux集成开发环境【M】.西安:西北工业大学. 

2o01. 

【6】何家胜.龙芯开发板的软件构建【Z】。2004. 

【7】 Busybox:The Swis army knife of embedded linux【EB/OL】.ht- 

tp://busybox.net/about.htm1.2005一lO. 

接库、调试工具等相对独立,没有一个统一的操作窗口;目前 

(上接第254页) 

结果反应不出基于外存的索引结构的性能特点,因此我们只 

使用冷结果作为评价算法性能的依据:每次查询进行之后,都 

有相应的清理内存的动作。 

3.3结果分析 

表1实验结果分析 

4 结语 

针对NB—tree只存储对象的欧氏距离而忽略位置信息的 

缺点,提出了New-NB—tree索引结构。New-NB—tree主要是修 

改了NB-tree叶子节点的结构,增加了独立于维数的角度信 

息,通过较小的存储空间和代价不大的计算,在完成原有的过 

滤功能外,进行了第二级过滤,减少了I/O次数,提高了算法 

的效率。实验数据证明了算法的有效性。 

参考文献: 

【1 1 GAEDE V,GUNTHER O.Mulitdimensional Access Methods【J】. 

 

查询半径0.04查询半径0.06查询半径0.08 

查询半径0.1

旧算法新算法旧算法新算法旧算法新算法 旧算法新算法 

22l6 l 636 256o l 960 2890 2404 

4563 4097 

l 654 

l980 

2631 

l l36 

l423 

l962 

2234 

l 392 

l748 

2234 

2569 

3461 

l 820 

2064 

2798 

3610 2931 

3621 3l9O 

1767 3l12 2226 5698 4846 

ACM Computing Surveys,1998,30(2),170—231. 

966 

l 589 

665 l 268 989 l 657 l488 2645 2352 

2234 

3234 

【21 WEBER R,SCHEK H-J,BLOT S.A Quantitative AnMysis and Per- 

formance study for Similarity—search Methods in High-dimensional 

l064 23l1 l 720 2886 2530 

264l 

2136 

l 589 

2l14 

l662 2594 2o03 

934 l 898 

3l52 2546 

3845 

l 320 2l23 l654 

2964 

2386 3156 

3679 

2346 

2691 

3l6o 

Spaces[AI.In 24th Int.Conference on Very Databases 

l463 2480 2O84 2698 

(VLDB)【C1.New York,1998.194—295. 

[31 FONSECA MJ,JORGE J.Indexing Hish・Dimensional Data for Con- 

tent—Based Retrieval in Databases【AI.Proceedings of the 

2365 l 538 3l2O 2332 3561 2733 

在磁盘进行一次I/0的时间里,一台典型的机器能执行 

百万条的指令 ],因此I/0操作所用的时间是算法所用时间 

的近似值,是影响索引算法效率的主要因素。在实验中以过 

滤后的对象数量作为I/0次数比较的量度。这里采用的检索 

效率提高程度的计算公式为: 

8tMntemafional Conference on Database Systems for Advanced Ap- 

pliatcions[CI.Kyoto,Japan,2003.267—274. 

[41 CHA GH,ZHU XM,PETKOVIE D.An F-, ̄cient Indexing Method or f

Nearest Neighbor Searches in Hish—Dimensional Image Databases 

【J1.IEEE,2002,4(1):76—87. 

【51 FILHO RFS,TRAINAA,TRAINA C JR,et o2.Similarity Search 

itwhout Tears:the OMNI—Family of All—Purpose Access Methods 

( —oldnu mi -newnumi)/Ⅳ 

其中,o/dnum, 表示第 次旧算法过滤后的返回的数据量, 

newnu/Y/, 表示第i次新算法过滤后的返回的数据量,Ⅳ表示检 

【AI.17th International Conference on Data Engineering[C】.Hei— 

delberg,Germany,2001.623—630. 

[61 LI C,CHANG E,GARCIA—MOLINA H,et a1.Clustering or fApproxi. 

mate Similariy tSearch in Hi sh—dimensional Spaces[J1.IEEE Tram— 

索的次数。按着这种计算方法得到4种情况的检索效率的提 

高率分别为:30.8%,21%,16.2%,14.2%.从实验结果可 

以看出,当查询半径较小时,索引结构的效率提高较大。 

actions on Knowldge aend Data Engineering,2002,14(4):792— 

808. 


发布者:admin,转转请注明出处:http://www.yc00.com/web/1713292646a2220222.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信