树莓派学习笔记——交叉编译工具链

0.前言

【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

    sudo apt-get install build-essential
git

请注意clone的时间较长请耐心等待。clone完成之后可进入以下目录查看工具链的具体内容。

    cd ~/rpi/tools/arm-bcm2708/

该目录中存在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

在该文件最后加入交叉工具链所在目录。请注意~符号表示HOME路径,.bashrc为隐藏文件。

    【32位系统】

    export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

    【64位系统】

    export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

请注意PATH代表环境变量,:冒号代表追加。

保存并退出文件,接着执行以下指令以便立即更新当前控制台所包含的环境变量。

    source .bashrc

【4】简单测试

为了测试交叉工具链是否安装成功,可在控制台中输入

    arm-linux-gnueabihf-gcc -v

控制台中输出内容如下,次步骤可证明交叉工具链安装完成且环境变量设置无误。

图1 arm-linux-gnueabihf-gcc版本信息

2.简单的例子

编写一个测试文件,在PC机上完成编译然后通过FTP上传到树莓派中并执行。

    【测试代码】

文件名为hello-world.c,该例子仅测试交叉编译是否成功并简单测试了浮点数功能。

#include <stdio.h>
int main(void)
{
    float pi = 3.14;
    printf("Hello World\n");
    printf("%.2f\n",2*pi);
}

    【交叉编译——简单指令】

cd进入hello-world.c所在目录,输入以下指令以生成可执行文件。请注意该可执行文件不能在PC机上运行。

    arm-linux-gnueabihf-gcc hello-world.c -o hello-world

最终可在hello-world.c的同目录中生成hello-world可执行文件。

    【交叉编译——makefile】

当然也可在该目录下建立makefile文件,简单的makefile文件如下

CC=arm-linux-gnueabihf-gcc
hello-world:hello-world.o
clean:
    rm -rf hello-world.o hello-world

在makefile文件中使用了至少两条隐含规则,CC为默认工具链;*.o文件由同名的*.c文件生成。

那么在控制台中输入make即可生成可执行文件。

    【FTP上传】

可在ubuntu中安装filezilla软件,该软件具有ubuntu版本可通过ubuntu软件中心直接安装。ubuntu版本和windows使用方法相同。

图2 使用FileZilla上传文件

    【SSH登陆执行】

假设raspberry的IP地址为192.168.1.107,可使用以下指令登陆raspberry

    ssh [email protected]

登陆之后进入可执行文件所在目录,修改该文件的执行权限。

    sudo chmod 755 hello-world

文件的所有者为pi,所有者pi对于该可执行文件具有可写可读可执行权限(7),755中的后两个55为可读与可执行,本例中对于hello-world用处不大。

输入以下指令便可运行该文件

./hello-world

控制台输出结果,至此可完全证明交叉工具链工作正常。

图3 树莓派中执行结果

3.总结

最近也时工作需要重新学习了交叉工具链的安装和使用。网上阅读了很多关于树莓派交叉工具链的资料,反复尝试总是出现问题,可能为树莓派版本和交叉工具链版本差异产生的问题。希望这篇博文可以帮助各位,如果存在问题请留言。

4.参考资料

【1】Development Environment for the Raspberry Pi using a Cross Compiling Toolchain and Eclipse

树莓派学习笔记——交叉编译工具链

时间: 2024-08-05 14:49:44

树莓派学习笔记——交叉编译工具链的相关文章

树莓派学习笔记——交叉编译练习之SQLite3安装

0.前言 本博文可能并没有太多使用价值.不过为了练习而练习.在树莓派上使用SQLite有非常多的方法,安装的方法也有非常多. [1]假设使用Python,那么不必安装SQLite由于Python已经自带SQLite. [2]能够使用apt-get安装.仅仅是SQLite的版本稍低些. [3]能够使用源码安装,在树莓派上直接编译,尽管树莓派的运算速度不如PC机.可是稍等几分钟也能编译安装完毕. [4]假设你想练习一下交叉编译,请阅读下面内容吧. [本文目的] [1]怎样交叉编译源码包 [2]交叉编

树莓派学习笔记——交叉编译

