在windows环境下用Sourcery CodeBench编译基于.docx

上传人:b****6 文档编号:6683998 上传时间:2023-01-08 格式:DOCX 页数:22 大小:1.38MB
下载 相关 举报
在windows环境下用Sourcery CodeBench编译基于.docx_第1页
第1页 / 共22页
在windows环境下用Sourcery CodeBench编译基于.docx_第2页
第2页 / 共22页
在windows环境下用Sourcery CodeBench编译基于.docx_第3页
第3页 / 共22页
在windows环境下用Sourcery CodeBench编译基于.docx_第4页
第4页 / 共22页
在windows环境下用Sourcery CodeBench编译基于.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

在windows环境下用Sourcery CodeBench编译基于.docx

《在windows环境下用Sourcery CodeBench编译基于.docx》由会员分享,可在线阅读,更多相关《在windows环境下用Sourcery CodeBench编译基于.docx(22页珍藏版)》请在冰豆网上搜索。

在windows环境下用Sourcery CodeBench编译基于.docx

在windows环境下用SourceryCodeBench编译基于

在windows环境下用SourceryCodeBench编译基于

am3359的u-boot

自从使用am3359以来,总觉得在linux下烧写flash是件麻烦事,而用虚拟机的话又不好Debug。

于是笔者就在想能不能在windows下构建一个环境可以编译基于am3359的u-boot?

这样烧写flash,Debugu-boot将会方便很多。

经过笔者几番尝试,终于找到适用的方法,思路如下:

首先,我们需要模拟linux的操作环境;其次,我们需要交叉编译器来编译可以在ARM上运行的代码;最后,我们需要一个IDE作为框架环境,与模拟linux的操作环境和交叉编译器结合来共同完成编译u-boot。

这里,我们选用MinGW来模拟linux的操作环境,选择SourceryCodeBench作为交叉编译器,使用ccsv5(基于Eclipse框架)作为IDE。

1.安装MinGW/MSYS

我们知道在linux下编译通过的c代码,如果它使用了自己的API,那么在windows下编译是不能通过的。

但是linux的API的功能在windows下是能实现的。

这里我们需要一款软件MinGW/MSYS。

MinGW,即MinimalistGNUForWindows,它是一个Windows特定头文件和使用GNU工具集导入库的集合,能够生成本地的Windows程序而不需要第三方动态链接库。

MSYS,即MinimalGNU(POSIX)systemonWindows,是一个小型的GNU环境,包括基本的bash,make命令等等。

在编译u-boot时,我们需要从MinGW/MSYS中调用一些linux命令。

还有,MinGW/MSYS是完全免费的。

下载MinGW:

 

 

运行mingw-get-inst-20120426,Next->Next->

开始安装。

2.安装SourceryCodeBenchLiteEditionforARMEABI

SourceryCodeBench是一款能够在ARM,Coldfire,MIPS,Power,X86,等平台上作嵌入式C/C++开发的完整的开发环境。

而其中的SourceryCodeBenchLite为你提供免费的,基于命令行接口的交叉编译器。

ccsv5自带有CGT编译器,而我们最终是要能够编译生成在am3359上裸跑的代码,所以我们需要ccsv5调用SourceryCodeBenchLite的交叉工具链替代掉原来的CGT编译器来编译u-boot。

下载SourceryCodeBenchLiteEditionforARMEABI:

EABI:

用于RTOS或者没有os的硬件设备。

这个配置不能用于构建内核或者应用程序。

uClinux:

用于运行不带MMU的CPU上的linux系统。

可以构建uClinux内核和应用程序。

GNU/Linux:

这个用于运行带有MMU的CPU上的linux系统。

可以构建linux内核和应用程序。

SymbianOS:

用于编译Symbian应用程序。

运行arm-2012.03-56-arm-none-eabi

然后Next->Install。

3.构建u-boot工程并编译

为了移植u-boot我们需要做一些编辑工作,这时我们需要一个IDE。

由于我们只需要一个框架平台,用它调用SourceryCodeBench这样的交叉工具链和MinGW/MSYS下的一些linux命令来完成编译,这样Eclipse无疑是适合的选择。

Eclipse,一个跨平台的集成开发环境,它本身只是一个框架平台,但是众多插件的支持,使得人们能够以Eclipse为框架开发自己的IDE。

而ccsv5是基于Eclipse框架的,并且使用ccsv5还可以方便烧写flash和Debug,因此我们选择ccsv5。

