在MACOS上实现交叉编译
在嵌入式开发过程中,设备的存储空间和运算能力通常会比较低,这时候,比如要编译一个linux的内核,嵌入式设备就不能胜任了,所以,实现交叉编译还是很必要的。通过交叉编译,我们就能够在我们的pc上编译出能够在嵌入式设备上使用的可执行程序。
下面,我将一步步讲解如何在MAC OS上实现树莓派(arm)的交叉编译。
一。新建一个磁盘映像
MAC OS的文件系统默认是大小写不敏感的,而交叉编译工具链是基于大小写敏感的文件系统的,所以我们不能直接把工具链安装在原来的文件系统中,而是需要新建一个大小写敏感的磁盘印象用于安装工具链。
实现这一功能并不难,使用系统自带的磁盘工具(disk utility
)就可以实现了。打开磁盘工具,然后 文件>新建>空白磁盘映像,然后在弹出窗口中设置名称为arm-x(便于后续操作),大小至少为500M,格式为Mac OS扩展(区分大小写,日志式)的映像(如下图)。

二。下载已经编译完的工具链
从下面的链接下载已经编译完的arm GNU Linux 工具链:
https://github.com/downloads/UnhandledException/ARMx/ARMx-2009q3-67.tar.bz2
如果你想自己一步步编译,了解工具链中的具体元素的话,可以看一下下面这篇文档:
三。解压工具链压缩包到磁盘映像
在终端进入压缩包所在的目录,执行下面的指令即可:
(新建的磁盘映像默认是挂载的,如果没有挂载的话请先手动挂载)
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程序可以在树莓派上正常运行,下面要检验一下浮点程序是否也可以正常运行。
先写一个简单的浮点程序:

检验结果:

在MACOS上实现交叉编译的更多相关文章
- TODO:macOS上ThinkPHP5和Semantic-UI集成
		
TODO:macOS上ThinkPHP5和Semantic-UI集成 1. 全局安装 (on OSX via homebrew)Composer 是 homebrew-php 项目的一部分 2. 把X ...
 - CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]
		
上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...
 - docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
		
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
 - ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
		
原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...
 - 在 MacOS 上编译链接 OpenGL 程序
		
几个星期以前开始折腾在我的MBA上写 OpenGL 小程序.我不太熟悉MacOS上的开发工具比如XCode,所以一开始的想法就是用vim来写程序,然后手工编译链接.网上查了一下,MacOS上的Open ...
 - 在MacOs上配置Hadoop和Spark环境
		
在MacOs上配置hadoop和spark环境 Setting up Hadoop with Spark on MacOs Instructions 准备环境 如果没有brew,先google怎样安装 ...
 - macOS上实现Qt应用程序做文件关联打开
		
一.背景介绍 用Qt开发的应用程序要实现文件关联,双击时用默认关联的程序打开文件,在Windows上这个功能非常容易实现.Windows应用程序在安装的时候可以在注册表中写入相关的键值对.打开文件的时 ...
 - 在MacOS上使用gdb(cgdb)调试Golang程序
		
如果你在MacOS上使用GDB工具载入Golang程序时无法载入,这篇文章可以解决.本文不具体介绍调试的方法,网上的文章太多了就不赘述了. cgdb使用的是gdb的内核,方法和原理试用本文. 问题分析 ...
 - 基于Python在MacOS上安装robotframework-ride
		
基于Python在MacOS上安装robotframework-ride https://www.jb51.net/article/153665.htm https://www.jianshu.com ...
 
随机推荐
- 通过Greasemonkey实现网页图片自动点击
			
昨天受一个朋友所托,实现了一个在特定网页自动点击某超链接图片实现网页跳转功能的JavaScript脚本. 工具就是Firefox的Greasemonkey扩展插件.代码如下: // ==UserScr ...
 - Authentication in .NET Web Api
			
在介绍WebApi这个小demo前,先来简单说一下OAuth这个东西. OAuth开放授权,用户可以对自己的资源进行第三方授权,那么第三方就可以不用你的账号密码就可以访问你授权的资源了.比如一些论坛直 ...
 - paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库.
			
paip..禁用mmseg 的默认词库. . 仅仅使用自定义词库from数据库. mmseg默认词库只能是文件格式...不好维护..要是不个词库放的个数据库里面走好维护兰.. 要实现2个目标..: 1 ...
 - C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准)
			
C++ Primer中文版(第5版)(顶级畅销书重磅升级全面采用最新 C++ 11标准) [美]Stanley B. Lippman( 斯坦利李普曼) Josee Lajoie(约瑟拉乔伊 ) B ...
 - iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
			
编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...
 - .svn批量删除
			
c.bat @echo on @rem 删除SVN版本控制目录 @rem for /r . %%a in (.) do @if exist "%%a\.svn" @echo &qu ...
 - FGPA 双向 IO 自动方向控制
			
Using a Virtex Device to Drive 5V CMOS-Level Signals Voltage Level-Shifter Output Waveform
 - 关于mysql备份说明
			
#mysqlpump压缩备份vs数据库 三个并发线程备份,消耗时间:222smysqlpump -uzjy -p -h192.168.123.70 --single-transaction --def ...
 - 通过反射获取Android通知栏高度
			
public static int getStatusBarHeight(Context context){ Class<?> c = null; Object obj = null; F ...
 - PHP多次调用Mysql存储过程报错解决办法
			
PHP多次调用Mysql数据库的存储过程会出现问题,主要问题为存储过程中执行多次SQL语句不能一一释放导致的,网上找了一些解决办法,比如使用 multi_query 然后一个一个释放,但是发现根本不适 ...