Jetson Xavier NX 升级内核尝试

1、开发板eMMC烧写官方系统过程

Jetson Xavier NX有两个版本,第一个是SD卡槽的版本,第二个是带eMMC存储芯片的版本。带SD卡槽的版本可以使用microSD卡烧录系统后直接插入使用,也支持通过虚拟机SDK Manager软件刷入系统使用。带eMMC存储芯片的版本,容量为16G,不支持microSD卡烧录系统方式,仅支持虚拟机SDK Manager软件刷入系统使用。

1、打开NVIDIA的jetpack下载网址,下载NVIDIA SDK Manager:

https://developer.nvidia.com/zh-cn/embedded/jetpack

在这里插入图片描述
下载下来是一个deb包,我们将其拷贝到我们的Ubuntu主机中。
在这里插入图片描述

2、在Ubuntu主机中安装SDK Manager。

进入到sdkmanager_1.6.1-8175_amd64.deb所在目录,直接执行sudo dpkg -i sdkmanager_1.6.1-8175_amd64.deb命令安装。安装过程可能会报错找不到依赖文件:
在这里插入图片描述
执行sudo apt --fix-broken install命令可以解决该问题。

安装好后,在Ubuntu的软件列表中可以找到SDK Manager的图标,直接双击运行。第一次运行,它会自动打开网页,要求使用你在NVIDIA官网注册的账号密码登录,并使用邮箱验证。只有登陆成功才能正式进入软件运行。
在这里插入图片描述
3、硬件连接

硬件连接结构图如下所示:
在这里插入图片描述
在插入电源通电前,还要将跳线帽连接到REC和GND引脚(第二、三引脚),让系统进入刷机模式,SDK Manager 会优先将系统文件烧录到Jetson NX 的EMMC里。
在这里插入图片描述
4、系统烧写。

硬件连接好后,接入电源,打开Ubuntu主机的SDK Manager

在这里插入图片描述
点击CONTINUE TO STEP 02,会要求选择板子型号,第一个是eMMC版本,第二个是SD卡版本,我们选第一个。

在这里插入图片描述

默认会勾选Jetson OS 和Jetson SDK Components,表示刷入系统和SDK,可以单独选系统OS 或者软件SDK,但是单独刷入软件SDK 前需要保证已经刷入系统OS。由于eMMC 的容量有限,所以烧录到eMMC 建议只选择刷入Jetson OS 的内容。文件下载路径保持默认就好,勾选协议,点击CONTINUE 进入第三步。

在这里插入图片描述
第三步会自动去下载相应文件,然后烧写到Jetson NX开发板的eMMC中,第三步完成不用进入第四步,通过Jetson NX开发板链接的显示器,就可以看到烧写到开发板的系统已成功启动,进入了系统安装好后的初始配置界面。此时可以直接拔掉Ubuntu主机与开发板连接的micro USB线。然后按照安装Ubuntu系统的设置一步步设置即可。

2、系统启动项配置文件

进入系统后在/boot/extlinux目录下有一个extlinux.conf文件,该文件定义了系统启动所使用的Image文件。如下图所示,可以通过DEFAULT来指定。
在这里插入图片描述
可以看到,在更换新内核时,需要替换/boot目录下的Image文件,并将之前的Image文件保存为Image.backup,然后将extlinux.conf文件中LABEL backup项前面的注释删掉。以备在系统启动时,/boot目录下找不到Image文件,系统会从Image.backup启动。

当我们将/boot目录下的Image文件备份为Image.backup,并将Image改名为Image2,然后修改extlinux.conf文件如下
在这里插入图片描述
然后reboot重启,系统是可以重启成功的。但是如果我们把/boot目录下的Image和extlinux.conf中的LINUX /boot/Image都改成Image2,重启系统是不成功的。

3、更换内核尝试

基于以上,我们尝试在Ubuntu主机交叉编译5.10版Linux内核(使用英伟达官方提供的配置文件),然后用生成的Image文件替换掉/boot目录下的Image,是否可以升级Jetson Xavier NX的内核版本。

在linux-5.10.78源码目录下执行以下命令