关于ccsv5的下载与安装,受篇幅所限,笔者不再详述,大家可以到ti官网上自行下载安装。

3.1安装嵌入式调试插件ZylinCDT

ZylinCDT是一个免费的Eclipse的交叉调试插件,并且能够自动生成makefile。

下载ZylinCDT:

http:

//repo.or.cz/w/zylincdt.git

选择zylincdt:

4.16,点击zip下载。

解压Zylincdt:

 

打开CCSV5,Help->InstallNewSoftware...

Add->Archive->Zylincdt\com.zylin.cdt.updatesite\content.jar

Name:

zylincdt

在ZylincdtEmbeddedCDT选项上打钩,Next>Next>

->Iacceptthetermsofthelicenseagreement

->Finish

3.2导入u-boot工程

由于只是测试所用,笔者下载的是征对beaglebone这块板子配置好的u-boot源码。

File->New->Project

将路径指向到已存在的u-boot中:

3.3为u-boot工程设置一些选项

我们要设置好使用何种交叉工具链,指定好交叉工具链的路径,指定好要使用的MinGW/MSYS中linux命令的路径,然后做好编译u-boot时需要的编译选项。

在工程u-boot处右击,选择Properties:

C/C++Bulid->Environment->Add

Name:

CROSS_COMPILE

Value:

arm-none-linux-gnueabi-

Name:

PATH

Value:

D:

\MinGW\bin;D:

\MinGW\msys\1.0\bin;D:

\Sourcery_CodeBench_Lite_for_ARM_EABI\bin

 

在C/C++Build下,选择BuilderSettings,将Usedefaultbuildcommand前面的钩取消,在下面Buildcommand中添加:

makeCROSS_COMPILE=$(CROSS_COMPILE),选择Behavior,在Build(Incrementalbuild)和clean前打钩,将Build(Incrementalbuild)后的all去掉:

在C/C++Build->Settings中钩上GNUElfParser,然后在弹出的addr2linecommand和c++filtcommand中指明路径:

D:

\Sourcery_CodeBench_Lite_for_ARM_EABI\bin\arm-none-linux-gnueabi-addr2line.exe

D:

\Sourcery_CodeBench_Lite_for_ARM_EABI\bin\arm-none-linux-gnueabi-c++filt.exe

在Project下选择MakeTarget->Creat:

在Targetname中添加distclean点击OK,再用同样的办法添加am335x_evm_config。

制作这两个选项是为makedistclean和makeam335x_evm_config做准备的。

由于做移植工作需要反复编译u-boot,在编译u-boot的过程中会产生一些中间文件和链接文件,当修改完u-boot再次编译时,它可能会调用原来的中间文件和链接文件,这样编译就会出错,这时就需要用到makedistclean。

makedistclean是用来清除之前编译u-boot产生的多余的中间文件和链接文件,能保证再次编译不受上一次干扰。

makeam335x_evm_config则是用来配置板子的相应信息。

3.4修改Makefile和mkconfig

由于Makefile和mkcong中有些命令在现有的环境中还无法使用,比如ln-s链接命令。

Windows下的快捷方式虽然与linux下的链接文件比较相似,但实现机制并不相同,如果通过修改makefile来取代链接文件直接指向原文件的位置,那工作量可想而知。

此时,我们需要一个工具junction。

junction是由Sysinternals出品的一个免费的命令行工具,它可以创建和删除符号链接。

这样我们修改makefile的工作量将大大减少。

下载Junction:

将junction.exe拷贝到D:

\MinGW\msys\1.0\bin下,然后双击它。

打开u-boot根目录下的Makefile,在文件末尾找到clobberclean处,修改如下:

clobber:

clean

@find$(OBJTREE)-typef\(-name'*.depend'\

-o-name'*.srec'-o-name'*.bin'-o-nameu-boot.img\)\

-print0\

|xargs-0rm-f

@rm-f$(OBJS)$(obj)*.bak$(obj)ctags$(obj)etags$(obj)TAGS\

$(obj)cscope.*$(obj)*.*~

@rm-f$(obj)u-boot$(obj)u-boot.map$(obj)u-boot.hex$(ALL-y)

@rm-f$(obj)u-boot.kwb

@rm-f$(obj)u-boot.imx

@rm-f$(obj)u-boot.ubl

@rm-f$(obj)arch/powerpc/cpu/mpc824x/bedbug_603e.c

#@rm-fr$(obj)include/asm/proc$(obj)include/asm/arch$(obj)include/asm

