在windows环境下用Sourcery CodeBench编译基于.docx
- 文档编号:6683998
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:22
- 大小:1.38MB
在windows环境下用Sourcery CodeBench编译基于.docx
《在windows环境下用Sourcery CodeBench编译基于.docx》由会员分享,可在线阅读,更多相关《在windows环境下用Sourcery CodeBench编译基于.docx(22页珍藏版)》请在冰豆网上搜索。
在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分钟。
由于笔者才疏学浅,文中不足之处还请多多包涵。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在windows环境下用Sourcery CodeBench编译基于 windows 环境 Sourcery CodeBench 编译 基于
![提示](https://static.bdocx.com/images/bang_tan.gif)