在Jetson Orin Nano中,我首先执行了这个命令:sudo dmesg |grep -i kernel ,得到的日志信息如下:
[sudo] password for nvidia-user:
[ 0.000000] CPU features: kernel page table isolation forced ON by KASLR
[ 0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[ 0.000000] alternatives: patching kernel code
[ 0.000000] Kernel command line: root=PARTUUID=3885645a-97fd-4160-96e0-0286f0210613 rw rootwait rootfstype=ext4 mminit_loglevel=4 console=ttyTCU0,115200 console=ttyAMA0,115200 firmware_class.path=/etc/firmware fbcon=map:0 net.ifnames=0 nospectre_bhb
[ 0.000000] Memory: 7375292K/8136832K available (18304K kernel code, 3208K rwdata, 7092K rodata, 3904K init, 1447K bss, 499396K reserved, 262144K cma-reserved)
[ 0.002956] DTS File Name: /dvs/git/dirty/git-master_linux/kernel/kernel-5.10/arch/arm64/boot/dts/../../../../../../hardware/nvidia/platform/t23x/p3768/kernel-dts/tegra234-p3767-0003-p3768-0000-a0.dts
[ 0.216108] DMA: preallocated 1024 KiB GFP_KERNEL pool for atomic allocations
[ 0.216174] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[ 0.216230] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[ 0.257211] eventlib_kernel: keventlib is initialized, test id: 0
[ 1.931309] Loaded X.509 cert 'Build time autogenerated kernel key: 9d0e915459018d8c252c1d5b7ab6c24caeb6a5f8'
[ 3.904461] Freeing unused kernel memory: 3904K
[ 6.106036] systemd[1]: Listening on udev Kernel Socket.
[ 6.331679] systemd[1]: Mounting Kernel Debug File System...
[ 6.419576] systemd[1]: Mounting Kernel Trace File System...
[ 6.657791] systemd[1]: Starting Create list of static device nodes for the current kernel...
[ 6.755983] systemd[1]: Starting Load Kernel Module chromeos_pstore...
[ 6.822007] systemd[1]: Condition check resulted in Load Kernel Module drm being skipped.
[ 6.823766] systemd[1]: Starting Load Kernel Module efi_pstore...
[ 6.887625] systemd[1]: Starting Load Kernel Module pstore_blk...
[ 6.960073] systemd[1]: Starting Load Kernel Module pstore_zone...
[ 7.028043] systemd[1]: Starting Load Kernel Module ramoops...
[ 7.334659] systemd[1]: Starting Load Kernel Modules...
[ 7.396244] systemd[1]: Starting Remount Root and Kernel File Systems...
[ 7.698534] nvgpu: module verification failed: signature and/or required key missing - tainting kernel
[ 10.583713] nvidia: loading out-of-tree module taints kernel.
[ 10.723165] NVRM: loading NVIDIA UNIX Open Kernel Module for aarch64 35.4.1 Release Build (user@ubuntu) Wed 15 Nov 2023 05:48:51 PM PST
[ 22.730249] nvidia-modeset: Loading NVIDIA UNIX Open Kernel Mode Setting Driver for aarch64 35.4.1 Release Build (user@ubuntu) Wed 15 Nov 2023 05:48:52 PM PST
可以看出,我的内核执行的摄像头设备树文件是:
DTS File Name:tegra234-p3767-0003-p3768-0000-a0.dts
该文件在Linux_for_Tegra中的路径是:
Linux_for_Tegra/source/public/hardware/nvidia/platform/t23x/p3768/kernel-dts
通过查看该dtsi文件中的头文件包含,我们可以看到:
tegra234-p3767-0003-p3768-0000-a0.dts 文件中包含了 tegra234-p3767-0000-p3768-0000-a0.dts
tegra234-p3767-0000-p3768-0000-a0.dts 文件中包含了 cvb/tegra234-p3768-0000-a0.dtsi
tegra234-p3768-0000-a0.dtsi 文件中包含了imx219和imx477的设备树dtsi文件:
tegra234-p3768-camera-rbpcv2-imx219.dtsi
tegra234-p3768-camera-rbpcv3-imx477.dtsi
因此我认为,当我注释掉#include “tegra234-p3768-camera-rbpcv2-imx219.dtsi”,并重新编译烧录后
在Jetson Orin Nano 模块上应该不再支持imx219摄像头驱动,即使有驱动文件编译出的imx219.ko文件。
因为已经没有imx219的设备树节点了
但是当我连接上imx219摄像头后,执行nvgstcapture-1.0命令,摄像头依然在正常工作,当我执行命令后:
sudo dmesg |grep -i imx219
显示的内核日志打印信息如下:
nvidia-user@tegra-ubuntu:~$ sudo dmesg |grep -i imx219
[sudo] password for nvidia-user:
[ 11.964824] imx219 9-0010: probing v4l2 sensor at addr 0x10
[ 11.965124] imx219 9-0010: tegracam sensor driver:imx219_v2.0.6
[ 11.975961] imx219 9-0010: imx219_board_setup: error during i2c read probe (-121)
[ 11.981121] imx219 9-0010: board setup failed
[ 11.990916] imx219: probe of 9-0010 failed with error -121
[ 11.992787] imx219 10-0010: probing v4l2 sensor at addr 0x10
[ 11.993034] imx219 10-0010: tegracam sensor driver:imx219_v2.0.6
[ 12.009325] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx219 10-0010 bound
[ 12.069151] imx219 10-0010: detected imx219 sensor
这似乎表示内核仍然在执行imx219的驱动程序,于是我执行了这个命令查看设备绑定情况:
sudo media-ctl -p -d /dev/media0
显示的日志如下:
nvidia-user@tegra-ubuntu:~$ sudo media-ctl -p -d /dev/media0
Media controller API version 5.10.120
Media device information
------------------------
driver tegra-camrtc-ca
model NVIDIA Tegra Video Input Device
serial
bus info
hw revision 0x3
driver version 5.10.120
Device topology
- entity 1: 13e40000.host1x:nvcsi@15a00000- (2 pads, 0 link)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev0
pad0: Sink
pad1: Source
- entity 4: 13e40000.host1x:nvcsi@15a00000- (2 pads, 2 links)
type V4L2 subdev subtype Unknown flags 0
device node name /dev/v4l-subdev1
pad0: Sink
<- "imx219 10-0010":0 [ENABLED]
pad1: Source
-> "vi-output, imx219 10-0010":0 [ENABLED]
- entity 7: imx219 10-0010 (1 pad, 1 link)
type V4L2 subdev subtype Sensor flags 0
device node name /dev/v4l-subdev2
pad0: Source
[fmt:SRGGB10_1X10/3280x2464 field:none colorspace:srgb]
-> "13e40000.host1x:nvcsi@15a00000-":0 [ENABLED]
- entity 9: vi-output, imx219 10-0010 (1 pad, 1 link)
type Node subtype V4L flags 0
device node name /dev/video0
pad0: Sink
<- "13e40000.host1x:nvcsi@15a00000-":1 [ENABLED]
这似乎表示当前的Jetson Orin Nano设备仍然绑定的是imx219
那么问题来了:如果我想更改Jetson Orin Nano设备的port bind应该怎么做?
比如说,我想让设备绑定imx477摄像头,从而让内核能够执行imx477的相关程序,打印相关日志信息