Devkit8000交叉编译开发环境搭建

开始搭建平台开发环境了,看了下资料光盘,已经给了交叉编译工具:arm-2007q3-51-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2。这个工具蛮陌生的。上网查了下,原来是ARM公司和XX公司的合作产物,可惜IDE要交钱的...ORZ俺可是穷人啊。好在,人家也厚道,留了个免费的Lite版,就是用命令行的版本。行了,能用就行了,不就命令行嘛,俺还能装高深呢。

arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2 下载见Linux公社的1号FTP服务器里,下载地址:

FTP地址:ftp://www.linuxidc.com

用户名:

密码:

在 2011年LinuxIDC.com\5月\Ubuntu下用Eclipse CDT开发STM32

下载方法见

光盘提供的是2007q3版本的,现在都2010了,还用2007的版本感觉不爽。所以下了个最新的2009q3版。不过提下,由于Linux下软件版本变化比较敏感。不用官方提供的版本意味着以后编译时会遇到一些比较棘手的问题,所以如果不是像我一样想探索的人,建议还是用官方提供的版本吧。

废话讲完,下载也结束了。将下载的arm-2009q3-68-arm-none-eabi-i686-pc-linux-gnu.tar.bz2文件解压到/opt/devkit8000tools下,这点与官方教程不一样,官方教程上的目录是/home/embest。我为什么要放在/opt下呢?唉,没办法,本人之前半年远在异国他乡做的项目交叉编译工具就放这个目录下,先入为主嘛,习惯是很难改变的。好在这个问题不大,只是在设置环境变量时记得该相应目录就可以了。
另外,还需要将光盘中的工具mkimage,signGP,mkfs.ubifs,ubinize和ubinize.cfg五个工具放入/opt/devkit8000tools/tools目录下。
最后需要设置环境变量,个人建议将其写入用户目录的.bashrc文件中。export PATH=/opt/devkit8000tools/arm-2009q3/bin:/opt/devkit8000tools/tools:$PATH。添加完成后,可以使用echo $PATH命令来看添加是否成功。

好了,交叉编译环境已经完成。我们来试着用刚刚搭建好的环境做一次完整的编译来检验下我们的劳动成果吧!

将资料光盘中的source文件夹下的linux-2.6.28-omap,rootfs,u-boot-1.3.3,x-load-1.41四个项目解压到自己喜欢的工作目录。我习惯放在/root/workspace/devkit8000/下,呵呵,被发现了,我用的root用户,我知道这样有NNN个不要使用root用户的理由......不过为了图方便,我还是用了root。

简单介绍下这四个项目:
1.x-load。bootload的前导程序,在开发板上电时将u-boot载入内存,并启动u-boot。
2.u-boot。不用说了,有点基础的人都知道,一款功能强大的bootload程序。至于功能有多强大...总之就是灰常灰常强大啦...DX~
3.linux-2.6.28-omap。Linux内核源文件,看文件名,应该是加入了omap定制驱动的。具体有哪些改动,待我以后再慢慢琢磨。
4.rootfs。当然就是文件系统啦。对各种文件系统不太了解,看来我还属于菜鸟...


先从x-load开始,在文件夹中居然发现了make.sh。根据多年的经验,厄,大于1年就算多年了对吧。这种sh文件可是好东西,一般懒人都喜欢用,常吧很多命令写成一个脚本,直接运行。这个make.sh也不例外,吧从清理到配置再到编译的命令一步搞定。

所以,直接运行./make.sh,结果提示:
error: bad value (armv7a) for -march= switch
杯具啊!!!早就想到采用不同交叉编译器版本会有问题,没想到第一步就中招,看来我的RP果然...
于是再去CodeSourcery官网,看看使用说明有什么线索。结果,功夫不负有心人,在使用说明中发现对ARMv7的配置命令是ARMv7-a,看来是这里出了问题。于是,将x-load-1.41/cpu/omap3/config.mk文件中的PLATFORM_CPPFLAGS += -march=armv7a改为PLATFORM_CPPFLAGS += -march=armv7-a。(另外u-boot项目的config.mk文件也做此修改。)保存,编译,老天保佑,终于通过了!!!

接下去让我们转战u-boot。来到目录下,居然没有make.sh...没关系,我们自己做一个。将:
make distclean
make omap3_devkit8000_defconfig
make
3条命令保存其中,再运行./make.sh
这次出现错误提示:cannot be declared weak
看来又是一个编译工具的问题,貌似是这个版本的编译器不能内联函数的嵌套,于是做如下修改(-表示删除该行,+表示加入该行):
void inline __coloured_LED_init (void) {}
-void inline coloured_LED_init (void) __attribute__((weak, alias("__coloured_LED_init")));
+void coloured_LED_init(void)__attribute__((weak, alias("__coloured_LED_init")));
 void inline __red_LED_on (void) {}
-void inline red_LED_on (void) __attribute__((weak, alias("__red_LED_on")));
+void red_LED_on(void) __attribute__((weak, alias("__red_LED_on")));
 void inline __red_LED_off(void) {}
-void inline red_LED_off(void)      __attribute__((weak, alias("__red_LED_off")));
+void red_LED_off(void)__attribute__((weak, alias("__red_LED_off")));
 void inline __green_LED_on(void) {}
-void inline green_LED_on(void) __attribute__((weak, alias("__green_LED_on")));
+void green_LED_on(void) __attribute__((weak, alias("__green_LED_on")));
 void inline __green_LED_off(void) {}
-void inline green_LED_off(void)__attribute__((weak, alias("__green_LED_off")));
+void green_LED_off(void)__attribute__((weak, alias("__green_LED_off")));
 void inline __yellow_LED_on(void) {}
-void inline yellow_LED_on(void)__attribute__((weak, alias("__yellow_LED_on")));
+void yellow_LED_on(void)__attribute__((weak, alias("__yellow_LED_on")));
 void inline __yellow_LED_off(void) {}
-void inline yellow_LED_off(void)__attribute__((weak, alias("__yellow_LED_off")));
+void yellow_LED_off(void)__attribute__((weak, alias("__yellow_LED_off")));
 void inline __blue_LED_on(void) {}
此外,在main.c中也有此类型的一个错误,修改方式一样,将第二个内联函数改为一般函数即可。另外,之后测试发现一个问题,使用2009编译器版本时,需要将include/configs/omap3devkit8000.h中的CFG_I2C_SPEED更改为100000(即100K),不然I2C会出现I2C_STAT=1000的TIMEOUT错误。再编译,终于顺利通过,u-boot完成!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwfpsp.html