Hi,
I have been struggling a while to make a Raspberry Pi Camera Module V2 IMX219 working with a Jetson NX on a Quark carrier board. The camera is working, but it depends on the behavior of nvargus_daemon. I have put a terminal log to show the weird behavior : arducam_nvargus.txt (15.1 KB)
Here is all the commands used that sums up this log :
sudo modprobe uvcvideo nodrop=1 timeout=5000
sudo service nvargus-daemon restart
sudo ./main_prog --> doesn't work // launch a gstreamer pipeline to read frames and send them with another pipeline (udpsink)
sudo service nvargus-daemon restart
sudo service nvargus-daemon restart
sudo service nvargus-daemon restart
sudo ./main_prog --> doesn't work
sudo service nvargus-daemon restart
sudo service nvargus-daemon restart
sudo service nvargus-daemon restart
sudo service nvargus-daemon restart
sudo ./main_prog --> doesn't work
sudo service nvargus-daemon restart
sudo ./main_prog --> doesn't work
sudo service nvargus-daemon restart
sudo ./main_prog --> work !
It looks dumb but that’s the only way I found to put the camera to work.
When it doesn’t work, I get this error :
tegra194-vi5 15c10000.vi: no reply from camera processor
tegra194-vi5 15c10000.vi: vi capture get status failed
I have Jetpack 4.6 , R32.6.1 .
Here is my Arducam topic that contains way more information about what I have tried.
I saw that
nvargus-daemon is to get hardware DMA buffers from ISP engine and pass the buffers to upper application
Can you provide me a way/advice or guide on how to prevent this ?
Thank you !
Looks like the can’t capture any frame from sensor and cause the kernel crash.
Apply below patch to fix the kernel crash. Any if can check with any others imx219 camera module would be good to clarify the cable or HW cause the failure.
$diff -u a/drivers/media/platform/tegra/camera/vi/capture.c b/drivers/media/platform/tegra/camera/vi/capture.c
diff: a/drivers/media/platform/tegra/camera/vi/capture.c: No such file or directory
diff: b/drivers/media/platform/tegra/camera/vi/capture.c: No such file or directory
Still can’t find it, please see this set of commands when I try to look for it but didn’t succeed. Looking for this file on the development kit give the same result.
Hi ShaneCCC,
Thank you for your reply,
So i need to download the kernel source on my host PC under the Linux_for_Tegra folder ?
My ~/nvidia/nvidia_sdk/JetPack_4.6_Linux_JETSON_XAVIER_NX_TARGETS/ folder is empty since I deleted all of it’s content because SDKmanager always add issue installing Jetpack SDK components on target device.
If it is on the target device : installing kernel and external kernel sources won’t damage my NX because it has a specific BSP ?
Sorry but I don’t understand, let me try to clarify this :
I need to download kernel source ( and external kernel module ? ) on my host PC → What will this improve on the target device ?
Re reading this topic, he didn’t say that he downloaded the kernel sources and I have the same error message as him.
If kernel sources is needed, why isn’t it natively included ?
I have never modified the kernel so I’m lost here.
Here are the steps that I need to do (correct me if i’m wrong) :
On the NX, download kernel sources while following this section : Obtaining the Kernel Sources with Git (can’t find the file ./source_sync.sh) or Manually Downloading and Expanding Kernel Sources
Follow this section Building the NVIDIA Kernel while skipping step 2.
Will that erase the actual image on the NX ?
Will it work even if it’s a specific BSP : kernel_tegra194-xavier-nx-cti-NGX004-RPI-IMX219-2CAM.dtb ?
I followed the guide that you provided me and build the Linux Kernel on the NX (Which I think it has to be on the host PC), the last step I did was :
$ cd <kernel_source>
$ mkdir -p $TEGRA_KERNEL_OUT
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_defconfig
$ make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j
But now I have to do :
Replace <release_packagep>/Linux_for_Tegra/kernel/Image with a copy of:
$TEGRA_KERNEL_OUT/arch/arm64/boot/Image
And I as mentioned previously, I have deleted my Linux_for_tegra folder on my host PC.
So I can’t continue following this guide.
But,
If you download correct kernel version the replace the /boot/Image only change the kernel.
Will this work if :
(On the NX) I just put the content of $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/ in /boot/ and then replace the image in /boot/Image with $TEGRA_KERNEL_OUT/arch/arm64/boot/Image.