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.
 
     
     
     
    