ubuntu搭建aarch64 cuda交叉编译环境记录

背景介绍

在windows环境下安装的VM虚拟机中配置的ubuntu系统,需要编译用于jetson xavier nx平台下可执行的程序,ubuntu 20.04系统为amd64架构,而jetson为arm,或者也叫aarch64架构。嵌入式平台jetson安装到设备中后不具备开发条件,需要在ubuntu系统中构建并编译好在jetson上运行的程序,然后拷贝到jetson平台中执行。

交叉编译需要的环境

目的不同,交叉编译的环境可能不同。本次,我们主要是想在jetson上执行基于CUDA的结构光三维重建程序,尚不涉及deep learning等。因此,在ubuntu中我们需要两个东西:1) 用于开发c++和cuda的开发工具,类似microsoft visual studio, 在ubunu中我们选择eclipse作为IDE;2)用于aarch64架构的编译器

eclipse安装

起初我是想下载Nvidia提供的IDE:nsight eclipse edition. 现在进入官网后提示cuda11.0之后不再支持独立的nsight eclipse edition软件,而是提供一个nsight eclipse plugins插件,可以在安装eclipse后添加该插件
在这里插入图片描述
首先安装eclipse,由于这个软件是基于java的,因此,需要安装jdk

sudo apt update
sudo apt install default-jdk

安装完成后查看java是否成功

java -version

在这里插入图片描述
接下来下载eclipse,到官网https://www.eclipse.org/downloads/packages/找到eclipse for c/c++版本并下载eclipse-cpp-2023-09-R-linux-gtk-x86_64.tar.gz
在这里插入图片描述
下载完成后对其进行解压,

tar -zxvf eclipse-cpp-2023-09-R-linux-gtk-x86_64.tar.gz

解压完成后进入eclipse文件夹,运行eclipse可执行程序

cd eclipse
sudo ./eclipse 

为了使用方便最好创建一个程序的快捷方式

cd /usr/share/applications/
sudo nano eclipse.desktop

在弹出来的编辑窗中,修改eclipse执行文件的路径exec和图标路径icon, Ctrl+O 保存更改,然后按下 Ctrl+X 退出编辑器

[Desktop Entry]
Name=Eclipse
Type=Application
Exec=/home/Downloads/eclipse/eclipse
Terminal=false
Icon=/home/Downloads/eclipse/icon.xpm
Comment=Integrated Development Environment
NoDisplay=false
Categories=Development;IDE;
Name[en]=Eclipse

使用命令将新的桌面快捷方式添加到应用程序列表

sudo desktop-file-install eclipse.desktop

这样就能在ubuntu所有应用中找到eclipse的快捷图标

eclipse配置cuda环境

安装cudatoolkit-11.4

sudo apt-get update
sudo apt-get install cuda-toolkit-11-4

安装完成后,使用vim或者其他编辑器在.bashrc中配置cuda的系统环境变量

cd ~
vim .bashrc

在文档的开始添加如下信息,表示cuda的主路径,bin所在路径和lib所在路径,要注意的是,把最新安装的cuda路径放在$PATH之前,这样系统检测的版本才会是11.4

export CUDA_HOME=/usr/local/cuda-11.4/:$CUDA_HOME
export PATH=/usr/local/cuda-11.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH

在这里插入图片描述
退出编辑器,使用命令使其生效

source .bashrc

查看cuda版本是否正确

nvcc -V

在这里插入图片描述
官方提示cuda11之后是使用nsight eclipse的插件,为了在eclipse中安装这个插件,根据官网的操作指南:https://docs.nvidia.com/cuda/nsightee-plugins-install-guide/index.html
在这里插入图片描述
我们在/usr/local/cuda-11.4/bin中找到nsight_ee_plugins_manage.sh
在这里插入图片描述
进入该路径下,根据官网指示执行eclipse插件安装

cd /usr/local/cuda-11.4/bin
./nsight_ee_plugins_manage.sh  install  /home/Downloads/eclipse/

由此完成nsight eclipse plugins的安装

aarch64交叉编译器

使用命令安装aarch64下所需的gcc和g++

sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install g++-aarch64-linux-gnu

使用命令查看安装版本

aarch64-linux-gnu-gcc -v

在这里插入图片描述

aarch64-linux-gnu-g++ -v