@rm-fr$(obj)include/generated

#new:

adddeletejunctiontothisplace

echo"adddeletejunctiontothisplace"

@[!

-d$(obj)include/asm]||junction-d$(obj)include/asm

@[!

-d$(obj)nand_spl]||find$(obj)nand_spl-name"*"-typel-print|xargsrm-f

@[!

-d$(obj)onenand_ipl]||find$(obj)onenand_ipl-name"*"-typel-print|xargsrm-f

@[!

-d$(obj)mmc_spl]||find$(obj)mmc_spl-name"*"-typel-print|xargsrm-f

注:

红色字体为要添加的部分。

打开u-boot根目录下的mkconfig,找到注释#Createlinktoarchitecturespecificheaders处,修改如下(左边为修改前,右边为修改后):

 

#Createlinktoarchitecturespecificheaders

#

if["$SRCTREE"!

="$OBJTREE"];then

mkdir-p${OBJTREE}/include

mkdir-p${OBJTREE}/include2

cd${OBJTREE}/include2

rm-fasm

ln-s${SRCTREE}/arch/${arch}/include/asmasm

LNPREFIX=${SRCTREE}/arch/${arch}/include/asm/

cd../include

mkdir-pasm

else

cd./include

rm-fasm

ln-s../arch/${arch}/include/asmasm

fi

rm-fasm/arch

if[-z"${soc}"];then

ln-s${LNPREFIX}arch-${cpu}asm/arch

else

ln-s${LNPREFIX}arch-${soc}asm/arch

fi

if["${arch}"="arm"];then

rm-fasm/proc

ln-s${LNPREFIX}proc-armvasm/proc

fi

#Createlinktoarchitecturespecificheaders

#

if["$SRCTREE"!

="$OBJTREE"];then

mkdir-p${OBJTREE}/include

mkdir-p${OBJTREE}/include2

cd${OBJTREE}/include2

rm-fasm

ln-s${SRCTREE}/arch/${arch}/include/asmasm

LNPREFIX=${SRCTREE}/arch/${arch}/include/asm/

cd../include

mkdir-pasm

else

cd./include

#rm-fasm

#ln-s../arch/${arch}/include/asmasm

if[-dasm];then

echo"deletejunctioninclude/asm"

junction-dasm

fi

echo"createjunctioninclude/asm"

junctionasm../arch/${arch}/include/asm

fi

#new:

addrm-rtodeleteadirectory

rm-frasm/arch

if[-z"${soc}"];then

ln-s${LNPREFIX}arch-${cpu}asm/arch

else

ln-s${LNPREFIX}arch-${soc}asm/arch

fi

if["${arch}"="arm"];then

#new:

addrm-rtodeleteadirectory

rm-frasm/proc

ln-s${LNPREFIX}proc-armvasm/proc

fi

 

注:

红色字体为要添加的部分。

 

3.5编译u-boot

因为编译u-boot时会默认调用D:

\MinGW\bin中的strip.exe,而我们需要调用的是SourceryCodeBench中的arm-none-linux-gnueabi-strip.exe。

那么我们只需要做简单地替换就行了,做法:

将D:

\Sourcery_CodeBench_Lite_for_ARM_EABI\bin中的arm-none-linux-gnueabi-strip.exe拷贝到D:

\MinGW\bin中改名为strip.exe替换掉原来D:

\MinGW\bin下的strip.exe。

在Project下的MakeTarget->Build中,选择distclean,点击build:

如果编译提示没有/tmp目录,那么可以用D:

\MinGW\msys\1.0下的msys.bat新建一个:

双击msys.bat,键入:

Mkdir/tmp

Chmoda+rwx/tmp

在Project下的MakeTarget->Build中选择am335x_evm_config,点击build:

在Project下点击BuildProject,开始编译u-boot:

至此u-boot就编译好了。

由于笔者手上的板子没有NANDflash,它是从SD卡启动的,所以要用一个工具把u-boot.bin做成u-boot.img文件。

笔者从网上下载了适用于windows下的mkimage工具,然后把MLO和做好的u-boot.img拷入分好区的SD卡中,结果顺利运行。

笔者做这件事情,一是大家不需要装虚拟机或者linux的物理机,二是对习惯在windows环境下操作的朋友提供一种工作模式,二是为刚从windows转移到linux中工作的人提供方便。

笔者是在windows7系统32位环境下编译的u-boot,编译一次大概30分钟。

由于笔者才疏学浅,文中不足之处还请多多包涵。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1