NVIDIA Jetson AGX Xavier多种方式交叉编译

NVIDIA Jetson AGX Xavier多种方式编译

Jetson AGX Xavier 是率先推出的专为自主机器设计的计算机。该计算机具有六个计算机主板,用于处理传感器数据和运行自主机器软件,并且可以提供完全自主机器所需的性能和能效。

我们在进行xavier应用程序开发时少不了编译,下面介绍其多种应用程序编译方式,以适应不同的场景。

方式一:直接在xavier系统上进行编译

这种方式直接将源码拷贝到xavier的ubuntu系统上,利用cmake、make、gcc、g++等工具进行编译,编译环境与部署环境一致,省去很多麻烦,代码运行也更稳定。首选编译方式

方式二:利用交叉编译工具进行编译

利用交叉编译工具可以在x86平台上编译xavier上的应用程序。有利于我们开发管理代码。获取交叉编译工具有以下几种方式:

1、获取nvidia官网网站获取

Jetson Linux Archive 找到对应的版本,点进去后在TOOLS一栏里面就能找到交叉编译工具

2、获取交叉编译工具官网获取

直接从 linaro 的官网下载对应版本的 gcc-linaro 交叉编译工具,在官网入口处选择 binaries 路径,该文件夹下面包含各种版本的已经编译好的 aarch64-linux-gnu-gcc 二进制可执行程序。可以自行下载使用。

3、自己制作交叉编译工具

在实际使用的过程中,我们发现xavier官方或者 linaro官网提供的交叉编译工具所依赖的libc版本与xavier里面的ubuntu系统的自带的libc版本不一致,导致这边交叉编译的程序在xavier上运行时报错。当然我们也可以直接获取相应版本的libc源码进行编译。同时我们也可以自己制作一个交叉编译工具。

  1. 在x86端安装xavier同版本的ubuntu系统
  2. 在x86端已安装的ubuntu系统下安装交叉编译工具
#默认情况下使用apt install安装包时,会自动下载安装包及其依赖包到/var/cache/apt/archieves目录,可通过如下配置改变这一行为:
#允许保存
echo 'Binary::apt::APT::Keep-Downloaded-Packages "1";' | sudo tee /etc/apt/apt.conf.d/10apt-keep-downloads

#清空apt-get缓存
sudo apt-get clean 
#执行交叉编译工具安装
sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install g++-aarch64-linux-gnu
3. 打包合并制作交叉编译工具
#安装完成后,apt-get缓存包存放在/var/cache/apt/archives目录下,进入此目录下
执行下面命令,将所有包解压合并后将各个包里面的data压缩包解压后合并到一起,得到交叉编译工具链
cd /var/cache/apt/archives
deb_list=`ls *.deb`;for var in ${deb_list};do dpkg -x $var ./;done

交叉编译工具制作完毕后,就可以对应用程序进行交叉编译了。同时当我们的应用程序依赖第三方库时,可以直接从xavier的系统上拷贝下来使用(没有的话可以用apt安装)。无须用交叉编译工具进行源码编译。

方式三:利用chroot进行编译
  1. 下载xavier上的ubuntu版本对应的根文件系统,到ubuntu-base网站上去下载对应版本的根文件系统。这里我下载的是ubuntu-base-18.04.5-base-arm64.tar.gz

  2. 解压

    mkdir rootfs
    sudo tar -xpf ubuntu-base-16.04.1-base-arm64.tar.gz -C rootfs
    
  3. 修改根文件系统

    #拷贝host系统的文件到rootfs里面
    sudo cp -b /etc/resolv.conf rootfs/etc/resolv.conf
    sudo cp /usr/bin/qemu-aarch64-static rootfs/usr/bin/
    #如果没有qemu-aarch64-static 就执行命令安装 sudo apt install -y qemu-system-arm
    
    #拷贝xavier系统的文件到rootfs里面
    sudo scp xavier_user@xavier_ip_address:/etc/apt/sources.list rootfs/etc/apt/
    sudo scp xavier_user@xavier_ip_address:/etc/apt/sources.list.d/nvidia-l4t-apt-source.list  rootfs/etc/apt/sources.list.d/
    
  4. 利用chroot启动

    sudo chroot rootfs/
    mknod -m 644 /dev/random c 1 8
    mknod -m 644 /dev/urandom c 1 9
    chown root:root /dev/random /dev/urandom
    #启动后,就可以进行apt update 和apt upgrade了
    apt update
    apt upgrade
    apt install gcc g++ gdb cmake
    

执行完毕后就得到了一个文件系统,我们可以把我们的应用程序代码拷贝进去利用chroot进行编译,编译成功后将可执行文件拷贝到xavier上就可以运行。

当我们缺少相应的软件或者库时,可以在chroot启动后,利用apt进行相应的安装。

方式四:利用docker镜像进行编译

1、打包已经正常运行的xavier系统的根文件系统,制作docker镜像,可以免去一些软件的安装,直接就可以进行应用程序的编译。

  1. 进入已经正常运行的xavier系统上打包根文件系统

    sudo su
    cd /
    tar -cvpf /docker/system.tar / --exclude=docker --exclude=proc --exclude=tmp
    --exclude=sys --exclude=run 
    
  2. 将打包好的文件系统拷贝到host系统上

    sudo scp xavier_user@xavier_ip_address:/docker/system.tar .   
    
  3. 导入docker镜像

    sudo docker import system.tar nvidia/xavier:r32.7.1
    #查看已经导入的镜像
    sudo docker images
    
  4. 运行docker镜像

    sudo docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static nvidia/xavier:r32.7.1 /bin/bash   
    
  5. 按需修改后,导出docker镜像文件

    #查看所有容器
    sudo docker ps -a
    #导出docker镜像文件
    sudo docker export -o nvidia_xavier.tar 'CONTAINER ID'
    

2、也可以利用官方提供的Tegra_Linux_Sample-Root-Filesystem_R32.7.1_aarch64.tbz2根文件系统,制作docker镜像,制作的镜像文件比较小,需要什么软件,可以直接利用apt进行安装。

#导入docker镜像
sudo docker import Tegra_Linux_Sample-Root-Filesystem_R32.7.1_aarch64.tbz2 jetson/xavier:r32.7.1
#查看已经导入的镜像
sudo docker images
#运行docker镜像
sudo docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static jetson/xavier:r32.7.1 /bin/bash
#按需修改后,导出docker镜像文件
#查看所有容器
sudo docker ps -a
#导出docker镜像文件
sudo docker export -o nvidia_xavier.tar 'CONTAINER ID'

3、使用空镜像scratch,然后利用dockerfile构建一个符合我们实际业务需求的Docker镜像。

  1. 获取scratch基础镜像

    tar cv --files-from /dev/null | sudo docker import - scratch
    
  2. 新建文件夹,拷贝根文件系统到该文件夹里面,既可以是我们打包的,也可以是官方提供的根文件系统。

    mkdir docker_xavier
    touch dockerfile
    
  3. 编辑dockerfile文件,添加如下内容

    FROM scratch
    LABEL maintainer="nvidia_xavier"
    ADD Tegra_Linux_Sample-Root-Filesystem_R32.7.1_aarch64.tbz2 /
    RUN apt-get update
    WORKDIR /home/nvidia
    CMD /bin/bash
    
  4. 开始构建

    sudo docker build -t nvidia_xavier .
    
  5. 运行docker镜像

    sudo docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static nvidia_xavier /bin/bash
    
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值