【无标题】

Huawei MateBook (ENZH-XX) IPU6 摄像头在Archlinux中无法使用的排查报告

日期 :2026-05-19
修订 :v2(补充根因分析、修正因果链、完善解决方案)
系统 :Arch Linux,内核 7.0.8-arch1-1
硬件:Huawei MateBook C500 (ENZH-XX),Intel Meteor Lake


1. 现象

笔记本电脑内置摄像头在所有应用程序中不可用,无法采集图像。libcamera、GStreamer 等工具均无法检测到摄像头传感器。


2. 排查过程

2.1 视频设备枚举

系统存在 48 个 /dev/video 设备(video0 ~ video47),均由 IPU6 驱动注册:

复制代码
$ v4l2-ctl --list-devices
ipu6 (PCI:0000:00:05.0):
    /dev/video0  ~  /dev/video47
    /dev/media0

说明:48 个视频设备节点是 IPU6 ISYS 的正常行为(6 个 CSI-2 接口 × 8 个 Capture 节点),不代表有 48 个摄像头。

2.2 硬件与驱动确认

PCI 设备信息确认了 IPU6 硬件和驱动绑定:

复制代码
$ lspci -k -s 00:05.0
00:05.0 Multimedia controller: Intel Corporation Meteor Lake IPU (rev 04)
    Subsystem: Huawei Technologies Co., Ltd. Device 3e72
    Kernel driver in use: intel-ipu6
    Kernel modules: intel_ipu6

关键内核模块已加载:

模块 用途
intel_ipu6 IPU6 基础驱动
intel_ipu6_isys ISYS(图像接收子系统)驱动
ipu_bridge IPU ACPI/PCI 桥接层

2.3 摄像头传感器检测

ACPI 设备表中检测到三个摄像头传感器实体:

复制代码
$ ls /sys/bus/acpi/devices/ | grep -iE 'cam|ov|hi|imx|sensor|video'
OVTI01AS:00   # OV01A1S 传感器(IR/辅助摄像头)
OVTI01AS:01   # OV01A1S 传感器(IR/辅助摄像头)
OVTI13B1:00   # OV13B10 传感器(主摄像头)

ACPI 设备状态码均为 0(未激活状态) 。正常情况下应为 15(0x0F,表示设备存在、启用、工作正常)。

复制代码
$ cat /sys/bus/acpi/devices/OVTI*/status
0
0
0

关键发现 :ACPI status=0 意味着固件层面就没有激活这些设备,ipu_bridge 在枚举时会跳过 status=0 的设备,不会为它们创建 I2C 客户端。这是整个问题链的起点。

2.4 驱动模块匹配验证

传感器驱动模块存在于磁盘,但未自动加载:

复制代码
$ find /lib/modules/7.0.8-arch1-1 -name "*ov01a*" -o -name "*ov13b*"
.../ov01a10.ko.zst    # 仅支持 ACPI ID: OVTI01AB, OVTI01A0
.../ov13b10.ko.zst    # 支持 ACPI ID: OVTI13B1, OMNI13B1, OVTIDB10

modinfo 查明:

  • ov13b10 模块的 alias 包含 OVTI13B1------与 ACPI 设备匹配
  • ov01a10 模块的 alias 仅包含 OVTI01ABOVTI01A0------与 ACPI 中的 OVTI01AS 不匹配

补充说明 :OV01A1S 和 OV01A10 是两颗不同的传感器。ACPI ID OVTI01AS 对应的是 OV01A1S,其内核驱动应为 ov01a1s(如果存在)。建议额外检查:

复制代码
find /lib/modules/$(uname -r) -name "*ov01a1s*"

2.5 驱动手动加载尝试

复制代码
$ sudo modprobe ov13b10    # 无报错
$ sudo modprobe ivsc-csi   # IVSC CSI 桥接驱动
$ sudo modprobe ivsc-ace   # IVSC ACE 桥接驱动

