在嵌入式开发过程当中,设备的存储空间和运算能力一般会比较低,这时候,好比要编译一个linux的内核,嵌入式设备就不能胜任了,因此,实现交叉编译仍是很必要的。经过交叉编译,咱们就可以在咱们的pc上编译出可以在嵌入式设备上使用的可执行程序。html
下面,我将一步步讲解如何在MAC OS上实现树莓派(arm)的交叉编译。linux
一。新建一个磁盘映像git
MAC OS的文件系统默认是大小写不敏感的,而交叉编译工具链是基于大小写敏感的文件系统的,因此咱们不能直接把工具链安装在原来的文件系统中,而是须要新建一个大小写敏感的磁盘印象用于安装工具链。github
实现这一功能并不难,使用系统自带的磁盘工具(disk utility)就能够实现了。打开磁盘工具,而后 文件>新建>空白磁盘映像,而后在弹出窗口中设置名称为arm-x(便于后续操做),大小至少为500M,格式为Mac OS扩展(区分大小写,日志式)的映像(以下图)。 ssh
二。下载已经编译完的工具链工具
从下面的连接下载已经编译完的arm GNU Linux 工具链:测试
https://github.com/downloads/UnhandledException/ARMx/ARMx-2009q3-67.tar.bz2日志
若是你想本身一步步编译,了解工具链中的具体元素的话,能够看一下下面这篇文档:component
三。解压工具链压缩包到磁盘映像
在终端进入压缩包所在的目录,执行下面的指令便可:
(新建的磁盘映像默认是挂载的,若是没有挂载的话请先手动挂载)
tar -zx -C /Volumes/arm-x/ --strip-components 1 -f ARMx-2009q3-67.tar.bz2
四。使用工具链
如今已经可以直接使用工具链了,好比我写了一个hello.c程序,如今能够直接使用工具链对程序进行编译。
在终端执行:
/Volumes/arm-x/bin/arm-none-linux-gnueabi-gcc hello.c -o hello
就能够得到一个名为hello的可执行程序。这个程序在mac下是不能运行的,须要在arm处理器的设备上才能运行。
固然,若是你嫌输入一大串路径去调用arm-none-linux-gnueabi-gcc程序麻烦的话,能够把/Volumes/arm-x/bin目录添加到PATH里去,这样就可以像使用系统命令同样使用了。(添加环境变量的方法不少,建议把路径添加到~/.profile文件中去,具体操做百度一下你就知道)
五。把hello程序上传到树莓派上
若是你本身知道怎么把文件上传到树莓派上,那么请直接上传吧。若是不会,我在这里提供两种方法:
1.使用sftp:这种方法无需另外设置,能够直接把文件上传到树莓派,但每一次更改都须要从新上传。
步骤:
sftp pi@192.168.1.5 (ip地址根据你的地址进行更改)
而后输入密码raspberry
put /本地文件路径 /上传到树莓派上的目录
(例如:put /Users/icool/Desktop/hello . )
2.使用NFS:这种方法须要先进行配置,但配置好后使用十分方便。能够将树莓派上的文件直接映射到mac上,这样在mac上修改便可,无需再上传。
具体步骤能够参考这篇文档:
http://server.zdnet.com.cn/server/2007/0831/482007.shtml
六。在树莓派上执行上传的程序
ssh链接上树莓派(或者任意方法,登录上树莓派便可)。
而后进入hello程序所在目录,执行:
./hello
结果以下:
七。测试浮点程序
经过上一步能够发现交叉编译获得的hello,world程序能够在树莓派上正常运行,下面要检验一下浮点程序是否也能够正常运行。
先写一个简单的浮点程序:
检验结果: