Orin nx 16gb burn jetpack5.1.1 and Replace the kernel

你好,在orin nx上烧写jetpack5.1.1 固件后,开发板上各功能正常,包括imx219驱动,网络驱动等,但是我通过jetpack5.1.1的kernel5.10 src源码编译后,
步骤为make ARCH=arm64 tegra_defconfig
make ARCH=arm64 -j10
make ARCH=arm64 dtbs
生成Image 与 dtb ,
当我把Image 替换开发板上/boot/目录下的Image后, 很多设备就没了,包括网络eth0,和imx219 驱动等也没加载。我看了tegra_defconfig配置文件 imx219 =m ,即不会随内核自动加载,。。为什么会出现这种情况?
tegra_defconfig配置文件生成的Image为何 与 jetpack5.1.1 的固件包里的Image功能存在差异? ?我想让源码编译出的镜像功能与固件包里的功能保持一致,,如何做到?? 有没有与固件包里镜像功能一致的defconfig配置文件??
谢谢 请回答一下这个问题。。

我的目的是想让源码里编译出的Image 与固件包里的Image 功能保持一致。。
还有一个问题,我并没替换nVidia.ko 以及其他几个ko ,这个会不会影响开发板一些基础外设驱动?

我还有个疑问,在源码目录source/public/kernel/目录下 有 kernel-5.10和 nvdia目录,
kernel-5.10目录下有/driver/media/i2c/imx219.c , nvdia目录下有driver/media/i2c/nv_imx219.c ,最终确定用的是nv_imx219.c,
我想问下为什么编译出来的Image 没有用内核kernel-5.10目录下的驱动源码呢, 而是用nvidia目录下的驱动源码, 那么kernel-5.10目录下的设备树对应的驱动源码是哪里呢?

我发现在kernel-5.10目录下通过make ARCH=arm64 编译出的Image 与 在source/public/下通过 ./nvbuild.sh -o $PWD/kernel_out 生成的Image 差异很大!! 就是因为 ./nvbuild.sh 用的nvidia目录下的驱动源码 而make ARCH=arm64 用的是kernel-5.10目录下的驱动源码吗?
而且jetpack5.1.1的镜像文件与./nvbuild.sh 编译出的镜像文件一致吗?

看不懂你的問題到底是什麼
你要不要自己整理一下再重新問一遍…

就是在kernel-5.10目录下通过make ARCH=arm64 编译出来的Image 与./nvbuild.sh 编译出的Image 差异很大,用的一些驱动源码都不一样

你沒有重裝kernel module,原本default BSP裡的那一包kernel modules和你新build的kernel image對不上,這些driver當然起不來…
這應該是Linux的基本常識,重build kernel不能只換kernel image,要連modules一起換

你沒有先做make ARCH=arm64 tegra_defconfig的話根本不知道它是用哪一包config file編出來的
你這個比較完全沒有意義

我做过make ARCH=arm64 tegra_defconfig
然后在make ,只是没有替换模块,我以为那些驱动是静态编译在内核里的,
你的意思是 tegra_defconfig 这个配置编译出来的Image 与 nvbuild.sh 编译出的Image是一致吗?

你隨便看一下就知道很多東西都是=m 不是=y
device driver絕大多數都是build成單獨的.ko檔 不會編進kernel image裡
因為編進kernel image裡的話就算這個driver沒有用到也要整塊load進memory裡 很浪費空間

你要做的就是這一步 沒有那麼複雜

但是有个问题,kernel-5.10目录下有/driver/media/i2c/imx219.c , nvdia目录下有driver/media/i2c/nv_imx219.c 这两个文件内容不一样,这怎么解释呢?因为这样编译出的ko 功能不一样

CONFIG_NV_VIDEO_IMX219=m

你用tegra_defconfig的話就應該是用/nvidia/driver/media/i2c/nv_imx219.c這個檔案
不會是原本kernel source tree裡的

好的 明白了,没想到源码也剥离出去一部分,感谢您的指导

最后一个问题,如何整体替换开发板上的模块呢?在那个目录 不太清楚。。谢谢

build完kernel之後在/kernel/kernel-5.10/做這一步再重燒

sudo make ARCH=arm64 O=$TEGRA_KERNEL_OUT modules_install INSTALL_MOD_PATH=<top>/Linux_for_Tegra/rootfs/

你沒有單獨指定輸出的目錄,而是和source code放在一起的話就把O=$TEGRA_KERNEL_OUT拿掉

你好,我不太懂dtbo这个文件, 我可以只更新开发板上的/boot/dtb/目录下的dtb文件吗?

我在/kernel/kernel-5.10/目录下 make ARCH=arm64 dtbs 生成的dtb 文件和
./nvbuild.sh 命令生成的dtb文件内容不太一样。我想确定设备树到底是用的哪个目录的dts 与dtb文件?
我的目的是在jetpack5.1.1的基础上开发一个imx219驱动,我只需要在原有的镜像基础上,只更换开发板上的/boot/dtb/下的dtb文件, 和 imx219.ko 和Image文件。这样行不行? 其他的dtbo 文件 与 ko文件不替换行不行?
谢谢 回答下

我已經說過不行了 不然開機會報一堆錯
你是不是看不懂…

還有device tree的問題
你自己去看nvbuild.sh就會知道那也只是call make指令而已 不存在什麼兩邊不一樣這種事
如果你不知道我在說什麼就以nvbuild.sh的為準

兄弟 我能听懂你说的一切,我有五年的linux开发经验,只是有些现象确实比较奇怪。我用nvbuild.sh 编译的dtb 与make dtb 编译出的dtb 文件通过dtc 反编译成dts文件 对比确实不一样。
因为source目录下 有好几个目录都有p3768相关dts文件,所以我才觉得它们引用的不同目录下的dts