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 仅包含OVTI01AB和OVTI01A0------与 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:00和Connected 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-csi 和 ivsc-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 固件实现可能存在以下问题(当前数据支持多因素叠加的判断):
-
ACPI _STA 方法实现异常(最可能) :设备的
_STA方法可能依赖特定条件(如检测到 Windows OS、特定驱动已加载等)才返回0x0F(启用),在 Linux 下返回0x00(未激活)。这是 status=0 最直接的解释,也符合 Huawei MateBook Pro(VGHH-XX)复现相同症状的特征。 -
主摄像头(OV13B10)缺少 IVSC 固件(直接障碍) :
linux-firmware中的 IVSC 传感器固件列表不包含 OV13B10(现有 ovti01as、ovti2740 等 9 颗传感器,缺 ovti13b1)。即使 ACPI status 问题解决,如果 IVSC 在 Secure Mode 下负责传感器初始化握手,缺少固件仍会导致 OV13B10 无法被识别。这是区别于辅助摄像头 OV01A1S(固件已存在)的新发现。 -
SSDB(Sensor Static Database)格式不兼容 :
ipu_bridge解析 ACPI_DSD方法中的 SSDB 数据结构来获取传感器属性(I2C 地址、port、CSI lane 数等)。华为的 SSDB 格式可能与 Intel 参考实现有差异,导致ipu_bridge即使枚举到设备也无法正确创建 I2C 客户端。此问题区别于 status=0------前者决定设备是否被枚举,后者决定枚举后如何配置。 -
缺少厂商特定的 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_bridge 和 intel-ipu6-dkms-git 的更新 |
等待华为 quirk 补丁合入 |