浙江大学计算机科学与技术学院 / 课程:嵌入式系统 / 指导教师:翁恺
ARM&x86交叉编译——因快而乐
一、实验目的和要求
在PC上(Windows、MacOS或Linux)上搭建交叉编译环境。
二、实验内容和原理
交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码。
- 下载工具链
- 测试交叉编译
三、主要仪器设备
创见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它就告诉我目录非空了 |
将工具链所在文件夹加入可执行目录
export PATH=/home/axel/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin:$PATH |
这里的目录(尤其是用户名部分)会随着git的位置不同而发生变化,应根据自己的配置进行修改。
然后就可以用arm-bcm2708hardfp-linux-gnueabi-gcc来编译树莓派的C语言程序了。
2.测试交叉编译
找个地方建立一个hellopi.c
mkdir raspberrypicd raspberrypi
nano hello.c |
照例来个Hello, World!,不过这里我们稍稍改一点内容,省得千篇一律
#include <stdio.h>Int main(){
printf(“Hello, World! Hello, Raspbery Pi!\n”); printf(“–from Ubuntu x86\n”); return 0; } |
保存退出之后,用刚才的命令编译它
arm-bcm2708hardfp-linux-gnueabi-gcc –o hellopi hellopi.c |
编译完了,这里不能直接执行,但我们能够看一下它的文件信息。
file hellopi |
可以看见这个文件是用于ARM的。然后把这个文件扔到树莓派上去,扔完之后记得设权限不然会没法执行的
sudo chmod 755 hellopi |
./hellopi |
一切正常,交叉编译完成!
五、实验数据记录和处理
数据么……没有唉……
六、实验结果与分析
实验结果见上图,运行成功。
七、讨论、心得
这次交叉编译花了好多的时间,而且过程也很纠结(真的很纠结)。一方面是因为只上过C程、只会写hello, world!程序并且之前几乎没有接触过Linux,另外一方面是因为……这门课貌似只有我一个是在紫金港的吧……所以一切只能靠度娘和谷哥。期间也尝试过很多其它的交叉编译工具链,比如arm-linux-gcc,以及crosstool-ng,但是因为各种原因都没有成功,大多数都是编译出来,file显示一下也是用于ARM的,但扔到树莓派上仍然提示无法执行二进制文件这样的错误。在用虚拟机跑Ubuntu之前,还尝试了另外一款软件叫做Cygwin,不过最后也是因为各种原因失败了(毕竟在Windows下面跑一个Linux模拟器也是很奇怪的吧……)。不过我倒是还是希望能够再试一试Cygwin的,毕竟开模拟器的开销应该会比虚拟机更小一些吧。
交叉编译
Comments