Linux配置树莓派交叉编译环境

Linux配置树莓派交叉编译环境

前期准备

文件下载

本文以树莓派4B为例,CPU架构为ARMv8,系统架构为aarch64,安装官方镜像。官方镜像下载地址。尝试搭建在x86架构的64位Linux主机为arm架构的树莓派交叉编译环境。
image.png
实验在Docker容器下进行,Linux镜像为eosx/ubuntu22.04-gcc11:261-244
image.png
交叉编译链选择ARM Developer官方提供的AArch64 GNU/Linux target (aarch64-linux-gnu)
image.png

Linux容器配置

  1. Dockerfile文件配置如下:

其中包含OpenCV环境需要用到的依赖包
在mac m1芯片上使用arm架构的ubuntu效率更高

FROM arm64v8/ubuntu:latest
LABEL Name=raspberrycrosscompile4opencv Version=4.6
LABEL author="Asimok"
LABEL email="maqi_neu@163.com"
LABEL version="1"

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

RUN mkdir /usr/src/workspace -p
COPY . /usr/src/workspace
WORKDIR /usr/src/workspace

# 设置交叉编译链环境变量
ENV PATH="$PATH:/usr/src/workspace/toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/"
ENV ARMPREFIX=/usr/src/workspace/toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu 
ENV PKG_CONFIG_PATH=$ARMPREFIX/lib/pkgconfig:$PKG_CONFIG_PATH
ENV PKG_CONFIG_LIBDIR=$ARMPREFIX/lib:$PKG_CONFIG_LIBDIR

# 使用清华大学的apt源
RUN sed -i 's/http:\/\/archive.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn\/ubuntu/g' /etc/apt/sources.list
RUN sed -i 's/http:\/\/security.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn\/ubuntu/g' /etc/apt/sources.list
RUN sed -i 's/http:\/\/ports.ubuntu.com/http:\/\/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# Install dependencies needed for building and running OpenCV
# 更新软件包列表并安装基本的开发工具

RUN apt-get update && apt-get install -y build-essential cmake unzip pkg-config
RUN apt-get install -y libjpeg-dev libpng-dev
RUN apt-get install -y libavcodec-dev libavformat-dev libswscale-dev
RUN apt-get install -y libgtk2.0-dev libcanberra-gtk* libgtk-3-dev
RUN apt-get install -y libgstreamer1.0-dev gstreamer1.0-gtk3
RUN apt-get install -y libgstreamer-plugins-base1.0-dev gstreamer1.0-gl
RUN apt-get install -y libxvidcore-dev libx264-dev
RUN apt-get install -y python3-dev python3-numpy python3-pip
RUN apt-get install -y libtbbmalloc2 libtbb-dev libdc1394-dev
RUN apt-get install -y libv4l-dev v4l-utils
RUN apt-get install -y libopenblas-dev libatlas-base-dev libblas-dev
RUN apt-get install -y liblapack-dev gfortran libhdf5-dev
RUN apt-get install -y libprotobuf-dev libgoogle-glog-dev libgflags-dev
RUN apt-get install -y protobuf-compiler 
RUN apt-get install -y qtbase5-dev

RUN cd /usr/src/workspace/toolchains/ 
RUN tar -xJf toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
RUN cd /usr/src/workspace/opencv/
RUN unzip opencv/opencv-4.6.0.zip
RUN unzip opencv/opencv_contrib-4.6.0.zip
RUN ls
WORKDIR /usr/src/workspace
  1. 创建容器
docker build --pull --rm -f "Dockerfile" -t raspberrycrosscompile:latest "."
  1. 运行容器

挂载本地磁盘比较方便

docker run -v /Users/maqi/RaspberryCrossCompile:/usr/src/workspace -it --name pi-container --cpus="4" -m 4000m raspberrycrosscompile:latest

交叉编译工具链安装

  1. 将下载的工具链解压至工作目录:
tar -xJf archive.tar.xz -C /path/to/directory
# 这里的`-x`选项表示解压缩,`-J`选项表示使用`xz`格式,`-f`选项后面跟上文件名。
  1. 为了使用方便将工具链bin目录添加至系统环境变量
export PATH="$PATH:/usr/src/workspace/toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin"

aarch64-linux-gnu-g++aarch64-linux-gnu-gcc则分别对应C++和C的解释器。

当然也可以使用绝对路径编译cpp

  1. 测试
    写一段简单的c++代码测试能否实现交叉编译。
#include <iostream>
int main()
{
	std::cout << "Hello World" << std::endl;
	return 0;
}

编译

/usr/src/workspace/toolchains/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ test.cpp -o test5
# 如果设置了环境变量
aarch64-linux-gnu-g++ test.cpp -o test5

编译成功后得到可执行文件test5。在宿主机运行显然会由于架构不同,无法执行。
拷贝至arm架构的树莓派执行,若正确打印则编译成功。
image.png|400

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
搭建 Linux树莓派交叉编译环境,需要完成以下几个步骤: 1. 安装交叉编译工具链 在 Linux 上使用交叉编译工具链来编译适用于树莓派的程序。可以在 Raspberry Pi 官网上下载适用于 Linux交叉编译工具链。 2. 配置环境变量 将交叉编译工具链的路径添加到系统的环境变量中,以便在命令行中使用。 例如,在 Ubuntu 系统中,可以编辑 /etc/environment 文件,添加以下代码: ``` export PATH=$PATH:/path/to/cross-compile-toolchain/bin ``` 将 /path/to/cross-compile-toolchain 替换为实际的交叉编译工具链路径。 3. 编写交叉编译脚本 编写一个简单的交叉编译脚本,以便能够快速编译适用于树莓派的程序。 例如,在使用 CMake 构建程序时,可以编写一个名为 raspberrypi.cmake 的脚本文件,将以下代码添加到 CMakeLists.txt 文件中: ``` set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER /path/to/cross-compile-toolchain/bin/arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER /path/to/cross-compile-toolchain/bin/arm-linux-gnueabihf-g++) set(CMAKE_FIND_ROOT_PATH /path/to/cross-compile-toolchain/arm-linux-gnueabihf/sysroot) ``` 将 /path/to/cross-compile-toolchain 替换为实际的交叉编译工具链路径。 4. 编译程序 使用交叉编译工具链编译程序。 例如,在使用 CMake 构建程序时,可以在命令行中运行以下命令: ``` mkdir build cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=raspberrypi.cmake make ``` 这将使用 raspberrypi.cmake 脚本文件来构建程序,并使用交叉编译工具链来编译程序。 完成上述步骤后,就可以在 Linux 上搭建树莓派交叉编译环境

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有胡子的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值