Jetson Xavier NX 内核编译、源码编译流程

[NVIDIA] 从零入手 Jetson Xavier NX 内核编译、源码编译流程


***注明:感谢网友提醒,我当时买的时候nx套件还没开售,因为核心板兼容b01,先买了核心板和b01的板子合在一起用的,所以本文是基于jetson xavier nx模块 + B01的,社友请知悉。

本文主要讲述,基于 Jetson Xavier NX 开发者套件: 环境配置——>内核剪裁——>重新编译——>烧录流程。

What is Jetson Xavier NX

    NVIDIA® Jetson Xavier™ NX 是体型超小的AI超级计算机,适用于嵌入式系统和边缘系统。
    高达 21 TOPS 加速计算能力,可以并行运行现代神经网络并处理来自多个高分辨率传感器的数据。
    Jetson Xavier NX 是生产就绪型产品,可支持所有热门 AI 框架。

1、先按照我的另一篇文章,配置基础环境并完成第一次NX的刷机:
NVIDIA 入手Jetson Xavier NX 刷机+开机配置+系统烧录+Bring up

2、则你现在应该拥有一个工作路径和基础的一些代码环境,如下所示:

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra$ ls
apply_binaries.sh                  jetson-xavier-slvs-ec.conf           p2972-0000-devkit-maxn.conf
bootloader                         kernel                               p2972-0000-devkit-slvs-ec.conf
build_l4t_bup.sh                   l4t_generate_soc_bup.sh              p2972-0006-devkit.conf
flash.sh                           l4t_sign_image.sh                    p2972-as-galen-8gb.conf
jetson-tx2-4GB.conf                nvmassflashgen.sh                    p3449-0000+p3668-0000-qspi-sd.conf
jetson-tx2-as-4GB.conf             nv_tegra                             p3449-0000+p3668-0001-qspi-emmc.conf
jetson-tx2.conf                    p2771-0000-0888.conf                 p3509-0000+p3668-0000-qspi.conf
jetson-tx2i.conf                   p2771-0000-as-0888.conf              p3509-0000+p3668-0000-qspi-sd.conf
jetson-xavier-8gb.conf             p2771-0000.conf.common               p3509-0000+p3668-0001-qspi-emmc.conf
jetson-xavier-as-8gb.conf          p2771-0000-devkit.conf               p3668.conf.common
jetson-xavier-as-xavier-nx.conf    p2771-0000-dsi-hdmi-dp.conf          README_Massflash.txt
jetson-xavier.conf                 p2771-3489-ucm1.conf                 rootfs
jetson-xavier-maxn.conf            p2771-3489-ucm2.conf                 source
jetson-xavier-nx-devkit.conf       p2822+p2888-0001-as-p3668-0001.conf  source_sync.sh
jetson-xavier-nx-devkit-emmc.conf  p2972-0000.conf.common               tools
jetson-xavier-nx-devkit-qspi.conf  p2972-0000-devkit.conf

 

3、切到前一级路径,并把英伟达官方下载的kernel源码压缩包 “public_sources.tbz2”,拷贝到这
注:源码包下载路径如下:

zhong@zhong:~/workspace/xa_nx/linux$ ls
Linux_for_Tegra  public_sources.tbz2

4、执行如下解压命令

zhong@zhong:~/workspace/xa_nx/linux$ tar -xjf public_sources.tbz2

5、在你的source路径下,就会多出来一些源码包了:

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source$ ls
nv_src_build.sh  public

6、进入kernel源码路径,执行解压

~/workspace/xa_nx/linux/Linux_for_Tegra/source/public$ tar -xjf kernel_src.tbz2

7、可以观察到多了kernel源码文件夹:

8、进入路径就可以看到kernel源码结构了:

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9$ ls
arch                            build.config.goldfish.x86     drivers   Kconfig      NVIDIA-REVIEWERS  signing_key
block                           build.config.goldfish.x86_64  firmware  kernel       README            signing_key.x509
build.config.cuttlefish.x86_64  certs                         fs        lib          REPORTING-BUGS    sound
build.config.goldfish.arm       COPYING                       include   MAINTAINERS  rt-patches        tools
build.config.goldfish.arm64     CREDITS                       init      Makefile     samples           usr
build.config.goldfish.mips      crypto                        ipc       mm           scripts           verity_dev_keys.x509
build.config.goldfish.mips64    Documentation                 Kbuild    net          security          virt

