关于orin agx单独更新内核及设备树问题

您好!

由于目前网络phy还没调好,所以想通过u盘更新内核及设备树,发现一个问题,用u盘将/boot/dtb/kernel_tegra234-p3737-0000+p3701-0004-nv.dtb 替换发现不起做用。但用flash.sh整个更新才能更新,请问这是什么问题。编译步骤如下。
我这里有两个脚本,一个是处理文件系统的,另一个是编译内核的。

处理文件系统的脚本如下:

#!/bin/sh

cd Linux_for_Tegra/rootfs/

echo “clear rootfs, and rebuild rootfs !”
sudo rm -rf *

echo “unpacking the ubuntu rootfs, Please wait !”
sudo tar xvpf ../../package_org_jp6.2.2/Tegra_Linux_Sample-Root-Filesystem_R36.5.0_aarch64.tbz2

sudo cp -rf ../../package_org_jp6.2.2/aic8800D80 lib/firmware/aic8800D80

cd ..

echo “Install deb package, Please wait !”
sudo ./tools/l4t_flash_prerequisites.sh
sync
sudo ./apply_binaries.sh

cd ..

cd Linux_for_Tegra/tools

echo “Setting user and passwd, Please wait !”
sudo ./l4t_create_default_user.sh -u copsu -p copsu -a -n copsu

sync

编译脚本如下:

export CROSS_COMPILE=/opt/gcc_11.3/bin/aarch64-buildroot-linux-gnu-
export SDK_DIR=${PWD}/Linux_for_Tegra
export SOURCE_DIR=$SDK_DIR/source
export KERNEL_HEADERS=$SOURCE_DIR/kernel/kernel-jammy-src
export INSTALL_MOD_PATH=$SDK_DIR/rootfs/

echo “=============build kernel and its in-tree modules !===============”
cd $SOURCE_DIR
make -C kernel

echo “=============rootfs dir is $INSTALL_MOD_PATH================”
echo “============install kernel and its in-tree modules to rootfs=============”
sudo -E make install -C kernel
cp $SOURCE_DIR/kernel/kernel-jammy-src/arch/arm64/boot/Image $SDK_DIR/kernel/Image

echo “============build kernel Out-of-Tree Modules !============”
cd $SOURCE_DIR
rm -rf kernel/kernel-jammy-src/drivers/net/wireless/aic8800_fdrv/.o
rm -rf kernel/kernel-jammy-src/drivers/net/wireless/aic8800_fdrv/
.ko
rm -rf kernel/kernel-jammy-src/drivers/net/wireless/aic8800_fdrv/.cmd
rm -rf kernel/kernel-jammy-src/drivers/net/wireless/aic8800_fdrv/
.mod
rm -rf kernel/kernel-jammy-src/drivers/net/wireless/aic8800_fdrv/*.mod.c

make modules

echo “===========install kernel Out-of-Tree Modules !============”
sudo -E make modules_install

echo “===========update initramfs !============”
cd $SDK_DIR
sudo ./tools/l4t_update_initrd.sh

echo “===========Building the DTBs !============”
cd $SOURCE_DIR
make dtbs

echo “install DTBs !”
cp $SOURCE_DIR/kernel-devicetree/generic-dts/dtbs/* $SDK_DIR/kernel/dtb/
cp $SOURCE_DIR/kernel-devicetree/generic-dts/dtbs/tegra234-p3737-0000+p3701-0004-nv.dtb $SDK_DIR/bootloader/kernel_tegra234-p3737-0000+p3701-0004-nv.dtb
sync

所以我这边拷贝到u盘的dtb为tegra234-p3737-0000+p3701-0004-nv.dtb去替换设备里边的内核。替换后发现没有发生改变,比如我之前想替换phy的mdio地址。我甚至尝试过将/boot/dtb/kernel_tegra234-p3737-0000+p3701-0004-nv.dtb进行逆向,但一样不会发生改变,请问这是什么原因?

— 🤖 This is an automated AI response. I’m here to help, but please verify important details! —

根据提供的文档和上下文,Jetson AGX Orin 的设备树和内核更新问题可能与以下几点有关:

  1. 设备树更新:在 Jetson AGX Orin 中,设备树是存储在 /boot/dtb 目录下的。更新设备树后,需要重新编译内核并更新 initramfs 才能生效。
  2. 内核更新:更新内核后,需要重新编译内核模块并更新 initramfs 才能生效。
  3. initramfs 更新:initramfs 是一个初始化根文件系统的镜像文件,存储在 /boot 目录下。更新内核或设备树后,需要重新生成 initramfs 才能生效。

根据您提供的脚本,似乎您已经更新了设备树和内核,但是没有重新生成 initramfs。因此,建议您尝试重新生成 initramfs 并更新 initramfs 后再次尝试更新设备树和内核。

具体步骤如下:

  1. 更新设备树:将更新后的设备树文件 tegra234-p3737-0000+p3701-0004-nv.dtb 拷贝到 /boot/dtb 目录下。
  2. 更新内核:将更新后的内核文件 Image 拷贝到 /boot 目录下。
  3. 重新生成 initramfs:运行命令 sudo ./tools/l4t_update_initrd.sh 重新生成 initramfs
  4. 更新 initramfs:将重新生成的 initramfs 文件拷贝到 /boot 目录下。

如果您仍然遇到问题,请检查您的脚本和更新过程是否正确,并确保您已经重新生成 initramfs

— We support team will also look into your issue to have further suggestions soon. please stay tuned. —

sudo ./tools/l4t_update_initrd.sh 生成的initramfs在SDK哪个目录

tools/l4t_update_initrd.sh updates the base initrd image
Linux_for_Tegra/bootloader/l4t_initrd.img
and Linux_for_Tegra/rootfs/boot/initrd
using the nv-update-initrd script.

l4t_initrd.img放板子的哪个目录?

Hi 542270618,

Please check if FDT is specified in the /boot/extlinux/extlinux.conf in your case.
If not, the device tree will be loaded from UEFI-DTB by default.