Enable the integrated Intel IPU6 MIPI camera on Alder Lake (12th Gen)
Modern Intel laptops use MIPI cameras connected through the IPU6 (Imaging Processing Unit 6). On Ubuntu 24.04 with kernels 6.10+, these cameras produce a black screen or aren't detected because:
- The PSYS module isn't in the mainline kernel. Intel considers the hardware ISP interface proprietary and never upstreamed it.
- Ubuntu's libcamera (v0.2.0) doesn't support IPU6. IPU6 support requires libcamera ≥0.3.2, which isn't in the repos.
- The old
icamerasrcstack fails without the out-of-tree PSYS module — "Failed to open PSYS" errors.
This script builds the complete camera stack from Intel's upstream sources.
Browser (Chrome, Brave, Edge)
↑
/dev/video99 ← v4l2loopback virtual camera
↑
GStreamer: icamerasrc → videoconvert → v4l2sink
↑
Intel Camera HAL (libcamhal — userspace ISP)
↑
IPU6 PSYS (out-of-tree) + IPU6 ISYS (mainline)
↑
OV2740 sensor ← IVSC (powers the sensor on/off)
| Platform | PCI IDs | HAL | Status |
|---|---|---|---|
| Alder Lake (12th Gen) | 8086:462e, 8086:465d |
ipu6ep |
✅ Tested |
| Raptor Lake (13th Gen) | 8086:a75d |
ipu6ep |
✅ Should work |
| Tiger Lake (11th Gen) | 8086:9a19 |
ipu6 |
|
| Meteor Lake (12th Gen) | 8086:7d19 |
ipu6epmtl |
→ Use ipu6-camera |
- Lenovo ThinkPad X1 Carbon Gen 12 — Alder Lake, OV2740 (
INT3474), kernel6.17.0-1012-oem, Ubuntu 24.04.4 LTS
git clone https://github.com/Jem256/ipu6-camera.git
cd ipu6-camera
# Optional: check hardware first
sudo ./setup.sh --check
# Install
sudo ./setup.sh
sudo rebootTest at webcamtest.com in Chrome, Brave, or Edge.
| Step | Description | Source |
|---|---|---|
| 1 | Install build deps | Ubuntu repos |
| 2 | Remove conflicting intel-ipu6-dkms |
— |
| 3 | Build IPU6 PSYS module (DKMS + fallback) | intel/ipu6-drivers |
| 4 | Install firmware + ISP libs + create linker symlinks | intel/ipu6-camera-bins |
| 5 | Build Camera HAL (libcamhal) |
intel/ipu6-camera-hal |
| 6 | Build icamerasrc GStreamer plugin |
intel/icamerasrc (icamerasrc_slim_api) |
| 7 | Configure v4l2loopback /dev/video99 + systemd service |
— |
sudo systemctl status ipu6-camera-loopback # Service status
sudo journalctl -u ipu6-camera-loopback -f # Live logs
sudo ./uninstall.sh # Remove everythingCheck IVSC modules (they power the sensor):
lsmod | grep -E "ivsc|mei_vsc"
# Should show: ivsc_ace, ivsc_csi, mei_vsc_hw
# If missing:
sudo modprobe mei_vsc ivsc_ace ivsc_csiThe PSYS module didn't build. Check:
ls /dev/ipu-psys*
cat /var/lib/dkms/ipu6-drivers/0.0.0/build/make.logFirefox Snap can't access v4l2loopback. Use Chrome, Brave, Edge, or install Firefox from .deb.
sudo systemctl edit ipu6-camera-loopbackReplace 1280,height=720 with 1920,height=1080 in both caps, then:
sudo systemctl restart ipu6-camera-loopbackNon-obvious lessons from building this:
-
Linker symlinks are critical.
ipu6-camera-binsshipslibia_aiq-ipu6ep.so.0but the linker needslibia_aiq-ipu6ep.so. Without explicit symlinks, the HAL build fails. -
Pkgconfig needs generic names. CMake expects
ia_imaging.pcbut onlyia_imaging-ipu6ep.pcexists. Symlinks fix this. -
IVSC must load before IPU6. If
ivsc_ace/ivsc_csiload after IPU6 scans for sensors, the camera appears in media topology but stays powered off. -
PCI ID
465dis common but undocumented. Many guides only list462e— the465dvariant (Alder Lake-P) is on ThinkPad X1 Carbon Gen 10/11 and is often missing from detection scripts. -
DKMS often fails on 6.11+. The out-of-tree patches don't apply cleanly. The direct
makefallback builds whatever modules it can.
- achrafsoltani/ipu6-camera — Meteor Lake (USB-IO bridge)
- stefanpartheym/archlinux-ipu6-webcam — Arch Linux
- intel/ipu6-drivers — Intel's upstream source
- Intel — open-source Camera HAL and GStreamer plugin
- Achraf Soltani - Intel IPU6 Camera on Linux: Automated Setup for Meteor Lake Laptops
- Javier Tia — mainline migration documentation
- Launchpad bugs #2125294, #2107304, #2114878
If you've tested this on additional hardware, please open an issue or PR with your laptop model, sensor, and kernel version.
GPL-3.0. See LICENSE. Intel camera binaries are proprietary — see Intel's license.