9、在linux操作系统上只使用gcc编译是不够的,还要安装编译程序必须的软件包,使用下面的命令:

sudo apt install build-essential bc

10、配置编译环境变量,避免重复配置,这边直接修改 “~/.bashrc”

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9$ vim ~/.bashrc

11、在 “.bashrc” 末尾添加如下配置(路径注意和自己的电脑保持一致),保存退出:

export LOCALVERSION=-tegra

export TEGRA_KERNEL_OUT=/home/zhong/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9/okernel

export CROSS_COMPILE=/home/zhong/workspace/xa_nx/tools/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

12、执行source命令

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9$ source ~/.bashrc

13、在源码路径下,执行命令:mkdir -p $TEGRA_KERNEL_OUT,建立编译输出路径

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9$ mkdir -p $TEGRA_KERNEL_OUT

14、make defconfig , 执行以下命令

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig

15、则有如下打印:

make[1]: Entering directory '/home/zhong/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9/okernel'
  HOSTCC  scripts/basic/fixdep
  GEN     ./Makefile
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
make[1]: Leaving directory '/home/zhong/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9/okernel'

16、执行以下命令,开始编译kernel,包含所有DTBs and modules.(-j8 是虚拟机处理器有8个核,不一样修改下,如4核 -j4 )

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j8

备注: 在编译过程中可能会报错:“… is not clean, please run ‘make mrproper’”,则在kernel-4.9路径下执行“make mrproper” 命令即可。

17、编译完成后会生成 Image、 dtb 文件

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9/okernel/arch/arm64/boot$ ls
dts  Image  Image.gz  zImage