$ export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
$ export KBUILD_OUTPUT=./build
$ make defconfig

#Adjust the configuration:
$ scripts/config --file $KBUILD_OUTPUT/.config --enable STMMAC_ETH
$ scripts/config --file $KBUILD_OUTPUT/.config --enable STMMAC_PLATFORM
$ scripts/config --file $KBUILD_OUTPUT/.config --enable DWMAC_DWC_QOS_ETH
$ scripts/config --file $KBUILD_OUTPUT/.config --enable MARVELL_PHY
$ scripts/config --file $KBUILD_OUTPUT/.config --set-val CMA_SIZE_MBYTES 256

#Build the kernel:
$ make -j4
$ make dtbs
$ make modules
$ sudo make INSTALL_MOD_PATH=./rootfs/ modules_install

然后用inux-5.10.78/build/arch/arm64/boot目录下的Image文件替换掉Jetson Xavier NX系统中/boot目录下的Image,并将原来的备份为Image.backup,然后修改extlinux.conf文件如下:

在这里插入图片描述

在这里插入图片描述
然后重启系统,失败,说明这种替换方法并不能成功升级内核。

在随后的分析中,发现交叉编译生成的Image文件类型是可执行文件

在这里插入图片描述
而Jetson Xavier NX系统中/boot目录下的Image文件类型是DATA类型

在这里插入图片描述
简单的文件替换肯定不能成功。

4、官方手册的内核定制

在英伟达的官方指导手册中,有定制内核的一节。

英伟达官方指导手册链接

在这里插入图片描述
在该节的描述中,我们需要去官方的下载中心下载NVIDIA® Jetson™ Linux Driver Package (L4T):

Jetson_Linux_R32.6.1_aarch64.tbz2

以及L4T source:

public_sources.tbz2

下载地址:Jetson Linux R32.6.1 Release Page
在这里插入图片描述
然后在官方给定的内核源码包中进行交叉编译,编译成功会在arch/arm64/boot/目录下生成Image文件。可以看到,在英伟达官方提供的内核源码包中交叉编译生成的Image依然是data类型的文件。
在这里插入图片描述
可见英伟达官方对内核源码以及编译规则做了改动,我们很难使用Linux官方内核自行编译然后去替换Image。目前英伟达官方提供的开发工具包最新版本就是32.6.1,里面的内核版本为4.9。
在这里插入图片描述

5、更换实时内核

虽然我们无法通过自行编译Linux源码来升级内核,但是官方提供了实时内核,在官方指导手册有相关更换实时内核的说明:
Using the L4T Real-Time Kernel Package

This section explains how to install and remove L4T real-time kernel packages on your system through the NVIDIA repository.

To install the real-time kernel package

1.Open the apt source configuration file in a text editor, for example:

$ sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list

2.Add a new entry for the rt-kernel repo:

deb https://repo.download.nvidia.com/jetson/rt-kernel r32.5 main

3.Enter this command:

$ sudo apt update

4.Install the real-time kernel packages:

$ sudo apt install nvidia-l4t-rt-kernel nvidia-l4t-rt-kernel-headers

5.Reboot

To remove the real-time kernel package

1.Enter this command:

$ sudo apt remove nvidia-l4t-rt-kernel nvidia-l4t-rt-kernel-headers

2.Reboot.

To switch to a different kernel
Once you have installed the real-time kernel on your device, you may want to switch between the real-time kernel image and the original generic kernel image without re-installing or removing kernel packages. You can do this by editing /boot/extlinux/extlinux.conf and setting the DEFAULT property to specify the kernel you want to boot. Set DEFAULT to real-time for the real-time kernel, or to primary for the generic kernel.

TIMEOUT 30
DEFAULT real-time

按照该步骤,可以安装英伟达提供的实时内核,并且重启后,会自动从实时内核启动。

在这里插入图片描述
在这里插入图片描述
可以看到实时内核安装完成后,会自动在/boot目录下生成Image.real-time文件,以及extlinux.conf文件中DEFAULT的默认指向也会改为real-time。重启系统:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值