1990年代末最经典的显卡之一,3dfx的Voodoo 3,在厂商倒闭25年后迎来了一次特殊的Linux内核更新。Linux kernel 7.3将带来一项颇具怀旧气息的改动:内核现有的tdfxfb帧缓冲驱动将获得新能力,可以自行初始化Voodoo 3显卡,不再依赖系统固件预先执行显卡的video BIOS。
别高兴太早,这块老旧的PCI和AGP加速卡并不会突然获得现代化的Linux图形栈支持。这次更新解决的问题相当具体:tdfxfb驱动长期以来假设Voodoo显卡已经被PC固件初始化过。在传统x86 PC上,这个假设在驱动编写时是合理的——系统固件会在启动过程中执行显卡的video BIOS,配置好硬件,然后把一个已经能显示画面的设备交给Linux。
新平台上的老问题
这个假设在较新的或非典型的平台上就不成立了。补丁作者Daniel Palmer在描述中特别提到了三类场景:非x86架构的计算机、以其他显卡为主显卡的系统,以及无法运行旧video BIOS的新型BIOS。
Palmer本人是在一台配备PCI桥接卡的Amiga 4000上使用Voodoo 3时遇到这个问题的。Linux能够检测到显卡,但Voodoo 3完全没有被初始化,屏幕上只有"no signal detected"(无信号)的提示。
从固件初始化改为Linux自行初始化
新的代码利用显卡自身video BIOS中的配置信息,从Linux侧完成初始化流程。这样驱动就能启动VGA核心并建立可用的显示输出,完全不需要依赖系统固件。目前,这套手动初始化代码只针对Voodoo 3。Palmer最初还提到过对基于VSA-100的Voodoo 4和Voodoo 5的支持,但由于这些显卡的BIOS布局不同,相关支持已从当前的补丁系列中移除。
新代码已在现代x86-64系统和配备Mediator PCI桥接卡的Amiga 4000上完成了测试。在常规的现代x86-64 PC上装上Voodoo 3,实际效果相当有限:加载tdfxfb驱动后,可以获得一个可用的Linux帧缓冲设备,通常显示为/dev/fb0,由Voodoo驱动显示器来承载Linux虚拟控制台。
换句话说,这次更新足以让Voodoo 3从"Linux能识别的一个PCI设备"变成"真正能把像素画到屏幕上的显示适配器",即使固件没有预先初始化它。懂得使用Linux帧缓冲接口的应用程序也可以直接在上面绘图。对于一块25年前的显卡来说,这大概是最务实的归宿了。
热门跟贴