zoukankan      html  css  js  c++  java
  • 树莓派学习笔记——交叉编译工具链

    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
        git clone git://github.com/raspberrypi/tools.git

        请注意clone的时间较长请耐心等待。clone完毕之后可进入下面文件夹查看工具链的详细内容。
        cd ~/rpi/tools/arm-bcm2708/

        【特别提醒】
        克隆完毕之后能够通过pull更新tools
        cd ~/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
        在该文件最后增加交叉工具链所在文件夹。请注意~符号表示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
    ");
        printf("%.2f
    ",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 pi@192.168.1.107
        登陆之后进入可运行文件所在文件夹,改动该文件的运行权限。
        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


  • 相关阅读:
    angular-ui-bootstrap的弹出框定义成一个服务的实践(二)
    分享百度文件上传组件webUploader的使用demo
    display的flex属性使用详解
    数组去重(初识ES6)
    在ng中的select的使用方法的讲解
    安装xamp之后,appach、mysql等问题的总结
    python中string.casefold和string.lower区别
    python3数据类型
    MySQL bin-log 日志清理方式
    python终端颜色设置
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/3831769.html
Copyright © 2011-2022 走看看