5

I try to get the webcam on a XPS 14 9440 on Ubuntu 23.10 to work. Since the notebook is Meteor Lake based, I've to use a current kernel (>= 6.7) to get proper Meteor Lake support. I use 6.8 mainline kernel.

$ uname -a
Linux christoph-XPS-14-9440 6.8.1-060801-generic #202403151937 SMP PREEMPT_DYNAMIC Fri Mar 15 19:52:22 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Unfortunately there are no prebuild IPU6 drivers available for kernels >= 6.7, because there are at this point in time (29. March 2024) open PRs (https://github.com/intel/ivsc-driver/pull/44, https://github.com/intel/ipu6-drivers/pull/213) that are required to make them work on current kernels.

How can i get the drivers properly working?
It's totally confusing for me what all the things do and how they work together to get the webcam working. I mainly just followed the readmes without much knowledge how everything is connected. So while ipu6 are the actual drivers, what is icamera, IPU6 HAL and how is it all connected to Gstreamer to get the webcam work in applications?

So I tried to compile it on my own and it worked successfully with the ipu6-drivers (incl. ivsc-driver). They are compiled and loaded successfully, as far as i can see.

$ sudo dmesg | grep ipu6
[    2.930531] intel_ipu6: loading out-of-tree module taints kernel.
[    2.930538] intel_ipu6: module verification failed: signature and/or required key missing - tainting kernel
[    2.952118] intel-ipu6 0000:00:05.0: enabling device (0000 -> 0002)
[    2.953006] intel-ipu6 0000:00:05.0: Device 0x7d19 (rev: 0x4)
[    2.953039] intel-ipu6 0000:00:05.0: physical base address 0x5a2c000000
[    2.953043] intel-ipu6 0000:00:05.0: mapped as: 0x00000000dd7e4357
[    2.953110] intel-ipu6 0000:00:05.0: IPU in secure mode
[    2.953114] intel-ipu6 0000:00:05.0: IPU secure touch = 0x80000000
[    2.953115] intel-ipu6 0000:00:05.0: IPU camera mask = 0x0
[    2.964890] intel-ipu6 0000:00:05.0: IPC reset done
[    2.964895] intel-ipu6 0000:00:05.0: cpd file name: intel/ipu6epmtl_fw.bin
[    3.029032] intel-ipu6 0000:00:05.0: FW version: 20230925
[    3.053964] intel-ipu6 0000:00:05.0: Found supported sensor OVTI02C1:00
[    3.054199] intel-ipu6 0000:00:05.0: Connected 1 cameras
[    3.055424] intel-ipu6 0000:00:05.0: Sending BOOT_LOAD to CSE
[    3.090594] intel-ipu6 0000:00:05.0: Sending AUTHENTICATE_RUN to CSE
[    3.137096] intel-ipu6 0000:00:05.0: CSE authenticate_run done
[    3.137135] intel-ipu6 0000:00:05.0: IPU6-v4 driver version 1.0
[    4.221346] intel-ipu6-psys intel-ipu6-psys0: pkg_dir entry count:8
[    4.223677] intel-ipu6-psys intel-ipu6-psys0: psys probe minor: 0
$ lsmod | grep ipu6
intel_ipu6_isys       159744  0
videobuf2_dma_contig    24576  1 intel_ipu6_isys
videobuf2_v4l2         40960  1 intel_ipu6_isys
videobuf2_common       86016  4 videobuf2_dma_contig,videobuf2_v4l2,intel_ipu6_isys,videobuf2_memops
intel_ipu6_psys       110592  0
v4l2_fwnode            40960  2 ov02c10,intel_ipu6_isys
v4l2_async             28672  3 v4l2_fwnode,ov02c10,intel_ipu6_isys
videodev              364544  5 v4l2_async,v4l2_fwnode,videobuf2_v4l2,ov02c10,intel_ipu6_isys
intel_ipu6            122880  2 intel_ipu6_isys,intel_ipu6_psys
mc                     86016  7 v4l2_async,videodev,snd_usb_audio,videobuf2_v4l2,ov02c10,intel_ipu6_isys,videobuf2_common

However, as far as I understand I've to additionally compile ipu6-camera-hal including icamerasrc (https://github.com/intel/ipu6-drivers) to get the webcam actually working in applications (Google Chrome would be most important for me).
I cloned https://github.com/intel/ipu6-camera-hal and placed it beside the icamerasrc_slim_api branch of the icamera repo as it's mentioned in the readme.

