为了方便,使用cygwin环境进行交叉编译uboot,所以又要做tool chain,搞了个ezx cross tool 的东西,来做.
因为网上有人说uboot.1.1.6用2.95的tool chain好象不行,就决定用3.3.6的tool chain,开始挺顺利的,大概
4-5小时编译后,居然没报什么错误,生成了3.3.6的arm tool chain,
然后开始用tool chain 编译改好的uboot,到ld时报错:
libgcc.a(udivdi3.oS) uses VFP instructions ,where as uboot does not 的错误
网上查了下,有位兄弟报的use hard fpa instrucitons ,where as uboot does not
跟我差不多, 但有区别,他的是libgcc 的浮点库是使用hard fpa,而uboot不支持
我的是libgcc 的浮点库是使用 vfp,而uboot不支持,
其实uboot cpu/arm920t/config.mk中 定义的是msoft-fpa 就是说只支持软件浮点的
我看了ezx cross tool 下面关于浮点的设置文件arm-ezx.dat里面
GCC_EXTRA_CONFIG="--with-cpu=arm9tdmi --enable-cxx-flags=-mcpu=arm9tdmi --with-float=soft"
GLIBC_EXTRA_CONFIG="--without-fp"
的确是设置了soft fpa的选择,那为什么还会使用vfp,比较郁闷
后来查了gcc 的patch 文件,里面有部分关于VFP的patch
难道是patch 打错了,于是我就不对gcc 打patch ,
然后进行编译,哎又是4个多小时,其实前面没方向时已经又build 了好几次,一天也就能试验
两三次,这次编译好后,用来进行uboot 编译,居然报use hard fpa instrucitons ,where as uboot does not
跟网上 那位兄弟一样的错误,不知道那位兄弟后来搞定了没有,可能他用的tool chain 的gcc是没打
fpu 的patch 引起的,对这样情况,网上到是有解决方法,就是把cpu/arm920t/config.mk中msoft-fpa的flag去掉,我试验了下也可以,但是我觉得这样不太好,
于是我有把gcc 3.3.6的patch 拿出来又看了下,我把有vfp相关的path 部分都换成soft-fpa ,
然后不说也知道,又是4个多小时,终于好了,这已经离第一发生该错误,有两天多时间了,这两天基本没做什么,就和tool chain 搅上了,与是用它来build uboot 1.1.6,这次终于成功了
把成功的经验贴出大家共享下,希望大家在搞embed linux 第1步,做交叉编译工具时,能顺利点,
另外如果,有linux 的环境,就用别人已经做好的tool chain,这样问题会少一点,
共享一个,比较新的arm tool chain 的网站:
http://www.freaknet.org/martin/crosstool/packages/
另外如果有什么更好的解决该问题的方法,请告诉我,谢谢