PiCamera3 (IMX708) and J40Header config for PWM Servo on Jetpack6 - Solution

TL;DR Solution at bottom

Background:
I was trying to get the new picamera3(IMX708) working on a jetson orin nano 8gb dev kit and Jetpack6, alongside two pwm servo motors running directly from the j40 headers. I tried a number of different things and struggled to find a solution despite trying various solutions discussed in the forum here. Just sharing my solution here incase anyone else is struggling like I was.
Ultimately here’s what ended up working for me:

1. Install IMX708 drivers:
Arducam has the best driver I found so far, it supports three different modes, where the ridgerun only supports one mode as far as i know. You can follow Arducams quickstart guide here.
Or you can just run the following commands:

cd ~
wget https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.3/install_full.sh
chmod +x install_full.sh
./install_full.sh -m imx708

This will create the folder /boot/arducam that contains the a new kernel image with the drivers, as well as update the /boot/extlinux/extlinux.conf to point to the new kernel image and add the overlay for the IMX708 dtbo file in /boot/arducam/dtb . After rebooting, the IMX708 sensor should be recognized and working.
However any exisiting pin configurations were set back to default for me.

2. Update J40 Pin Headers:
This is the part that I struggled with the most and it drove me insane. I tried updating the pin headers using sudo /opt/nvidia/jetson-io/jetson-io.py but that would always cause the orin nano to no longer recognize the IMX708 sensor which put me back at square one. After digging around in the root file system, I realized that arducam also installs a seperate set of tools to manage io config, which are found at /opt/arducam/jetson-io/jetson-io.py . The nvidia io tool seemed to rewrite the /boot/extlinux/extlinux.conf to point back to the old kernel image under /boot/Image, as opposed to the new image at /boot/arducam/Image . However the arducam io tool was also throwing an error when I saved and rebooted (seemed to remove the IMX708 overlay from the extlinux.conf file). Long Story short, my way around it was to use the /opt/arducam/jetson-io/jetson-io.py to make the pin changes, and save those changes to a new overlay in /boot/arducam/, and then manually edited the /boot/extlinux/extlinux.conf file to append the new overlay after the IMX708 overlay. After saving the extlinux.conf file and rebooting, both the camera and pin changes were working.

TL;DR

  1. Install IMX708 Drivers from Arducam
cd ~
wget https://github.com/ArduCAM/MIPI_Camera/releases/download/v0.0.3/install_full.sh
chmod +x install_full.sh
./install_full.sh -m imx708
  1. Edit Pin Headers using arducam io tool
sudo /opt/arducam/jetson-io/jetson-io.py

IMPORTANT, do not click save and reboot after making changes, instead click the option to export as device tree overlay. Copy the overlay filepath it gives you to your clipboard

  1. Edit /boot/extlinux/extlinux.conf to append overlay
    At the bottom of the file you should see where the IMX708 overlay is. Add a comma and paste the additional overlay

  2. Reboot

2 Likes