文章摘要
文章介绍了Fairphone 6在Linux系统上的实验性摄像头支持进展。尽管该设备硬件较新且Fairphone积极推动主线Linux支持,但音频和摄像头仍是主要障碍。作者借助LLM辅助,成功让OV13B10广角摄像头在GNOME Snapshot中工作,为后续开发提供了基础。
文章总结
Fairphone 6 超广角摄像头 Linux 实验性支持
背景
Fairphone 6 是一款对主线 Linux 和 postmarketOS 具有吸引力的设备,原因包括:硬件相对现代、Fairphone 公司积极投资主线 Linux 支持、已提供初步硬件支持、允许安装替代操作系统,以及承诺长期支持设备。目前,设备全面可用的主要障碍是板载音频和摄像头支持。由于项目需要二维码扫描功能,作者尝试让至少一个摄像头工作起来。
Fairphone 6 摄像头配置
Fairphone 6 配备三个摄像头:后置索尼 IMX896、前置三星 S5KKD1 和超广角 OmniVision OV13B10。其中,只有 OV13B10 拥有主线 Linux 驱动,且其超广角视野足以满足二维码扫描需求。
在高通 SoC 上,摄像头捕获路径是一个链条:图像传感器 → CSI-2 D-PHY → CSIPHY → CSID → ISP(VFE/TFE)→ 内存。此外,还需要摄像头时钟控制器(camcc)、专用 I2C 控制器(CCI)、电源轨和自动对焦音圈电机(VCM)等支持组件。
初步探索
研究显示,Fairphone 6 的 SoC 是高通 milos(SM7635),摄像头硬件模块包括 TFE665 ISP、CSID665 和 CSIPHY v2.2.1。通过对比下游寄存器头文件与主线 qcom-camss 驱动,发现 TFE665 与主线已支持的 TFE530 本质相同,寄存器布局一致,仅内部块基址偏移不同。这意味着可以移植现有驱动而非从头编写。
实施步骤
第一步:移植捕获子系统到内核
为 TFE665 ISP 创建新驱动,基于主线 TFE530 驱动修改,主要差异在于 milos 将 ISP 控制块和写总线块放置在不同偏移位置。CSID665 复用现有 gen-2 CSID 操作,CSIPHY v2.2.1 需要新的通道配置表和 D-PHY 调优值。在 camss.c 中描述 milos 的捕获复合体,并注册新的兼容性标识。
遇到的一个问题是驱动绑定后读取 TFE 硬件版本寄存器返回零,原因是缺少 CAMCCSOCAHBCLK 时钟,该时钟门控整个摄像头复合体的 AHB 寄存器总线。
第二步:启动 OV13B10 传感器
为主线 ov13b10 驱动添加 OpenFirmware 匹配表,使其能从设备树探测。在设备树中描述传感器,位于 CCI I2C 总线地址 0x36。需要注意两个细节:数据通道编号需使用零索引约定,以及超广角摄像头连接到 CSIPHY1。
第三步:解决全黑帧问题
帧以正确速率和大小到达,但每个像素为零。问题根源在于 TFE665 的 RDI 总线宽度为 128 位,需要打包器格式 0x0,而主线驱动硬编码了 64 位总线的 0xa。修改寄存器值后,摄像头物理工作正常。
第四步:原始 Bayer 帧到 libcamera
libcamera 0.7.2 通过通用简单管道处理器识别 milos qcom-camss 图,其软件 ISP 以约 30 fps 将原始帧去马赛克为 RGB。自动曝光功能需要为 OV13B10 添加传感器辅助类,映射增益寄存器值到实际增益倍数。添加后,自动曝光循环开始正常工作。
第五步:对焦、方向和分辨率问题
超广角摄像头的音圈电机使用 Awinic AW86017,通过 DW9714 10 位 DAC 协议驱动。由于 libcamera 的软件 ISP 没有自动对焦算法,设置固定对焦位置用于二维码扫描。通过设备树旋转和方向属性解决预览方向问题。禁用产生扭曲输出的 2×2 合并模式,虽然导致预览视野略有裁剪,但获得了可用的实时预览。
局限性
目前仅超广角摄像头工作,没有自动对焦功能,预览视野被裁剪,电源管理简化,ISP 完全依赖软件处理,且未优化图像质量。
后续步骤
修复合并模式以恢复完整视野,编写正确的电源管理序列,准备可上游化的代码部分。
评论总结
根据评论内容,主要观点和论据如下:
正面评价(认可度较高)
- 对Fairphone的进展表示赞赏,认为其值得关注。
- "Good to see this! Love Fairphone!"(作者:noIdeaTheSecond)
- "I wish one day I could do cool stuff like that. Kudos!"(作者:BraveOPotato)
技术探讨(中立)
- 询问Fairphone是否支持GrapheneOS,并质疑其与Pixel的差异。
- "have fairphone looked into supporting GrapheneOS? what exactly is missing there other than 'it's not Pixel'?"(作者:NooneAtAll3)
质疑文章真实性(负面)
- 怀疑文章由AI生成或辅助,引用技术细节作为证据。
- "Does the article seem AI-written/assisted to anyone else?"(作者:Throwaway698514)
- 引用具体技术描述(如寄存器地址变化、像素数据问题)作为疑点。
总结:评论呈现两极分化,部分用户对Fairphone的进展持积极态度,另一部分则质疑文章内容是否由AI生成,并关注技术细节的合理性。