搭建树莓派交叉编译环境

author author     2022-08-30     701

关键词:

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

1.搭建虚拟机Linux环境
2.烧录树莓派系统
3.在虚拟机linux环境中搭建本地开发与编译环境
4.在虚拟机linux上搭建交叉编译环境
5.开发一段简单的程序,通过本地编译后,再进行交叉编译。之后将编译好的程序放到树莓派上执行进行测试

具体步骤:

1.搭建虚拟机linux
理论上说,在windows环境下如果也能找到满足要求的交叉编译工具链,那么也可以不装linux。但是考虑到windows环境下的工具比较难找,而且嵌入式系统本身也是基于linux的特定版本,进行交叉编译时在兼容性上更不容易出现问题,所以还是需要先安装一个linux环境。我采用的是virtualbox虚拟机软件。virtualbox是一个轻量级的虚拟机软件,安装起来比较方便,使用中也还算稳定。安装过程很简单,此处略过。在virtualbox中加载ubuntu安装镜像文件*.iso,启动后安装,过程略。

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++项目,如下图

技术分享

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代码

技术分享

本地执行成功,之后进行交叉编译:
arm-linux-gnueabihf-gcc tst.c –o tst 生成tst执行文件,传输到目标平台:
sftp [email protected] 连接后,用put /home/xx/workspace/rr/tst /home/pi/tst

技术分享


执行成功

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中就不用这么麻烦了。

技术分享

之后,Project-Build All,成功。

技术分享

本文出自 “空空如也” 博客,转载请与作者联系!

一.树莓派a20基本环境搭建1

参考技术A我的实验环境:1.交叉编译工具链:gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux(4.8.2).tar.xz2.SDK文件:MarsBoard-A20-Linux-SDK-V1.1.tar.bz2在安装gcc-arm-linux-gnueabi的时候,会自动安装上gcc-4.6-arm-linux-gnueabi,如下图所示:第二个文件的安... 查看详情

交叉编译和交叉调试环境搭建及使用

交叉编译和交叉调试环境搭建及使用1. 交叉编译器1.1 交叉编译器介绍在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单... 查看详情

hi3516开发笔记:hi3516虚拟机基础环境搭建之交叉编译环境境搭建以及开机启动脚本分析(代码片段)

...《Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输》下一篇:《Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表》敬请期待…前言 ... 查看详情

rust交叉编译树莓派程序(代码片段)

rust交叉编译树莓派程序使用rust写树莓派程序时,如果直接在树莓派上进行编译,速度非常慢,如果是zero那更加是慢到受不了。因此最好是能通过开发机编译完后,直接放到树莓派上运行。由于开发机上的cpu架构、操作系统和目... 查看详情

hi3516开发笔记:hi3516虚拟机交叉开发环境搭建之配置qtcreator开发交叉编译环境

...516开发笔记(七):Hi3516虚拟机交叉开发环境搭建之交叉编译Qt》下一篇:《Hi3516开发笔记(九):在QtCreator开发环境中引入海思sdk的bsp包,运行显示Qt界面》敬请期待…前言  前面交叉编译好了q... 查看详情

交叉编译到树莓派时 JPEG 图像质量下降

】交叉编译到树莓派时JPEG图像质量下降【英文标题】:JPEGimagequalitydecreasesoncrosscompiletoraspberrypi【发布时间】:2019-12-0909:06:02【问题描述】:我正在尝试在我的树莓派上使用qtquick项目。我的项目中有一个jpeg图像。问题是当我将... 查看详情

交叉编译C++树莓派标准错误

】交叉编译C++树莓派标准错误【英文标题】:Crosscompilec++forraspberrypistderror【发布时间】:2014-07-0708:05:04【问题描述】:我需要为RaspberryPi(armV6)交叉编译C/C++代码。我按照http://hertaville.com/2012/09/28/development-environment-raspberry-pi-cross-co... 查看详情

hi3516开发笔记:hi3516虚拟机交叉开发环境搭建之配置qtcreator开发交叉编译环境

...516开发笔记(七):Hi3516虚拟机交叉开发环境搭建之交叉编译Qt》下一篇:《Hi3516开发笔记(九):在QtCreator开发环境中引入海思sdk的bsp包,运行显示Qt界面》前言  前面交叉编译好了qt,安装... 查看详情

为树莓派 3 交叉编译 QtModules

】为树莓派3交叉编译QtModules【英文标题】:CrosscompileQtModulesforraspberrypi3【发布时间】:2017-10-1814:17:42【问题描述】:在按照https://wiki.qt.io/RaspberryPi2EGLFS#Step_by_step指南成功编译qtbase之后,我需要在Ubuntux64上为picm3交叉编译QSerialPort... 查看详情

rust交叉编译树莓派程序(代码片段)

rust交叉编译树莓派程序使用rust写树莓派程序时,如果直接在树莓派上进行编译,速度非常慢,如果是zero那更加是慢到受不了。因此最好是能通过开发机编译完后,直接放到树莓派上运行。由于开发机上的cpu架构、操作系统和目... 查看详情

为树莓派交叉编译 bcm2835-1.42 库。

】为树莓派交叉编译bcm2835-1.42库。【英文标题】:CrossCompilebcm2835-1.42libraryforraspberrypi.【发布时间】:2015-04-0810:11:26【问题描述】:我正在尝试在Ubuntu中为我的树莓派板交叉编译库bcm2835-1.42。下载库并使用以下命令进行交叉编译... 查看详情

hi3516开发笔记:hi3516虚拟机交叉开发环境搭建之交叉编译qt(代码片段)

...516开发笔记(八):Hi3516虚拟机交叉开发环境搭建之配置QtCreator开发交叉编译环境》敬请期待…前言  前面搭建好了基础的交叉编译环境,但是我们使用到的主要是qt,所以要交叉编译qt,本篇交叉编译qt... 查看详情

hi3516开发笔记:hi3516虚拟机交叉开发环境搭建之交叉编译qt(代码片段)

...516开发笔记(八):Hi3516虚拟机交叉开发环境搭建之配置QtCreator开发交叉编译环境》前言  前面搭建好了基础的交叉编译环境,但是我们使用到的主要是qt,所以要交叉编译qt,本篇交叉编译qt并安装ubuntu... 查看详情

exynos4412交叉编译环境搭建(代码片段)

Exynos4412交叉编译环境搭建交叉编译:在PC机(x86平台)上开发程序,在ARM板上运行,提高开发、编译速度。环境:Tiny4412SDK1506开发板需要软件:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz检测系统是否已经安装有交叉编译环境:#arm-linux-gcc-vba... 查看详情

为树莓派 pi3 交叉编译 Qt 时出错

】为树莓派pi3交叉编译Qt时出错【英文标题】:ErrorwhilecrosscompilingQtforaraspberrypi3【发布时间】:2017-10-0920:52:12【问题描述】:我想交叉编译Qt为树莓派开发一个gui。我一直在关注这个教程:https://wiki.qt.io/RaspberryPi2EGLFS我正在使用... 查看详情

ubuntuqt交叉编译(树莓派2b)

    在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有... 查看详情

hi3516开发笔记:hi3516虚拟机基础环境搭建之交叉编译环境境搭建以及开机启动脚本分析(代码片段)

...《Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输》下一篇:《Hi3516开发笔记(四):Hi3516虚拟机编译uboot、kernel、roofts和userdata以及分区表》前言  前面进行... 查看详情

树莓派学习笔记交叉编译概念及安装使用(代码片段)

一、交叉编译概念1、什么是交叉编译交叉编译:是在一个平台上生成另一个平台上的可执行代码。              我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,                       ... 查看详情