ARM&x86交叉编译——因快而乐

0

浙江大学计算机科学与技术学院 / 课程:嵌入式系统 / 指导教师:翁恺

ARM&x86交叉编译——因快而乐

一、实验目的和要求

在PC上(Windows、MacOS或Linux)上搭建交叉编译环境。

二、实验内容和原理

交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码。

  1. 下载工具链
  2. 测试交叉编译

三、主要仪器设备      

创见8G C10 SD卡

树莓派Model B

PL2303 USB-to-Serial

其它配件

VMWare Workstation 9.0.1 build-894247

Ubuntu 11.04 32-bit

四、操作方法和实验步骤

1.下载工具链

git clone git://github.com/raspberrypi/tools.git#因为我之前已经做过一次了,这次git它就告诉我目录非空了

cc_01

将工具链所在文件夹加入可执行目录

export PATH=/home/axel/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin:$PATH

这里的目录(尤其是用户名部分)会随着git的位置不同而发生变化,应根据自己的配置进行修改。

cc_02

然后就可以用arm-bcm2708hardfp-linux-gnueabi-gcc来编译树莓派的C语言程序了。

2.测试交叉编译

找个地方建立一个hellopi.c

mkdir raspberrypicd raspberrypi

nano hello.c

cc_03

照例来个Hello, World!,不过这里我们稍稍改一点内容,省得千篇一律

#include <stdio.h>Int main(){

printf(“Hello, World! Hello, Raspbery Pi!\n”);

printf(“–from Ubuntu x86\n”);

return 0;

}

cc_04

保存退出之后,用刚才的命令编译它

arm-bcm2708hardfp-linux-gnueabi-gcc –o hellopi hellopi.c

cc_05

编译完了,这里不能直接执行,但我们能够看一下它的文件信息。

file hellopi

cc_06

可以看见这个文件是用于ARM的。然后把这个文件扔到树莓派上去,扔完之后记得设权限不然会没法执行的

sudo chmod 755 hellopi

cc_07

./hellopi

cc_08

一切正常,交叉编译完成!

 

五、实验数据记录和处理

数据么……没有唉……

六、实验结果与分析

实验结果见上图,运行成功。

七、讨论、心得

这次交叉编译花了好多的时间,而且过程也很纠结(真的很纠结)。一方面是因为只上过C程、只会写hello, world!程序并且之前几乎没有接触过Linux,另外一方面是因为……这门课貌似只有我一个是在紫金港的吧……所以一切只能靠度娘和谷哥。期间也尝试过很多其它的交叉编译工具链,比如arm-linux-gcc,以及crosstool-ng,但是因为各种原因都没有成功,大多数都是编译出来,file显示一下也是用于ARM的,但扔到树莓派上仍然提示无法执行二进制文件这样的错误。在用虚拟机跑Ubuntu之前,还尝试了另外一款软件叫做Cygwin,不过最后也是因为各种原因失败了(毕竟在Windows下面跑一个Linux模拟器也是很奇怪的吧……)。不过我倒是还是希望能够再试一试Cygwin的,毕竟开模拟器的开销应该会比虚拟机更小一些吧。

交叉编译

Comments

您的电子邮箱地址不会被公开。 必填项已用*标注