Linux下搭建树莓派交叉编译环境

本学期选了嵌入式开发课程,所以第一步就是要准备环境。硬件环境自不必说,购买了树莓派二代、sd卡,读卡器、路由器、网线这些都是以前就有的。软件环境的搭建包括如下几步:

1.搭建虚拟机Linux环境

2.烧录树莓派系统

3.在虚拟机Linux环境中搭建本地开发与编译环境

4.在虚拟机Linux上搭建交叉编译环境

5.开发一段简单的程序,通过本地编译后,再进行交叉编译。之后将编译好的程序放到树莓派上执行进行测试。

具体步骤:

1.搭建虚拟机Linux

2.烧录树莓派的映像文件,使之可以正常启动。

根据手册的说明,需要将从树莓派官网下载的系统映像文件raspbian-jessie.img 烧录到sd卡上,以使树莓派可以正常使用。在这里我开始犯了一个错误。想到烧录文件,习惯性的采用了windows下的常用软件ultraiso,烧录完成后插到树莓派上加电。没有任何输出,让我一度不知道哪里出错。后来严格按照手册里说的Linux命令:sudo dd if=raspbian-jessie.img of=/dev/sdb bs=2M 进行烧录,系统可以正常启动了。

分析:ultraiso属于文件刻录的性质,但其并不改变卡/磁盘的分区结构。所以刻录完的sd卡分区格式不符合要求。而dd命令属于块数据输出,在烧录数据的同时也变更了sd卡的分区格式。

此外,此步骤还发生了一点意外。开始我烧录了一个不带桌面的精简版系统。当使用sudo apt-get install lxde命令添加桌面时,报空间不足,无法安装。于是重新烧录标准版,但启动到一半时系统中断死机。在想不出理由的情况下,使用sudo fdisk删除sd卡上所有分区,重新烧录,终于成功了。

系统启动后,需要考虑的是主机与目标机的连接问题。树莓派系统默认是开着ssh服务的。所以当用网线连接到路由器,并获得ip后,用命令ssh [email protected]是可以连接目标机的。但考虑到有图形界面还是要更方便一些。于是安装vnc服务,方法是命令:sudo apt-get install tightvncserver ,之后执行tightvncserver即开启了vnc远程桌面服务。此时用vnc客户端工具即可进行可视化操作。

3.在Linux下搭建本地开发环境

通常Linux的大多数发行版默认包含gcc等工具,但为了方便,我们也可以安装eclipse的Linux版本。使用此类IDE工具可以提高开发效率。

方法是,在Linux下执行 sudo apt-get install eclipse

安装完成后可以看到eclipse的启动图标。正常情况下可以顺利启动eclipse。此时的eclipse默认是java开发环境,为了开发c程序,我们还需要增加一些插件。方法是:在eclipse的help-install new software菜单中指定网址:http://download.eclipse.org/releases/indigo ,选择collaboration-Mylyn Context Connector: c/c++ Development,这样就把开发c/c++项目的插件安装上了。之后还需要执行一下sudo apt-get install build-essential,把编译环境需要用到的文件装上。就完成了本地开发环境的搭建。

正常启动eclipse后,可以在new 菜单中看到c/c++项目,如下图

Linux下搭建树莓派交叉编译环境

4.搭建交叉编译环境

通常网上已有经过验证的交叉编译工具链,需要下载下来即可。首先安装git工具:sudo apt-get install git,之后下载:git clone git://github.com/raspberrypi/tools.git

等待下载完成,即可看到包含了若干种类的编译工具。我的Linux是64位版本,所以使用gcc-linaro-arm-Linux-gnueabihf-raspbian-x64/bin/arm-Linux-gnueabihf-gcc即可。

加入环境变量,编辑.bashrc文件,在末尾加入export PATH=$PATH:$HOME/rpi/tools/arm-bcm2708/gcc-linaro-arm-Linux-gnueabihf-raspbian-x64/bin

实验例子,写一段c代码

Linux下搭建树莓派交叉编译环境

本地执行成功,之后进行交叉编译:

arm-Linux-gnueabihf-gcc tst.c –o tst 生成tst执行文件,传输到目标平台:

sftp [email protected] 连接后,用put /home/xx/workspace/rr/tst /home/pi/tst

Linux下搭建树莓派交叉编译环境

执行成功

5.直接使用eclipse进行目标平台编译

使用手工方式(写c代码、写makefile文件、手工编译等)还是比较繁琐的,另外也容易出错。既然集成开发环境可以编译本地代码,自然也可以进行交叉编译。于是经过一番探索,完成了这个步骤。

首先在项目属性的c/c++ Build的Settings菜单中,点Manage Configurations,增加一项新配置(我这里起名ARM)并激活,修改GCC C Compiler和GCC C Linker中的命令,采用前面提到过的arm-Linux-gnueabihf-gcc。注意此处用了绝对路径,因为之前加环境变量PATH是加到了bash.rc中,如果加到.profile中就不用这么麻烦了。

Linux下搭建树莓派交叉编译环境

之后,Project-Build All,成功。

Linux下搭建树莓派交叉编译环境

猜你喜欢

转载自www.linuxidc.com/Linux/2016-09/135062.htm