在这里插入图片描述
使用aarch64的gcc和g++分别编译如下的hello world,然后将可执行文件放到Jetson板子上运行
ubuntu上新建hello.c文件,代码如下

#include <stdio.h>

int main(void)
{
	printf("Hello World!-c \n");
}

cd到hello.c所在路径,使用aarch64-linux-gnu-gcc编译器编译

aarch64-linux-gnu-gcc hello.c -o hello_c

将输出的文件hello_c放到嵌入式板子上运行

./hello_c

运行结果显示 Hello World!-c 即成功。同样的道理,.cpp文件的编译使用aarch64-linux-gnu-g++进行编译和验证

eclipse配置cuda交叉编译环境

新建一个cuda工程,如图所示,后续的选择默认
在这里插入图片描述
右键该工程,添加一个.cu文件,粘贴如下的测试代码。

#include <iostream>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>


__global__ void hello_from_gpu()
{
    printf("Hello World from the GPU!\n");
}

int main(void)
{
    hello_from_gpu<<<2, 4>>>();
    cudaDeviceSynchronize();
    return 0;
}

在这里插入图片描述

然后,进入属性中对其进行设置,主要是修改CUDA Toolkit中cuda工具的路径,交叉编译的目标物和架构,使用的编译器等如图
在这里插入图片描述
Build project,如图所示,文本划线报错不用管
在这里插入图片描述
最后,将生成的文件拷贝到嵌入式机器中,输入指令

cd <文件所在目录>
./ArmCrossTest

由此完成交叉编译环境的搭建和测试

### aarch64 架构上的 CUDA 安装指南 在 aarch64 架构上安装 NVIDIA CUDA 工具链涉及多个步骤,包括准备环境、下载合适的驱动和工具包以及配置开发环境。以下是详细的说明: #### 准备工作 确保目标设备已安装支持 CUDA 的 GPU 和相应的硬件驱动程序。对于 aarch64 平台,通常需要 ARMv8 或更高版本的处理器。 #### 下载 CUDA 工具包 访问 NVIDIA 官方网站并下载适用于 aarch64 架构的 CUDA 工具包。该工具包应包含必要的库文件、头文件和其他资源以支持 CUDA 编程[^1]。 #### 验证安装路径 默认情况下,CUDA 工具包会被解压到 `/usr/local/cuda-<version>` 路径下。如果需要自定义安装位置,则需手动设置 `PATH` 和 `LD_LIBRARY_PATH` 环境变量以便于后续操作。 ```bash export PATH=/custom/path/to/cuda/bin:$PATH export LD_LIBRARY_PATH=/custom/path/to/cuda/lib64:$LD_LIBRARY_PATH ``` #### 测试编译器功能 为了确认 GCC/G++ 是否正常运作,在完成 Eclipse C/C++ IDE 的基础搭建之后可以执行如下指令来查看其具体版本号信息[^2]: ```bash /usr/local/gcc-9.3.0/bin/gcc --version /usr/local/gcc-9.3.0/bin/g++ --version ``` #### 创建项目模板 利用上述提到过的文档资料作为参考依据之一创建一个新的工程实例;同时也可以尝试编写简单的测试代码片段用于初步检验整个流程是否通畅无阻塞现象发生: ```cpp // test_cuda.cpp #include <cuda_runtime.h> #include <iostream> int main() { int deviceCount; cudaGetDeviceCount(&deviceCount); std::cout << "Number of devices: " << deviceCount << std::endl; for (int i = 0; i < deviceCount; ++i) { cudaDeviceProp prop; cudaGetDeviceProperties(&prop, i); std::cout << "\nDevice Number: " << i << std::endl; std::cout << " Device name: " << prop.name << std::endl; std::cout << " Memory Clock Rate (KHz): " << prop.memoryClockRate << std::endl; std::cout << " Memory Bus Width (bits): " << prop.memoryBusWidth << std::endl; std::cout << " Peak Memory Bandwidth (GB/s): " << 2.0 * prop.memoryClockRate * (prop.memoryBusWidth / 8) / 1e6 << std::endl; } return 0; } ``` 编译此源码需要用到 nvcc 命令行工具,并指定正确的选项参数使其能够识别主机端与设备端各自的特性差异之处。 ```bash nvcc -o test_cuda test_cuda.cpp ./test_cuda ``` 通过以上过程即可实现基本的功能验证目的。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

leaf_csdn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值