第一章 车载图形系统概述

1.1 车载显示系统的发展历程

说起车载显示,我入行那会儿还是机械仪表盘的天下。一个转速表、一个速度表,再加几个指示灯,就齐活了。那时候的「显示」,说白了就是指针转一转。

后来液晶屏开始进入汽车。我记得2010年左右,第一批7寸中控屏出现在高端车型上。分辨率只有800x480,但已经让整个行业兴奋不已。为什么?因为终于可以显示地图了。

再往后,发展速度就快得吓人了:

  • 2013-2015年:12.3寸全液晶仪表开始普及,分辨率提升到1280x480
  • 2016-2018年:双屏设计出现,中控+仪表各一块屏
  • 2019-2021年:三联屏、贯穿屏成为主流,分辨率达到2K甚至4K
  • 2022年至今:AR-HUD、电子后视镜、后排娱乐屏,整车屏幕数量突破10块

你想想看,十年前一辆车只有1块屏,现在动辄6-8块。这背后对图形系统的要求,完全不是一个量级。

核心变化:从「能显示」到「显示得好」,从「单屏独立」到「多屏联动」,从「静态界面」到「实时3D渲染」。

1.2 现代车载HMI架构

现在的车载HMI架构,我习惯把它分成三层来看:

硬件层

主控SoC + 独立GPU + 显示控制器。嗯,这里有个坑——很多方案用一颗SoC驱动多块屏幕,但显示控制器的通道数有限。我在项目中就遇到过,明明SoC支持3路显示,但实际只能同时输出2路,因为第三路和摄像头ISP复用了。

图形栈层

这一层是重点。从底层往上走:

  1. DRM/KMS:直接操作显示控制器,负责帧缓冲和模式设置
  2. GPU驱动:通常是DRM的GEM子系统和调度器
  3. 合成器:Wayland compositor或SurfaceFlinger
  4. UI框架:Qt、Flutter、Kanzi等

应用层

仪表、中控、空调、导航、语音助手……每个应用跑在自己的Surface上,由合成器统一管理。

我的建议:设计架构时,一定要把「安全隔离」放在第一位。仪表和中控不能互相影响,这是底线。

1.3 Wayland在车载领域的优势

为什么车载行业现在都在转向Wayland?说白了,X11那套东西已经撑不住了。

我简单列几个关键点:

对比项 X11 Wayland
架构 Client-Server,X Server是中心 Client-Compositor,去中心化
渲染路径 Client→Server→Kernel→显示 Client→Compositor→Kernel→显示
延迟 2-3帧的额外延迟 1帧以内,支持直接提交
安全性 所有Client都能看到其他Client的窗口 隔离性好,Client只能看到自己的Surface
多屏支持 需要Xinerama或XRandR,复杂 原生支持,每个输出独立管理

你看这个表格就明白了。Wayland在延迟和安全性上,天生就比X11强。

具体到车载场景,我总结三个核心优势:

1. 低延迟,高帧率

Wayland的合成器直接和DRM/KMS交互,不走中间环节。我在实际项目中测过,同样的Qt应用,Wayland下触摸到显示的延迟比X11低了30%左右。这对仪表盘来说太重要了——你总不希望车速显示滞后吧?

2. 安全隔离

每个应用跑在自己的Surface上,合成器决定谁能看到谁。仪表应用看不到中控的内容,中控应用也改不了仪表的显示。这在X11下几乎不可能做到。

注意:安全隔离不是「有就行」,而是要经过实际攻击测试。我曾经见过一个方案,虽然用了Wayland,但compositor的权限控制没做好,结果一个第三方应用还是能通过截屏获取到仪表信息。

3. 多屏原生支持

Wayland的协议设计就考虑了多输出场景。每个输出(屏幕)可以有自己的分辨率、刷新率、旋转角度。compositor可以灵活地把Surface分配到不同屏幕上。

举个例子,我做过一个三屏方案:

输出0: 仪表盘 (1920x720 @ 60Hz)
输出1: 中控屏 (1920x1080 @ 60Hz)  
输出2: 副驾屏 (1920x1080 @ 60Hz)

每个输出独立渲染,互不干扰。
仪表盘应用只绑定到输出0。
中控和副驾应用可以跨屏拖拽。

这在X11下配置起来相当麻烦,但在Wayland下,compositor启动时指定几个输出就行了。

1.4 实际项目中的经验

说了这么多理论,我分享一个真实案例。

去年我参与一个项目,客户要求用一颗高通SA8155P芯片驱动4块屏幕:仪表、中控、副驾、后排。一开始他们想用X11,理由是「成熟稳定」。

结果呢?

  • X11下4块屏幕的配置花了3周,各种CRTC和Encoder的映射问题
  • 仪表和中控之间偶尔出现画面撕裂
  • 后排屏幕播放视频时,中控操作会卡顿

后来我们改成Wayland + Weston,只用了1周就完成了多屏配置。画面撕裂问题通过设置每个输出的独立刷新率解决了。至于卡顿——Wayland的buffer管理机制天然避免了这种问题。

结论:不是X11不能用,而是Wayland更适合车载这种对实时性、安全性、多屏支持要求高的场景。

1.5 本章小结

车载显示从机械到数字,从单屏到多屏,从简单到复杂。Wayland的出现,正好解决了这个阶段最头疼的几个问题。

下一章,我会带大家动手搭建一个Wayland开发环境。到时候咱们直接上代码,看看一个最简单的compositor是怎么跑起来的。

嗯,先消化这些吧。有问题随时问我。


公众号:蓝海资料掘金营,微信deep3321