#from readme https://github.com/intel/ipu6-camera-hal?tab=readme-ov-file#build-instructions

cp build.sh .. && cd ..

work

├── build.sh

├── icamerasrc

├── ipu6-camera-hal

└── out

$ ls
build.sh  icamerasrc  ipu6-camera-hal  out

When I now try to run build.sh it seems to successfully build ipu6-camera-hal but fails on icamerasrc.

mv -f .deps/libgsticamerasrc_la-gstcampushsrc.Tpo .deps/libgsticamerasrc_la-gstcampushsrc.Plo
utils.cpp: In function 'gboolean CameraSrcUtils::gst_video_info_from_dma_drm_caps(GstVideoInfo*, const GstCaps*)':
utils.cpp:361:8: error: 'gst_video_is_dma_drm_caps' was not declared in this scope; did you mean 'gst_video_info_from_caps'?
  361 |   if (!gst_video_is_dma_drm_caps(caps)) {
      |        ^~~~~~~~~~~~~~~~~~~~~~~~~
      |        gst_video_info_from_caps
utils.cpp:366:5: error: 'GstVideoInfoDmaDrm' was not declared in this scope; did you mean 'GstVideoInfo'?
  366 |     GstVideoInfoDmaDrm drm_info;
      |     ^~~~~~~~~~~~~~~~~~
      |     GstVideoInfo
utils.cpp:367:44: error: 'drm_info' was not declared in this scope; did you mean 'g_info'?
  367 |     if (!gst_video_info_dma_drm_from_caps(&drm_info, caps)) {
      |                                            ^~~~~~~~
      |                                            g_info

I had similar issues before, but for them I could find missing packages that I had to install to provide the missing libs. But in that case I can't find how to solve it.

4 Answers4

0

Ran into the same today. Make sure you did what is in the instructions (at least today)

sudo apt install libexpat-dev automake libtool libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libdrm-dev

I had to add

sudo apt install libva-dev libgstreamer-plugins-bad1.0-dev 

as well (not in the instructions) I got all to compile fine (Ubuntu 24.04 with mainline installed and kernel 6.9.2, compiled against that kernel )

0

IPU6 drivers has been part of kernel since 6.10. So instead of building the drivers yourself you can upgrade to newer kernel (6.10 or higher).

I'm not aware if currently released Ubuntu versions provide the kernel, but you can try two things:

  1. sudo apt install linux-oem-24.04: in this command you may need to replace the -24.04 part to your distro version (because apparently Canonical didn't provide a meta-package linux-oem that would point to latest kernel, so it has to be done explicitly). What this kernel is: Canonical backports some drivers to OEM version of kernel, and it's possible they might have ported IPU6. Worth a try.
  2. Canonical also provides downloadable packages for all kernel versions, which can be installed through these instructions.
Hi-Angel
  • 4,810
0

(or those who might still looking for an answer, at least for the XPS 9640, it might work for 9440 as well, although only in 720p):

Following this Reddit thread: https://www.reddit.com/r/DellXPS/comments/1b9ddhz/does_the_xps_16_intel_ultra_7_support_linux/

The steps are:

  1. sudo apt install linux-modules-ipu6-generic
  2. sudo add-apt-repository ppa:oem-solutions-group/intel-ipu6
  3. sudo apt update
  4. sudo apt install libcamhal0 libcamhal-ipu6ep0 gstreamer1.0-icamera v4l2-relayd
  5. Go to "Additional drivers" → under "Intel corporation" → check / enable "Using HAL library for MIPI camera..."
  6. Reboot

These steps are working with Ubuntu 24.04/24.10 (I recommend 24.10. I did not succeed with other distros. Also, it won't work if you are not using the default kernel in Ubuntu).

I know that theoretically, IPU drivers are included in kernel >6.10, but they are not enough for these webcam sensors that are included in the newer Dell laptops.

0

I finally found out how to get this working! Based on this reddit post, which is based on this github comment.

sudo apt install linux-modules-ipu6-6.11.0-1012-oem

sudo add-apt-repository ppa:oem-solutions-group/intel-ipu6

sudo apt update

sudo apt install libcamhal0 libcamhal-ipu6ep0 gstreamer1.0-icamera v4l2-relayd

Go to "Additional drivers" → under "Intel corporation" → check / enable "Use Dynamic loading plugin for IPU6 camera..."

Reboot

goto https://webcamtests.com/check to verify your webcam works.

The only difference from @Szilárd Molnár answer is the linux-modules-ipu6-6.11.0-1012-oem.