加载后 lsmod 显示模块均被加载但 Used by: 0,即没有任何设备绑定到这些驱动

复制代码
ov13b10    28672  0
ivsc_ace   16384  0
ivsc_csi   16384  0

分析 :驱动加载成功但无设备绑定,原因不是驱动本身有问题,而是上游的 ipu_bridge 没有为 ACPI 设备创建 I2C 客户端设备。没有 I2C 设备,驱动自然无处绑定。

2.6 I2C 设备检查

复制代码
$ ls /sys/bus/i2c/devices/ | grep -i ov
# 无输出

正常情况下应能看到 i2c-OVTI13B1:00 等设备。I2C 总线上完全没有摄像头传感器设备,进一步证实 ipu_bridge 未能创建 I2C 客户端。

2.7 媒体管道拓扑检查

media-ctl -d /dev/media0 -p 显示管道仅包含 20 个 ISYS Capture 节点和 6 个 CSI2 接收器实体,没有传感器实体连接到 CSI2 端口的 source pad。CSI2 端口的所有 sink pad 均为空闲状态。

复制代码
- entity  1: Intel IPU6 ISYS Capture 0  → CSI2 0:1 [未连接任何传感器]
- entity 33: Intel IPU6 ISYS Capture 8  → CSI2 1:1 [未连接任何传感器]
...

2.8 内核日志分析

IPU6 启动日志显示相机控制器处于 Secure Mode(安全模式):

复制代码
kernel: intel-ipu6 0000:00:05.0: Sending BOOT_LOAD to CSE
kernel: intel-ipu6 0000:00:05.0: Sending AUTHENTICATE_RUN to CSE
kernel: intel-ipu6 0000:00:05.0: CSE authenticate_run done
kernel: intel-ipu6 0000:00:05.0: IPU6-v4[7d19] hardware version 6
kernel: intel-ipu6 0000:00:05.0: IPU6 in secure mode

日志中没有任何传感器驱动 probe 的记录 (ov13b10、ov01a10 均无),也没有 ipu_bridge 的错误信息------属于静默失败。

对比 :正常工作的设备日志中应有类似 Found supported sensor OVTI13B1:00Connected X cameras 的输出。

2.9 固件文件确认

Meteor Lake IPU6 固件已存在:

复制代码
$ ls /lib/firmware/intel/ipu/ipu6epmtl*
/lib/firmware/intel/ipu/ipu6epmtl_fw.bin.zst

2.10 ISP(图像信号处理)驱动排查

IPU6 内核模块目录中仅包含 ISYS(图像接收)模块,缺少 PSYS(处理系统 / ISP)模块:

复制代码
$ ls /lib/modules/$(uname -r)/kernel/drivers/media/pci/intel/ipu6/
intel-ipu6-isys.ko.zst   intel-ipu6.ko.zst
# PSYS 模块缺失

find 全量搜索也确认了 PSYS 模块不存在。

说明:PSYS 模块负责图像后处理(ISP),主线内核尚未包含此模块。它与传感器发现失败是两个独立问题------即使有 PSYS,传感器仍然无法被发现。但要让摄像头最终可用,PSYS 也是必需组件之一。

2.11 libcamera 测试

安装 libcamera 后进行摄像头枚举,确认了传感器无法访问:

复制代码
$ cam -l
INFO Camera camera_manager.cpp:340 libcamera v0.7.1
INFO SimplePipeline simple.cpp:1899 No sensor found for /dev/media0
Available cameras:    # 无可用摄像头

2.12 IVSC 固件检查

Intel Vision Sensing Controller(IVSC)是传感器和 IPU6 之间的关键中间层,在 Secure Mode 下负责代理传感器通信。需要验证 IVSC 固件是否已安装。

内核模块加载确认(ivsc-csi / ivsc-ace 已手动加载,见 2.5),但内核日志中没有任何 IVSC 的硬件交互日志(probe、firmware load 等),仅记录了 modprobe 命令的执行:

