完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
【1】为什么要使用交叉编译
交叉编译工具较快开发的速度。树莓派中已经安装了gcc工具链,可在树莓派中直接编译源代码生成可执行文件。于此同时,PC机上也可使用gcc工具链生成可执行代码,但是和树莓派上的gcc工具不同,PC机上的gcc工具生成intel或amd芯片上可执行的代码,但树莓派却是ARM系列的芯片,显然存在不小的差异。那么使用交叉工具链便可在PC机上开发树莓派中可执行程序。 虽然树莓派的主频可达700MHz远高于一般的嵌入式系统,但相比于PC机其性能还是差些,使用交叉工具链可节约开发时间。在编译链接同等规模的代码时,PC机所用的时间应少于树莓派所用时间,通过交叉编译的方法提高效率。 【2】PC机环境 ubuntu 14.04 amd64 请注意32位系统和64位系统存在差异,请注意博文中相关章节的描述。本文的程序在ubunut 14.04 amd64系统,lubuntu 14.04 i386系统中测试通过(硬盘安装,非虚拟机环境)。 1.设置交叉工具链【1】下载必要的软件和工具 sudo apt-get install build-essential git 【2】clone交叉工具链 在home路径下建立一个文件夹取名为rpi mkdir rpi 进入该目录并执行clone操作(更正一处错误) cd rpi git clone git://github.com/raspberrypi/tools.git 请注意clone的时间较长请耐心等待。clone完成之后可进入以下目录查看工具链的具体内容。 cd /home/rpi/tools/arm-bcm2708/ 【特别提醒】 克隆完成之后可以通过pull更新tools cd /home/rpi/tools git pull origin 该目录中存在4个文件夹,本例使用gcc-linaro-arm-linux-gnueabihf-raspbian 或 gcc-linaro-arm-linux-gnueabihf-raspbian-x64。前者对应32位系统后者对应64位系统。 arm-bcm2708hardfp-linux-gnueabi gcc-linaro-arm-linux-gnueabihf-raspbian arm-bcm2708-linux-gnueabi gcc-linaro-arm-linux-gnueabihf-raspbian-x64 【3】加入环境环境变量 在/.bashrc文件中加入gcc交叉工具链目录。 sudo gedit ~/.bashrc 在该文件最后加入交叉工具链所在目录。请注意~符号表示ROOT路径,.bashrc为隐藏文件。gedit为类似记事本的编辑器。 【32位系统】 export PATH=home/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH 【64位系统】 export PATH=home/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATH 请注意PATH代表环境变量,:冒号代表追加,注意$PATH是放在语句的后面。 保存并退出文件,接着执行以下指令以便立即更新当前控制台所包含的环境变量。 source ~/.bashrc 【4】简单测试 为了测试交叉工具链是否安装成功,可在控制台中输入 arm-linux-gnueabihf-gcc -v 控制台中输出内容如下,次步骤可证明交叉工具链安装完成且环境变量设置无误。 图1 arm-linux-gnueabihf-gcc版本信息 2.简单的例子 编写一个测试文件,在PC机上完成编译然后通过FTP上传到树莓派中并执行。 【测试代码】 文件名为hello-world.c,该例子仅测试交叉编译是否成功并简单测试了浮点数功能。 [cpp] view plaincopy[/url][url=https://code.csdn.net/snippets/324923/fork]
【交叉编译——简单指令】 cd进入hello-world.c所在目录,输入以下指令以生成可执行文件。请注意该可执行文件不能在PC机上运行。 arm-linux-gnueabihf-gcc hello-world.c -o hello-world 最终可在hello-world.c的同目录中生成hello-world可执行文件。 【交叉编译——makefile】 当然也可在该目录下建立makefile文件,简单的makefile文件如下 [plain] view plaincopy[/url][url=https://code.csdn.net/snippets/324923/fork]
在makefile文件中使用了至少两条隐含规则,CC为默认工具链;*.o文件由同名的*.c文件生成。 那么在控制台中输入make即可生成可执行文件。 【FTP上传】 可在ubuntu中安装filezilla软件,该软件具有ubuntu版本可通过ubuntu软件中心直接安装。ubuntu版本和windows使用方法相同。 图2 使用FileZilla上传文件 【SSH登陆执行】 假设raspberry的IP地址为192.168.1.107,可使用以下指令登陆raspberry ssh pi@192.168.1.107 登陆之后进入可执行文件所在目录,修改该文件的执行权限。 sudo chmod 755 hello-world 该文件的所有者为pi,所有者pi对于该可执行文件具有可写可读可执行权限(7),755中的后两个55为可读与可执行,本例中对于hello-world用处不大。 输入以下指令便可运行该文件 ./hello-world 控制台输出结果,至此可完全证明交叉工具链工作正常。 图3 树莓派中执行结果 3.总结 最近也时工作需要重新学习了交叉工具链的安装和使用。网上阅读了很多关于树莓派交叉工具链的资料,反复尝试总是出现问题,可能为树莓派版本和交叉工具链版本差异产生的问题。希望这篇博文可以帮助各位,如果存在问题请留言。 |
|
相关推荐
|
|
注意指定环境变量时,home前面要加“/”,否则编译命令就只能在根目录下使用了,换到别的目录就会找不到编译程序了。
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4892 浏览 0 评论
87409 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4723 浏览 2 评论
3617 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2481 浏览 0 评论
1997浏览 3评论
1283浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1341浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1233浏览 0评论
1173浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:28 , Processed in 1.521260 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号