美文网首页Jetson Xavier NX 开发使用
Jetson Xavier NX 内核编译移植

Jetson Xavier NX 内核编译移植

作者: 望江樵夫 | 来源:发表于2021-07-21 19:24 被阅读0次

    移植过程参考:JetsonNX快速入门指南

    刷新 Jetson Developer Kit 操作软件

    1.从以下位置为您的 Jetson 开发人员套件下载最新的 L4T 发行包和示例文件系统:

    https://developer.nvidia.com/linux-tegra
    本文以当前(2021.07)最新版本(L4T R32.5.2)为例

    image.png
    这里主要用到以下三个文件
    ① L4T Driver Package [BSP]:jetson_linux_r32.5.2_aarch64.tbz2
    ② Sample Root Filesystem: tegra_linux_sample-root-filesystem_r32.5.2_aarch64.tbz2
    ③ L4T Driver Package [BSP] Sources: public_sources.tbz2
    默认将这三个文件下载保存到JetsonNX目录下

    2.输入这些命令来解压文件并组装 rootfs:

    tar xf Jetson_Linux_R32.5.2_aarch64.tbz2
    cd Linux_for_Tegra/rootfs/
    sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R32.5.2_aarch64.tbz2
    cd ..
    

    执行结果如下:

    image.png
    \color{red}{我们约定当前目录为执行根目录:}
    mhming@xz:~/software/JetsonNX/Linux_for_Tegra$
    

    3.获取内核源码

    以下内容参考:JetsonNX内核自定义
    \color{red}{1、本节所有命令均在第2节所述根目录下执行; 2、第1节所述文件③已下载可跳转到本节末尾直接解压}

    使用 Git 获取内核源码

    先决条件
    •你已经安装了 Git。使用以下命令安装 Git:

    sudo apt install git-core
    

    •您的系统为出站连接打开了默认的 Git 端口 9418。
    同步内核源
    •通过运行source_sync.sh脚本获取内核源代码:

    ./source_sync.sh
    

    出现提示时,输入发行说明中提供的“标签”名称。
    您可以同步到您喜欢的任何 Linux 标签。但是,发行说明中提供的标记将源同步到构建发行二进制文件的同一源修订版。要查看可用发布标签的列表,请使用:

     git tag –l tegra-l4t*
    

    手动下载内核源码

    作为替代方案,您可以下载内核源文件,然后手动解压缩它们。如果可能,建议改为与 git 同步。
    手动下载和扩展内核源代码
    1.在浏览器中,导航到:
    https://developer.nvidia.com/embedded/downloads
    2.找到并下载您的版本的 L4T 源文件,保存到JetsonNX目录中。
    3.进入JetsonNX目录,提取 TBZ2 文件。

    tar -xjf public_sources.tbz2
    

    4.提取内核源文件。

    cd Linux_for_Tegra/source/public
    tar -xjf kernel_src.tbz2
    

    内核源代码被提取到内核子目录中。

    4.构建 NVIDIA 内核

    按照此过程中的步骤构建 NVIDIA 内核。
    先决条件
    •您已下载内核源代码。
    •您已经安装了内核构建过程所需的实用程序。
    使用以下命令安装实用程序:

    sudo apt install build-essential bc
    

    构建 Jetson Linux 内核

    1.使用以下命令设置 shell 变量:

    TEGRA_KERNEL_OUT=$HOME/software/JetsonNX/Linux_for_Tegra/out_image
    

    2.如果在非 Jetson 系统上交叉编译,请导出以下环境变量:

    export CROSS_COMPILE=$HOME/software/JetsonNX/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
    export LOCALVERSION=-tegra
    

    有关如何下载和构建参考工具链的信息,请参阅L4T 工具链
    3.执行以下命令来创建.config文件:

    cd ./kernel/kernel-4.9
    

    如有需要可以直接使用脚本打上实时补丁

    scripts/rt-patch.sh apply-patches
    

    准备编译

    sudo mkdir -p $TEGRA_KERNEL_OUT
    sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
    

    4.执行以下命令来构建包含所有 DTB 和模块的内核:

    sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j16
    

    5.将JetsonNX/Linux_for_Tegra/kernel/Image替换为以下内容的副本:

    TEGRA_KERNEL_OUT/arch/arm64/boot/Image
    

    6.将JetsonNX/Linux_for_Tegra/kernel/dtb/的内容替换为以下内容:

    TEGRA_KERNEL_OUT/arch/arm64/boot/dts/
    

    7.执行以下命令安装内核模块:

    sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install \
         INSTALL_MOD_PATH=$HOME/software/JetsonNX/Linux_for_Tegra/rootfs/
    

    8.或者,使用以下命令归档已安装的内核模块:

    cd $HOME/software/JetsonNX/Linux_for_Tegra/rootfs
    tar --owner root --group root -cjf kernel_supplements.tbz2 lib/modules
    

    安装的模块可用于在目标系统上提供/lib/modules/<kernel_version> 的内容。
    9.将JetsonNX/Linux_for_Tegra/kernel/kernel_supplements.tbz2替换为第8步打包的文件:

    JetsonNX/Linux_for_Tegra/rootfs/kernel_supplements.tbz2
    

    10.更新内核文件
    进入JetsonNX/Linux_for_Tegra/目录,执行以下脚本

    sudo ./apply_binaries.sh
    

    进入恢复模式,详细流程请参考JetsonNX快速入门指南
    为确保开发人员套件以强制恢复模式启动,请在按钮接头 (J14) 的引脚 9 和 10(FC REC 和 GND)之间放置一个跳线,该接头位于 Jetson 模块下方的载板边缘。

    image.png
    在console中输入lsusb确认开发板是否连接
    image.png

    确认链接之后输入下面的命令进行更新

    sudo ./flash.sh ${BOARD} mmcblk0p1
    

    其中${BOARD}根据你的开发套件类型确定,例如我的是microSD card版本的Jetson Xavier NX P3668-0000, 对应的${BOARD}=jetson-xavier-nx-devkit,则刷机指令为:

    sudo ./flash.sh jetson-xavier-nx-devkit mmcblk0p1
    

    其它开发套件参${BOARD}值考如下:

    image.png
    JetsonNX 参考指令
    系统镜像生成并升级(把机器中的所有内容擦除并刷机,重新制作system.img)
    $sudo ./flash.sh jetson-xavier-nx-devkit mmcblk0p1 
    
    系统完整升级但不生成system.img镜像(把机器中的所有内容擦除并刷机)
    $sudo ./flash.sh -r jetson-xavier-nx-devkit mmcblk0p1 
    
    更新DTB 设备树(涉及外设驱动)
    将新的DTB文件"tegra194-p3668-all-p3509-0000.dtb"复制到目录Linux_for_Tegra/kernel/dtb
    $sudo ./flash.sh -r -k kernel-dtb jetson-xavier-nx-devkit mmcblk0p1
    
    更新内核镜像(kernel/Image 涉及外设驱动)
    Xavier NX检索内核先判断根目录下/boot/Image 文件,此时只需要把新的内核Image文件复制到 Xavier NX开机后的/boot/ 目录后再重启即可,通过uname -a 查看内核信息如日期时间是否为更新的内核
    $sudo cp $PWD/Image /boot/ 
    $sudo reboot
    
    系统备份(备份Xavier NX机器中的系统及全部文件至当前目录的backup.img)
    $sudo ./flash.sh -r -k APP -G backup.img jetson-xavier-nx-devkit mmcblk0p1
    
    如何恢复使用备份的镜像:
    1、上面步骤备份会生出两个文件,把其中的backup.img.raw 重新命名到bootloader/system.img(软件镜像包含用户空间的所有文件信息),backup.img 文件不被使用可以删除掉
    2、运行命令重新升级机器:
    $sudo ./flash.sh -r jetson-xavier-nx-devkit mmcblk0p1 
    

    相关文章

      网友评论

        本文标题:Jetson Xavier NX 内核编译移植

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