复制代码
$ journalctl --no-pager | grep -i ivsc
5月 19 18:59:24 archlinux sudo[424132]: COMMAND=/usr/bin/modprobe ivsc-csi
5月 19 18:59:24 archlinux sudo[424136]: COMMAND=/usr/bin/modprobe ivsc-ace

固件文件检查显示 IVSC 固件已随 linux-firmware 包安装,位于 /lib/firmware/intel/vsc/

复制代码
$ ls /lib/firmware/intel/vsc/ | grep -i ovti
ivsc_pkg_ovti01a0_0.bin.zst            # OV01A10 传感器固件
ivsc_pkg_ovti01af_0.bin.zst            # OV01A1F 传感器固件
ivsc_pkg_ovti01as_0.bin.zst            # OV01A1S 传感器固件 ✓
ivsc_pkg_ovti02c1_0.bin.zst            # OV02C10 传感器固件
ivsc_pkg_ovti02e1_0.bin.zst            # OV02E10 传感器固件
ivsc_pkg_ovti2740_0.bin.zst            # OV2740 传感器固件
...

关键发现 :IVSC 固件列表中有 **OVTI01AS(OV01A1S)的传感器固件,对应辅助/IR 摄像头。但 没有 OVTI13B1(OV13B10)**的固件,即主摄像头传感器缺少 IVSC 固件支持。linux-firmware 包当前收录的 IVSC 传感器固件不包含这颗传感器。

此外,ivsc-csiivsc-ace 模块加载后 Used by: 0(见 2.5),且内核日志中没有 IVSC 的 probe 记录,说明 IVSC 也可能受 ACPI status=0 影响而未能初始化。


3. 问题根因

3.1 核心问题:ACPI 设备未激活(status=0)

所有摄像头传感器的 ACPI 设备状态码为 0,表示固件层面认为设备未启用。这导致:

复制代码
ACPI 设备 status=0(固件未激活传感器)
  → ipu_bridge 枚举时跳过 status=0 的设备
    → 不创建 I2C 客户端设备
      → 传感器驱动 ov13b10 无处绑定(Used by: 0)
        → 媒体管道中无传感器实体
          → libcamera / 应用层无法获取摄像头

这个问题在 Huawei MateBook Pro(VGHH-XX)上被完整复现,症状完全一致:同样的 ACPI status=0、同样没有 I2C 设备、同样的 ipu_bridge 静默失败。该 issue 目前仍未解决。

3.2 可能的根本原因(按可能性排序)

华为的 ACPI 固件实现可能存在以下问题(当前数据支持多因素叠加的判断):

  1. ACPI _STA 方法实现异常(最可能) :设备的 _STA 方法可能依赖特定条件(如检测到 Windows OS、特定驱动已加载等)才返回 0x0F(启用),在 Linux 下返回 0x00(未激活)。这是 status=0 最直接的解释,也符合 Huawei MateBook Pro(VGHH-XX)复现相同症状的特征。

  2. 主摄像头(OV13B10)缺少 IVSC 固件(直接障碍)linux-firmware 中的 IVSC 传感器固件列表不包含 OV13B10(现有 ovti01as、ovti2740 等 9 颗传感器,缺 ovti13b1)。即使 ACPI status 问题解决,如果 IVSC 在 Secure Mode 下负责传感器初始化握手,缺少固件仍会导致 OV13B10 无法被识别。这是区别于辅助摄像头 OV01A1S(固件已存在)的新发现。

  3. SSDB(Sensor Static Database)格式不兼容ipu_bridge 解析 ACPI _DSD 方法中的 SSDB 数据结构来获取传感器属性(I2C 地址、port、CSI lane 数等)。华为的 SSDB 格式可能与 Intel 参考实现有差异,导致 ipu_bridge 即使枚举到设备也无法正确创建 I2C 客户端。此问题区别于 status=0------前者决定设备是否被枚举,后者决定枚举后如何配置。

  4. 缺少厂商特定的 quirk 补丁ipu_bridge 对 Dell、Lenovo 等厂商有特殊处理逻辑(如 SSDB 格式适配、power sequencing 时序调整),华为尚未被覆盖。需要在驱动层面添加针对华为的 quirk。