18、将新编译好的 Image 和 dtb 文件替换至烧录位置:

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9/okernel/arch/arm64/boot$ cp Image /home/zhong/workspace/xa_nx/linux/Linux_for_Tegra/kernel/Image

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9/okernel/arch/arm64/boot$ cp dts/* /home/zhong/workspace/xa_nx/linux/Linux_for_Tegra/kernel/dtb/ -rf

19、执行以下命令来安装 kernel modules:

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/source/public/kernel/kernel-4.9$ sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=/home/zhong/workspace/xa_nx/linux/Linux_for_Tegra/rootfs

20、(可选)在rootfs路径下:
(1)使用以下命令归档已安装的内核模块,执行完后可以看到多了“kernel_supplements.tbz2”

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/rootfs$ sudo tar --owner root --group root -cjf kernel_supplements.tbz2 lib/modules

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/rootfs$ ls
bin   dev  home                     lib    mnt  proc        root  sbin  srv  tmp  var
boot  etc  kernel_supplements.tbz2  media  opt  README.txt  run   snap  sys  usr

(2)可以使用已安装的模块在目标系统上提供 /lib/modules/< kernel_version>的内容。
(3)将 “kernel_supplements.tbz2”替换到“zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/kernel$”路径下

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra/rootfs$ sudo cp kernel_supplements.tbz2  ../kernel/kernel_supplements.tbz2

21、执行 apply_binaries.sh 脚本

zhong@zhong:~/workspace/xa_nx/linux/Linux_for_Tegra$ sudo ./apply_binaries.sh

备注:按照我的另一篇文章( [NVIDIA 入手Jetson Xavier NX 刷机+开机配置+系统烧录+Bring up]),配置基础环境并完成第一次NX的刷机时,会执行上述脚本,在这里执行就会报错,因此需要内核编译剪裁的同学就 不! 要! 提前! 执行那个脚本了,在这个地方再执行。

22、Jetson Xavier NX 触发recovery模式,重新上电。
23、烧录固件

sudo ./flash.sh p3449-0000+p3668-0001-qspi-emmc mmcblk0p1

24、等待烧录完成,即可进入系统,使用鼠标键盘初始化系统后即完成整个剪裁烧录过程,从debug串口观察系统启动log,编译用户名和编译时间已经更新,验证重新编译的内核确实生效:

    Linux version 4.9.140-tegra (zhong@zhong) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc167ef90065c0eeb7f91977701] (Linaro GCC 7.3-2018.05) ) #3 SMP PREEMPT Thu May 7 15:28:44 CST 2020

25、以上,完成了NX内核的内核源码编译流程,关于如何进行内核剪裁就比较简单了,但是每个人根据项目的不同,会有所差异,因此内核剪裁又是一件比较麻烦的事,后面开一个新的篇幅写下,稍等哦!~

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Jetson Xavier NX是一款高性能的边缘计算设备,拥有强大的计算能力和AI推理能力,被广泛应用于智能安防、智能制造、自动驾驶等多个领域。Jetson Xavier NX源码编译是指对Jetson Xavier NX的操作系统和应用程序进行编译编译的过程需要使用一些工具和指令,如GCC编译器、make指令、CMake工具等。 首先,需要下载Jetson Xavier NX源码,可以从官方网站上下载。然后,需要安装支持编译的软件,如make和CMake。在编译之前,需要根据实际需要选择编译的目标,例如编译内核、驱动程序和应用程序等。针对不同的目标,可能需要不同的编译方式和工具。 在编译过程中,需要按照一定的顺序依次执行编译指令,例如配置编译环境、编译内核编译驱动程序、编译应用程序等。这些指令需要仔细阅读文档,并按照文档中的指示进行操作,以确保编译的成功。 Jetson Xavier NX源码编译的过程较为繁琐,需要有一定的编程知识和经验,并且需要耐心和细心,以确保编译的成功。编译完成后,可以在设备上安装和运行编译成功的程序,以满足实际需求。 ### 回答2: 《Jetson Xavier NX源码编译.pdf》是一份关于Jetson Xavier NX平台源代码编译的指南文档。该文档主要包括了Jetson Xavier NX平台的硬件特性、软件架构、源码下载、环境配置和编译指导等内容,是进行Jetson Xavier NX平台软件开发的重要参考资料。 文档中提到了Jetson Xavier NX平台的硬件特性,包括具有256核心NVIDIA GPU的AI超级计算机、6核心ARM A57 CPU、8GB LPDDR4x RAM、NVMe M.2 SSD和Gigabit以太网等。同,文档还介绍了JetPack软件套件的架构和软件组件,包括CUDA、cuDNN、TensorRT、VisionWorks等工具箱。 在源代码的下载方面,文档提供了Jetson Xavier NX平台的官网链接和用户指南,并介绍了源代码的下载方式和解压方式,同还提供了下载完成后相关文件夹的解释。 在环境配置方面,文档详细介绍了Ubuntu 18.04的安装和配置,包括软件源修改、系统升级和安装所需依赖库等步骤。 在编译指导方面,文档提供了基于Makefile的编译方法和CMakeLists.txt的编译方法,对于不同的开发需求,文档也提供了分步骤的详细编译指导,使得开发者能够快速上手开始开发工作。 总之,《Jetson Xavier NX源码编译.pdf》是一份非常实用的Jetson Xavier NX平台软件开发指导文件,对于想要深入学习和开发Jetson Xavier NX平台的开发者来说,是一份非常值得阅读和参考的资料。 ### 回答3: 《Jetson Xavier NX源码编译.pdf》是一份关于如何在Jetson Xavier NX开发板上进行源代码编译的文档。Jetson Xavier NX是一款高性能、低功耗的AI计算平台,使用者可以在其上进行深度学习、计算机视觉和机器人等领域的开发。 本文档详细阐述了如何在Jetson Xavier NX上进行Linux内核和驱动的源代码编译。它包括了在Ubuntu环境下安装所需的软件包,如gcc、make、cmake、git等,并提供了一些例子代码和编译命令。同,本文档还介绍了如何使用JetPack SDK进行系统的烧写和配置。 值得注意的是,由于本文档的针对性较强,对于没有相关经验的用户来说,有可能会出现编译失败、系统崩溃等情况。因此,在操作前需要对该平台有一定的了解,并且仔细阅读本文档的内容,尤其是注意一些风险提示和注意事项。 总之,《Jetson Xavier NX源码编译.pdf》对开发者在Jetson Xavier NX上进行源代码编译提供了详尽的指导,有助于用户深入掌握这一强大的AI计算平台,快速实现自己的开发和研究计划。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值