106

阿木币

1

精华

397 小时

在线时间

技术大V

Rank: 4

发表于 2021-12-9 09:14:36 2918 浏览 1 回复

[飞控嵌入式] 玩转Jetson NX内核(二)

本帖最后由 eason 于 2021-12-9 09:14 编辑

接着上篇继续俩聊Jetson NX的源码编译问题
我们已经搭建好各种编译环境
1.1.3、bash环境变量设置
这里我们设置好环境变量,
  1. TOP_DIR  Linux_for_Tegra文件存放位置的同级路径,此处我的存放路径为 ~/l4t-sources/xavier-nx
  2. L4T_DIR  Linux_for_Tegra的路径,此处为 $TOP_DIR/Linux_for_Tegra
  3. LOCALVERSION  版本设置为 -tegra
  4. LDK_ROOTFS_DIR  系统文件所在路径,此处为 $L4T_DIR/rootfs
  5. ARCH  架构设置为 arm64
  6. CROSS_COMPILE  跨平台编译设置为 aarch64-linux-gnu-
  7. CROSS32CC  设置为 arm-linux-gnueabihf-gcc
  8. TEGRA_KERNEL_OUT  内核编译结果存放路径设置为 $L4T_DIR/source/public/kernel/out_kernel
  9. KERNEL_PATH  内核源码路径存放位置为 $L4T_DIR/source/public/kernel
  10. NVIDIA_PATH  内核源码nvidia路径存放位置为 $L4T_DIR/source/public/kernel/nvidia
  11. XAVIER_DTS_PATH  DTS文件路径存放位置为 $L4T_DIR/source/public/hardware/nvidia/platform/t19x
  12. TOOLCHAIN_PREFIX  交叉编译工具链路径设置为 $HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
  13. KERNEL_MODULES_OUT  模块编译结果路径存放位置为 $L4T_DIR/source/public/kernel/out_modules
复制代码
具体环境指令如下
  1. export TOP_DIR=~/l4t-sources/xavier-nx
  2. export L4T_DIR=$TOP_DIR/Linux_for_Tegra
  3. export LOCALVERSION=-tegra
  4. export LDK_ROOTFS_DIR=$L4T_DIR/rootfs
  5. export ARCH=arm64
  6. export CROSS_COMPILE=aarch64-linux-gnu-
  7. export CROSS32CC=arm-linux-gnueabihf-gcc
  8. export TEGRA_KERNEL_OUT=$L4T_DIR/source/public/kernel/out_kernel
  9. export KERNEL_PATH=$L4T_DIR/source/public/kernel
  10. export NVIDIA_PATH=$L4T_DIR/source/public/kernel/nvidia
  11. export XAVIER_DTS_PATH=$L4T_DIR/source/public/hardware/nvidia/platform/t19x
  12. export TOOLCHAIN_PREFIX=$HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
  13. export KERNEL_MODULES_OUT=$L4T_DIR/source/public/kernel/out_modules
复制代码


1.2、源码编译
1.2.1、编译内核kernel
  1. cd $KERNEL_PATH
  2. cd ..
  3. make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=$TOOLCHAIN_PREFIX tegra_defconfig
  4. make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=$TOOLCHAIN_PREFIX menuconfig
  5. 在进行配置的时候可以自己设定,目前保持默认进行不做任何修改而编译
  6. make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=$TOOLCHAIN_PREFIX -j4 Image
复制代码
会有报错
image.png

按照提示,进入到kernel-4.9文件夹中执行make mrproper
再继续进行编译
  1. cd ../..
  2. 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
  1. cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $L4T_DIR/kernel/ -f
复制代码
然后使用如下指令进行签名
  1. cd $L4T_DIR
  2. ./l4t_sign_image.sh --file kernel/Image --chip 0x19
复制代码
在kernel中就会重新生成签名的文件Image.sig
1.2.2、编译DTBS
  1. cd $L4T_DIR/source/public
  2. 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
指令如下:
  1. cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra194-p3668-all-p3509-0000.dtb $L4T_DIR/kernel/dtb/
复制代码
1.2.3、编译modules
  1. cd $L4T_DIR/source/public
  2. make -C kernel/kernel-4.9/ ARCH=arm64 O=$TEGRA_KERNEL_OUT LOCALVERSION=-tegra CROSS_COMPILE=$TOOLCHAIN_PREFIX -j4 modules
复制代码
等待编译完成。

至此内核编译就基本完成了。下面我们再继续讲讲如何系统的刷写。



扫一扫浏览分享
回复

使用道具 举报

144

阿木币

0

精华

31 小时

在线时间

老司机

Rank: 2

发表于 2021-12-9 10:43:26
给弋老师点赞
回复 点赞

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表