3.3 Secure Mode 的影响

IPU6 处于 Secure Mode 下运行,这意味着:

  • 传感器与 IPU6 之间的通信由 CSE(Converged Security Engine)固件代理
  • 标准的内核 I2C 驱动无法直接与传感器通信
  • 需要 Intel 专有的用户态 HAL(Camera HAL)配合 PSYS 驱动才能完成图像采集和处理

但需要明确:Secure Mode 本身并不必然导致摄像头不可用。其他 Meteor Lake 笔记本(如 Dell 16 Pro、Dell XPS 16)同样处于 Secure Mode,通过安装完整的 Intel 驱动栈后摄像头可以正常工作。华为的特殊之处在于 ACPI 层面的兼容性问题。

3.4 PSYS 驱动缺失(独立问题)

主线内核不包含 IPU6 PSYS 模块。PSYS 负责图像信号处理(ISP),即使传感器能被发现,没有 PSYS 也无法完成从 RAW Bayer 数据到可用图像的转换。此问题可通过安装 intel-ipu6-dkms-git 包解决。

3.5 次要问题

  • 辅助摄像头 OV01A1S(ACPI ID: OVTI01AS)没有匹配的内核驱动模块。现有 ov01a10 仅支持 OVTI01AB/OVTI01A0,与 OVTI01AS 不匹配。需要 ov01a1s 驱动,可能需要额外的内核补丁或 DKMS 模块。

4. 解决方案与建议

方案 A:安装完整的 Intel IPU6 驱动栈(推荐尝试)

参考 Dell 16 Pro 等机型的成功案例,完整的软件栈包含以下组件:

包名 用途
intel-ipu6-dkms-git 内核驱动(含 PSYS 模块)
intel-ipu6-camera-bin Intel 摄像头二进制文件
intel-ipu6-camera-hal-git 用户态 HAL(注意:不要用 EP 版本
icamerasrc-git GStreamer 插件
intel-ivsc-firmware IVSC 固件(关键,可能是解锁传感器的前提
v4l2loopback-dkms 虚拟摄像头设备,供浏览器使用

安装步骤

bash 复制代码
# 1. 安装内核驱动和固件
yay -S intel-ipu6-dkms-git intel-ipu6-camera-bin intel-ivsc-firmware

# 2. 重启,让 DKMS 驱动和 IVSC 固件生效
sudo reboot

# 3. 重启后检查传感器是否出现
dmesg | grep -iE "ipu6|ivsc|ov13b|sensor"
media-ctl -d /dev/media0 -p | grep ov13b
ls /sys/bus/i2c/devices/ | grep -i ov

# 4. 如果传感器出现,继续安装 HAL 和 GStreamer 插件
yay -S intel-ipu6-camera-hal-git

# 5. 安装 icamerasrc(可能需要手动修改依赖名)
git clone https://aur.archlinux.org/icamerasrc-git.git
cd icamerasrc-git
sed -i "s/'ipu6-camera-hal'/'intel-ipu6-camera-hal-git'/" PKGBUILD
makepkg -si

# 6. 安装虚拟摄像头
yay -S v4l2loopback-dkms

配置步骤

bash 复制代码
# 设置 HAL 配置目录(Meteor Lake)
echo 'CAMHAL_PROFILE_DIR=/etc/camera/ipu6epmtl' | sudo tee -a /etc/environment

# PSYS 设备权限
sudo tee /etc/udev/rules.d/71-ipu6-camhal.rules << 'EOF'
SUBSYSTEM=="intel-ipu6-psys", GROUP="video", MODE="0660"
EOF
sudo usermod -aG video $USER
sudo udevadm control --reload-rules

# 禁用 WirePlumber 中的 libcamera(避免绿屏/花屏)
mkdir -p ~/.config/wireplumber/wireplumber.conf.d
tee ~/.config/wireplumber/wireplumber.conf.d/50-disable-libcamera.conf << 'EOF'
wireplumber.settings = {
  device.disabled = false
}

monitor.libcamera.rules = [
  {
    matches = [ { device.name = "~libcamera.*" } ]
    actions = { update-props = { device.disabled = true } }
  }
]
EOF

# v4l2loopback 配置
echo 'options v4l2loopback exclusive_caps=1 card_label="Virtual Camera" video_nr=99' | sudo tee /etc/modprobe.d/v4l2loopback.conf
echo 'v4l2loopback' | sudo tee /etc/modules-load.d/v4l2loopback.conf

测试

bash 复制代码
# 直接预览测试
CAMHAL_PROFILE_DIR=/etc/camera/ipu6epmtl gst-launch-1.0 icamerasrc ! videoconvert ! autovideosink

# 输出到虚拟摄像头(供浏览器使用)
CAMHAL_PROFILE_DIR=/etc/camera/ipu6epmtl gst-launch-1.0 icamerasrc ! videoconvert ! video/x-raw,format=YUY2,width=1280,height=960 ! v4l2sink device=/dev/video99

预期效果与风险

此方案在 Dell 16 Pro、Dell XPS 16 等机型上已验证成功。但华为的 ACPI 兼容性问题可能导致即使安装完整驱动栈,传感器仍无法被发现。关键观察点是第 3 步 ------如果重启后 dmesg 和 I2C 设备列表中仍然没有传感器出现,说明问题出在 ACPI/固件层面,软件栈无法绕过。

方案 B:导出 ACPI 表并提交 Bug Report(推荐配合方案 A)

如果方案 A 的第 3 步失败(传感器仍未出现),需要收集 ACPI 信息推动上游修复:

bash 复制代码
# 导出 ACPI 表
sudo acpidump > acpi.dat
acpixtract -a acpi.dat
iasl -d *.dat

# 重点查看 DSDT 和 SSDT 中的 OVTI13B1 和 OVTI01AS 定义
grep -l "OVTI13B1\|OVTI01AS" *.dsl
# 检查 _STA 方法和 SSDB 数据

将收集到的信息提交到 intel/ipu6-drivers #399,该 issue 跟踪的是同平台华为 MateBook Pro(VGHH-XX)的完全相同问题。补充你的硬件型号(ENZH-XX)和 ACPI dump 数据,有助于开发者判断是否为华为全系列的通病,并制定 quirk 补丁。

方案 C:使用外接 USB 摄像头(当前最可靠)

USB 摄像头遵循 UVC 标准,由内核 uvcvideo 驱动直接支持,即插即用。这是目前唯一稳定可用的方案。

方案 D:检查 BIOS 设置

进入 BIOS 检查是否有以下选项:

  • Camera Enable / Intel Camera 开关
  • IPU6 模式选择(Secure / Non-secure)
  • ACPI OS Selection 相关选项

注意:根据 GitHub issue #399 的反馈,Huawei MateBook Pro 的 BIOS 中 Camera Enable 已开启,但 ACPI status 仍为 0,此方案大概率无效。不过华为不同型号的 BIOS 实现可能有差异,仍然值得检查。

方案 E:尝试内核启动参数(低概率)

部分笔记本的 ACPI 设备激活依赖操作系统识别:

bash 复制代码
# 在 GRUB 中添加内核参数
acpi_osi="Windows 2022"

在 Huawei MateBook Pro(VGHH-XX)上已测试无效,但不同型号和 BIOS 版本可能有不同结果。


5. 已知同类问题

机型 平台 传感器 状态 参考
Huawei MateBook Pro (VGHH-XX) Meteor Lake OV13B10 + OV01A1S 未解决,ACPI status=0 ipu6-drivers #399
Dell 16 Pro Meteor Lake OV08X40 已解决,完整驱动栈方案 Arch Gist
Dell XPS 9320 Alder Lake OV01A10 已解决,intel-ivsc-firmware + libcamera Arch Forums
Dell Pro Max 14 Meteor Lake --- INT3472 初始化失败 ipu6-drivers #417

6. 系统信息汇总

项目 详情
笔记本型号 Huawei ENZH-XX (C500)
CPU 平台 Intel Meteor Lake
IPU 型号 IPU6-v4 (硬件版本 6)
IPU 工作模式 Secure Mode
主摄像头传感器 OV13B10 (ACPI: OVTI13B1)
辅助摄像头传感器 OV01A1S × 2 (ACPI: OVTI01AS)
ACPI 设备状态 全部为 0(未激活)
I2C 设备 无摄像头设备
内核版本 7.0.8-arch1-1
IPU6 固件 ipu6epmtl_fw.bin.zst (已安装)
IVSC 固件 已安装(OV01A1S 有,OV13B10 缺失
ISYS 驱动 intel-ipu6-isys (已加载)
PSYS 驱动 缺失(主线内核不含)
IVSC 驱动 ivsc-ace / ivsc-csi (已加载,Used by: 0)
传感器驱动 ov13b10 (已加载但未绑定)
libcamera 0.7.1 (已安装,无法检测摄像头)
摄像头可用性 不可用

7. 下一步行动

优先级 行动 预期结果
P0 安装 intel-ivsc-firmware,重启后检查传感器状态 确认 IVSC 固件是否是传感器激活的前提
P0 安装完整 Intel 驱动栈(方案 A) 如果 IVSC 固件生效,摄像头可能直接可用
P1 导出 ACPI DSDT/SSDT 表,分析 OVTI13B1 的 _STA 方法和 SSDB 数据 确认华为 ACPI 实现的具体问题
P1 在 GitHub ipu6-drivers #399 补充 ENZH-XX 机型信息和 ACPI dump 推动上游开发者增加华为支持
P2 短期使用 USB 摄像头作为替代 立即满足视频会议等业务需求
P3 持续跟踪 ipu_bridgeintel-ipu6-dkms-git 的更新 等待华为 quirk 补丁合入

附录:参考资料

  1. intel/ipu6-drivers #399 - Huawei MateBook Pro 摄像头不工作
  2. Dell 16 Pro Meteor Lake 摄像头 Arch Linux 配置指南
  3. Arch Linux Forums - IPU6/MIPI camera functionality
  4. intel/ipu6-drivers GitHub 仓库
相关推荐
kaoa0003 小时前
Linux入门攻坚——77、虚拟化技术基础原理-2
linux·服务器·网络
沪漂阿龙3 小时前
面试题详解:大模型设计沙箱全攻略——LLM Sandbox、Agent 工具执行、代码沙箱、安全隔离、权限控制与工程落地
网络·数据库·人工智能·安全
qq_543447824 小时前
Tcping测速是什么?Tcping测速核心概念解析
服务器·网络·php
婷婷_1724 小时前
【PCIe 验证每日学习・Day36】PCIe 存储器寻址空间与 BAR 底层原理
网络·学习·程序人生·芯片·pcie
海南java第二人4 小时前
ClickHouse 自然语言统一查询:让数据对话成为现实
网络·数据库·clickhouse
.千余4 小时前
【Linux 】网络基础1
linux·运维·服务器·开发语言·网络·学习
小短腿的代码世界4 小时前
Qt低级网络编程与零拷贝技术在高频交易中的应用:从QTcpSocket到共享内存的全链路优化
开发语言·网络·qt
ACP广源盛139246256734 小时前
IX8024 对标 ASM2824 @ACP#搭配昆仑芯 P800 构建 AI 服务器 PCIe4.0 高速互联架构
网络·人工智能·嵌入式硬件·电脑
老詹图解IT4 小时前
深度剖析:近期 Linux 内核重大漏洞与 AI 时代的安全挑战—兼答“制造恐慌“之说,以及Linus邮件背后的真实故事
网络·安全