美文网首页
JETSON交叉编译

JETSON交叉编译

作者: 赵小闹闹 | 来源:发表于2020-09-12 10:20 被阅读0次

    1.交叉编译简要流程及必要性


    image.png

    程序在X85和ARM机器指令集不同,需要交叉编译才能在不同机器上运行。
    交叉编译优点

    2.交叉编译前通信工具链设置
    内核交叉编译需要通信,jetson提供了通信工具链


    image.png

    通过链接下载对应版本工具链:
    http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05x86_64_aarch64-linux-gnu.tar.xz
    解压工具链:

    $ mkdir $HOME/l4t-gcc 
    $ cd $HOME/l4t-gcc
    $ tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
    

    3.交叉编译环境设置方法


    image.png

    交叉编译环境设置方法包括三种,1.直接配置环境变量2.配置Makefile文件3.建立仿真环境.其中1与2方法类似。
    3.1直接配置环境变量


    image.png
    首先指定交叉编译路径,然后指定gcc,g++等二进制文件对应在交叉编译的路径。
    遇到一些奇怪问题,通过export LC_ALL=C命令尝试解决。

    该方法优点:编译中所有需要的环境变量可以直观的进行手动指定。指定后交叉编译所有需要的环境变量和库等可满足要求。
    该方法缺点:所有库环境变量手动指定,其他项目的环境变量需要二次配置。适用于简单项目,较为复杂的项目不适合使用此方法配置环境。
    3.2 在makefile中进行编译
    3.2.1 makefile文件修改
    参考此模板生成新的makefile文件。


    image.png
    3.2.2 NFS挂载jetson与X86机器
    首先在jetson上设置。
    image.png
    在jetson机器上先安装nfs-kernel-server,使用vim进行信息配置,
    查看信息是否满足。这样可以实现通过NFS将jetson暴露给host.
    image.png
    之后分别执行
    $ sudo exportfs –a
    $ sudo systemctl restart nfs-kernel-server.service
    $ sudo exportfs
    

    检查状态是否满足。


    image.png

    然后在host设置NFS。


    image.png
    sudo /etc/fstab
    192.168.55.1:/ /mnt/rootfs nfs defaults 0 0
    

    的作用为设置开机自动挂载,如不需要,使用手动挂载即可。

    $ sudo mount –t nfs 192.168.55.1:/ /mnt/rootfs
    

    3.3 建立仿真环境

    使用Chroot&Qeum配置一个仿真环境,设置交叉编译环境

    该方法适用于解决复杂问题。

    首先安装chroot

    
    sudo apt install chroot
    

    接下来安装qemu

    直接使用apt install qemu 会有问题,需要使用github提供的编译版本qemu-aarch64-static.

    https://github.com/zhj-buffer/Cross-Compile-Jetson

    将jetson 的rootfs拷贝出来

    image.png
    例如此路径下。
    将qemu-aarch64文件拷到当前文件下。
    image.png
    在模拟环境启动前,先进性mount
    image.png
    详细参考示例见https://github.com/zhj-buffer/Cross-Compile-Jetson
    4、交叉编译案例
    image.png
    2.1内核(kernel)交叉编译
    cd /nvidia/nvidia_sdk/sources/kernel/kernel-4.9
    路径下 image.png
    vim Makefile可查看相关信息,交叉编译需要指定在Makefile指定CROSS_COMPILE
    image.png
    前文toolchain默认下载后解压路径为
    image.png
    在bashrc中设置CROSS_COMPILE环境路径路径,给定ARCH, CROSS_COMPILE,LOCALVERSION.
    设定后Makefile文件中的CROSS_COMPILE路径就与此定义路径相同,其他g++等路径可在此基础上自动找到。
    vim ~/.bashrc
    image.png
    编译内核config文件。直接从jetson 的proc路径下拷贝config.gz文件 image.png

    复制config文件后vim,效果为


    image.png

    执行make menuconfig


    image.png

    执行save操作后exit.
    交叉编译环境配置已经完成,开始编译即可。make Image


    image.png

    make –j16
    以上操作在主机上完成,将编译好的kernel拷贝到jetson上进行更新


    image.png

    4.2Multi Media api交叉编译流程
    cd进入tegra_multimedia_api/samples,相关文件均可通过交叉编译实现。


    image.png

    指定target_rootfs路径
    进入路径,vim Rules.mk


    image.png

    参考下图对相关项进行修改指定:

    image.png

    修改后,可进行交叉编译。
    进入路径后,执行make命令。


    image.png

    该路径下执行交叉编译命令:

    ./video_dec_trt2 ../../data/Video/sample_outdoor_car_1080p_10fps.h264  ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264    --trt-deployfile../../data/Model/resnet10/resnet10.prototxt      --trt-modelfile../../data/Model/resnet10/resnet10.caffemodel      --trt-mode 0
    
    image.png

    编译中如报错找不到路径的错误,需要指定其对应的路径,通过软连接方式进行指定。


    image.png

    同理backend的编译操作类似。
    进入路径:


    image.png

    执行:

    ./backend 1 ../../data/Video/sample_outdoor_car_1080p_10fps.h264 H264 --trt-deployfile
    ../../data/Model/GoogleNet_one_class/GoogleNet_modified_oneClass_halfHD.prototxt --trt-modelfile
    ../../data/Model/GoogleNet_one_class/GoogleNet_modified_oneClass_halfHD.caffemodel --trt-mode 0 --trt-procinterval
    1 -fps 10
    

    4.3 Deep stream交叉编译流程
    4.3.1编译ssd


    image.png

    4.3.2编译语义分割
    cd进路径


    image.png

    参考下图,
    修改Makefile (vim Makefile)


    image.png

    修改后,在主机进行编译


    image.png

    在jetson路径下


    image.png
    执行命令
    ./deepstream-segmentation-app
    dstest_segmentation_config_semantic.txt
    sample_720p.mjpeg sample_720p.mjpeg
    

    4.4交叉编译CUDA
    仿真环境搭建好以后,编译cuda sample
    主机进入目录 cd /usr/local/cuda/bin
    里面的cuda-install-samples-10.2.sh是想编译的sample
    将其拷贝到jetson 路径下

    image.png
    仿真环境是在主机上同时有主机和jetson的路径,在主机上即可完成对于jetson的交叉编译,与在jetson上编译效果相同。
    直接在主机路径上进行编译
    image.png
    编译完成后将其拷贝到jetson
    image.png
    用传统方法做也可以,这个例子需要设置环境变量较少。
    编译完成后在路径下运行编译好的sample,可查看效果
    image.png
    image.png
    4.5交叉编译Caffe
    在仿真环境编译caffe
    编译caffe之前,需要先安装cmake.由于ubuntu默认cmake版本比较旧,编译caffe,opencv会有问题。采用源码编译cmake。步骤如下图
    image.png
    接下来安装caffe需要的其他依赖
    image.png
    建立build文件夹
    image.png
    Cmake
    image.png
    编译
    image.png
    编译完成后,make all
    编译完成的路径在:
    cd /media/green/M0/rootfs-xavier/home/nvidia/caffe/build
    拷贝到jetson
    image.png
    在jetson上修改caffe环境变量
    image.png
    将~/.bashrc中的pythonpath进行修改
    image.png
    修改为
    image.png
    image.png

    执行


    image.png

    编译:
    Make –j16
    拷贝


    image.png

    修改环境变量


    image.png

    验证
    python import cv2
    即可验证open-cv编译

    相关文章

      网友评论

          本文标题:JETSON交叉编译

          本文链接:https://www.haomeiwen.com/subject/xatwektx.html