技术分享 | 玩转Jetson NX内核
Posted 阿木实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术分享 | 玩转Jetson NX内核相关的知识,希望对你有一定的参考价值。
上篇我们聊了Jetson NX(一)的源码编译问题 我们已经搭建好各种编译环境 1.1.3、bash环境变量设置 这里我们设置好环境变量,
TOP_DIR Linux_for_Tegra文件存放位置的同级路径,此处我的存放路径为 ~/l4t-sources/xavier-nx L4T_DIR Linux_for_Tegra的路径,此处为 $TOP_DIR/Linux_for_Tegra LOCALVERSION 版本设置为 -tegra LDK_ROOTFS_DIR 系统文件所在路径,此处为 $L4T_DIR/rootfs ARCH 架构设置为 arm64 CROSS_COMPILE 跨平台编译设置为 aarch64-linux-gnu- CROSS32CC 设置为 arm-linux-gnueabihf-gcc TEGRA_KERNEL_OUT 内核编译结果存放路径设置为 $L4T_DIR/source/public/kernel/out_kernel KERNEL_PATH 内核源码路径存放位置为 $L4T_DIR/source/public/kernel NVIDIA_PATH 内核源码nvidia路径存放位置为 $L4T_DIR/source/public/kernel/nvidia XAVIER_DTS_PATH DTS文件路径存放位置为 $L4T_DIR/source/public/hardware/nvidia/platform/t19x TOOLCHAIN_PREFIX 交叉编译工具链路径设置为 $HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- KERNEL_MODULES_OUT 模块编译结果路径存放位置为 $L4T_DIR/source/public/kernel/out_modules
具体环境指令如下
export TOP_DIR=~/l4t-sources/xavier-nx export L4T_DIR=$TOP_DIR/Linux_for_Tegra export LOCALVERSION=-tegra export LDK_ROOTFS_DIR=$L4T_DIR/rootfs export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu- export CROSS32CC=arm-linux-gnueabihf-gcc export TEGRA_KERNEL_OUT=$L4T_DIR/source/public/kernel/out_kernel export KERNEL_PATH=$L4T_DIR/source/public/kernel export NVIDIA_PATH=$L4T_DIR/source/public/kernel/nvidia export XAVIER_DTS_PATH=$L4T_DIR/source/public/hardware/nvidia/platform/t19x export TOOLCHAIN_PREFIX=$HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- export KERNEL_MODULES_OUT=$L4T_DIR/source/public/kernel/out_modules
** 1.2、源码编译 1.2.1、编译内核kernel**
cd $KERNEL_PATH cd .. make -C kernel/kernel-4.9/ ARCH=arm64 O=TEGRAKERNELOUTLOCALVERSION=−tegraCROSSCOMPILE=TEGRAKERNELOUTLOCALVERSION=−tegraCROSSCOMPILE=TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=TOOLCHAIN_PREFIX tegra_defconfig make -C kernel/kernel-4.9/ ARCH=arm64 O=TEGRAKERNELOUTLOCALVERSION=−tegraCROSSCOMPILE=TEGRAKERNELOUTLOCALVERSION=−tegraCROSSCOMPILE=TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=TOOLCHAIN_PREFIX menuconfig 在进行配置的时候可以自己设定,目前保持默认进行不做任何修改而编译 make -C kernel/kernel-4.9/ ARCH=arm64 O=TEGRAKERNELOUTLOCALVERSION=−tegraCROSSCOMPILE=TEGRAKERNELOUTLOCALVERSION=−tegraCROSSCOMPILE=TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=TOOLCHAIN_PREFIX -j4 Image 会有报错 按照提示,进入到kernel-4.9文件夹中执行make mrproper
再继续进行编译
cd ../.. make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=$TOOLCHAIN_PREFIX -j4 Image 等待编译完成
编译完成的Image文件在$TEGRA_KERNEL_OUT/arch/arm64/boot目录下面
对于Xavier进行签名
将编译完成的Image复制到$L4T_DIR/kernel目录之下,将之前的Image可自己重命名为
Image_origin
cp TEGRAKERNELOUT/arch/arm64/boot/ImageTEGRAKERNELOUT/arch/arm64/boot/ImageTEGRA_KERNEL_OUT/arch/arm64/boot/Image L4T_DIR/kernel/ -f 然后使用如下指令进行签名
cd $L4T_DIR ./l4t_sign_image.sh --file kernel/Image --chip 0x19 在kernel中就会重新生成签名的文件Image.sig
1.2.2、编译DTBS
cd $L4T_DIR/source/public make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=$TOOLCHAIN_PREFIX -j4 dtbs 编译完成之后生成的DTB文件在$TEGRA_KERNEL_OUT/arch/arm64/boot/dts目录下面
对于Xavier NX :
$TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra194-p3668-all-p3509-0000.dtb
将编译完成的dtb文件拷贝到$L4T_DIR/kernel/dtb/ 将之前的tegra194-p3668-all-p3509-0000.dtb文件重命名为backup_tegra194-p3668-all-p3509-0000.dtb
指令如下:
cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra194-p3668-all-p3509-0000.dtb $L4T_DIR/kernel/dtb/
1.2.3、编译modules cd $L4T_DIR/source/public make -C kernel/kernel-4.9/ ARCH=arm64 O=TEGRAKERNELOUTLOCALVERSION=−tegraCROSSCOMPILE=TEGRAKERNELOUTLOCALVERSION=−tegraCROSSCOMPILE=TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=TOOLCHAIN_PREFIX -j4 modules 编译完成的模块生成文件存放在$KERNEL_MODULES_OUT/lib文件夹下面,然后将新编译的modules文件拷贝到$L4T_DIR/rootfs文件夹下,在拷贝之前我们需要先将原来的rootfs文件夹做个备份,具体操作指令如下
cd $L4T_DIR sudo cp -rf rootfs/ rootfs-bk-orig sudo cp -arfv $KERNEL_MODULES_OUT/lib rootfs/ 至此内核编译就基本完成了。下面我们再继续讲讲如何系统的刷写。
- End -
技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。
阿木实验室致力于为机器人研发提供开源软硬件工具和课程服务,让研发更高效!
以上是关于技术分享 | 玩转Jetson NX内核的主要内容,如果未能解决你的问题,请参考以下文章
开箱啦。带你玩转飞凌FCU3001“魔盒”—基于NVIDIA Jetson Xavier NX
资源分享jetson xavier nx(aarch64)平台上的pytorch1.8.0+torchvision0.9.0(python=3.6)
Jetson Xavier NX (15) -- Jetson.GPIO
Jetson Xavier NX (15) -- Jetson.GPIO