PC机环境 ubuntu 14.04 64位 设置交叉工具链 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 cd ~/rpi/tools/arm-bcm2708/ 克隆完成之后可以通过pull更新tools cd ~/rpi

linux 学习笔记 GNU工具链简介

我们通常无法直接通过Linux内核,而需要借助Linux内核之上的GUN工具链来进行 文件处理 文本操作 进程管理 等操作. GNU/Linux shell为用户提供了 启动程序 管理文件系统上的文件 管理运行在Linux系统上的进程 的途径 shell允许你输入文本命令,之后将解释命令并在内核中执行 内置命令 输入程序的名称,shell将程序名称传递给内核以启动它 将shell命令放入文件中作为程序执行 有好几种Linux shell可用,通常为bash shell

树莓派学习笔记——使用文件IO操作GPIO SysFs方式

0 前言 本文描述如果通过文件IO sysfs方式控制树莓派 GPIO端口.通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入. Linux学习可从应用出发,先不纠结Linux驱动编写,先把Linux给玩起来. [相同与不同] 本文和[EasyARM

ARM交叉编译工具链分类说明

转载整理自:http://www.veryarm.com/cross-tools 从授权上,ARM交叉编译工具链分为免费授权版和付费授权版. 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora. 收费版有ARM原厂提供的armcc.IAR提供的编译器等等,因为这些价格都比较昂贵,不适合学习用户使用,所以不做讲述. ·        arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目

树莓派学习笔记—— 源代码方式安装opencv

0.前言 本文介绍如何在树莓派中通过编译源代码的方式安装opencv,并通过一个简单的例子说明如何使用opencv. 更多内容请参考--[树莓派学习笔记--索引博文] 1.下载若干依赖项     在开始安装之前,最好更新树莓派软件源.如果更新时间太长,请参考博文修改软件源网络地址--[树莓派学习笔记--修改树莓派软件源] sudo apt-get update 请依次安装以下依赖项,这些必须安装的依赖项来自于opencv官网的说明,在多数debian系统中都可以采用这种方式进行安装.其实在树莓派

树莓派学习笔记——USB wifi配置指南

0 前言 树莓派既可以使用有线网络又可以无线网络,如果使用有线网络不方便的话可以借助USB wifi无线网卡让树莓派也插上无线"翅膀".但是和使用有线网络即插即用的方式不同,USB wifi网卡需要进行一些配置.通过一天的配置实验,本文总结了树莓派wifi配置的两种方法--[1]使用wpa_gui工具方法和[2]修改配置文件方法. [1]使用wpa_gui工具方法 wpa_gui是一种linux平台常用的wifi配置工具,wpa_gui具有图形界面操作简单.由于,树莓派B板只有两个US

树莓派学习笔记——Wifi AP热点模式 使用RT5370

0.前言 本文详细说明为树莓派增加Wifi AP热点功能的具体步骤.配置完成之后,树莓派将增加一个Wifi热点功能,使用笔记本或手机便可连接树莓派,树莓派具有了AP热点功能,可更一步扩展树莓派相关的WEB功能,通过连接树莓派提供的热点,登录树莓派提供的WEB服务,便可获得树莓派所监控的相关信息. 配置的步骤较多,请保持耐心. [配置说明] 1.树莓派热点名称(SSID)为Raspberry_AP,热点密码为12345678,加密方式为WPA2. 2.树莓派无线网口的IP地址为192.168.0.

树莓派学习笔记 1 -- 硬件的需求以及raspbian系统的安装

树莓派(Raspberry Pi) --  基于Linux系统的大小只有信用卡大小的卡片式机器.  按照发明者的想法,他是想降低学习程序开发的成本而设计制作的这款产品.你可以理解为一个简陋版的电脑.树莓派这是一个卡片,你需要买各种外设,然后自己DIY任何你想的,你可以的作品. Note:我使用的是最新的B+板. 一:硬件需求 话不多说,我们先来看看最基本的硬件需求. 这需要上面这几个才能使用一个完整的树莓派.树莓派对外设的要求是比较严的,很多外设不一定能支持,这个可以在买的时候询问商家. 1,无