Framebuffer HOWTO

Alex Buell

2010-08-05, 版本 1.3

修订历史
修订 v1.32010-08-05
从 LinuxDoc 转换为 DocBook
修订 v1.22000-01-22
上次公开版本
修订 v1.11999-07-22
添加了一些额外信息
修订 v1.01999-06-07
首次公开版本

本文档描述了如何在 Linux 中使用帧缓冲设备,支持多种平台。 这也包括如何设置多头显示。


目录
1. 贡献者
2. 什么是帧缓冲设备?
3. 帧缓冲设备有哪些优点?
4. 在 x86 平台上使用帧缓冲设备
4.1. 什么是 vesafb?
4.2. 如何激活 vesafb 驱动程序?
4.3. VESA 模式有哪些可用?
4.4. 有 Matrox 显卡吗?
4.5. 有 Permedia 显卡吗?
4.6. 有 ATI 显卡吗?
4.7. 哪些显卡符合 VESA 2.0 标准?
4.8. 我可以将 vesafb 编译为模块吗?
4.9. 如何修改光标
5. 在 m68k 平台上使用帧缓冲设备
5.1. Atari 平台
5.2. Amiga 平台
6. 在 PowerPC 平台上使用帧缓冲设备
7. 在 Alpha 平台上使用帧缓冲设备
7.1. 有哪些模式可用?
7.2. 哪些显卡可以在 Alpha 上工作?
8. 在 SPARC 平台上使用帧缓冲设备
8.1. 哪些显卡可以在 SPARC 上工作
8.2. 配置帧缓冲设备
9. 在 MIPS 平台上使用帧缓冲设备
10. 在 ARM 平台上使用帧缓冲设备
10.1. Netwinders
10.2. Acorn Archimedes
10.3. 其他 ARM 端口 (SA7710s 等)
11. 使用多头帧缓冲
11.1. 简介
11.2. 反馈
11.3. 贡献者
11.4. 标准免责声明
11.5. 版权信息
11.6. 支持哪些硬件?
11.7. 商业支持
11.8. 获取所有资料
11.9. 开始入门
11.10. 总结
11.11. 其他注意事项和问题
11.12. 附录 A. Octave "" 脚本
11.13. 附录 B. Bourne Shell "" 脚本
12. 使用/更改字体
13. 更改控制台模式
14. 设置 X11 FBdev 驱动程序
15. 如何将 XFree86 模式行转换为帧缓冲设备时序?
16. 更改 Linux 徽标
17. 查找更多信息

版权所有 © 1999—2010 Alex Buell,GNU 自由文档许可证 (GFPL)

根据自由软件基金会发布的 GNU 自由文档许可证 1.2 版或任何后续版本的条款,允许复制、分发和/或修改本文档。 许可证副本可以从自由软件基金会获取。


1. 贡献者

感谢以下列出的人员,他们帮助改进了 Framebuffer HOWTO。 我冒昧地删除了电子邮件地址,因为本文档已超过十年历史!

感谢 Rick Niles,他非常慷慨地交出了他的 Multi-Head Mini-HOWTO,以便纳入本 HOWTO。

感谢以下列出的人员,他们为 x86 平台上的 X11 构建了 XF86_FBdev X11 帧缓冲驱动程序的 libc5/glibc2 版本

当然,还有帧缓冲设备驱动程序的作者


2. 什么是帧缓冲设备?

帧缓冲设备是图形硬件的抽象。 它代表某些视频硬件的帧缓冲区,并允许应用程序软件通过定义良好的接口访问图形硬件,这样软件就不需要了解底层接口的东西 [摘自 Geert Uytterhoeven 在 Linux 内核源代码中的 framebuffer.txt]


3. 帧缓冲设备有哪些优点?

企鹅徽标! :o) 严肃地说,帧缓冲设备的主要优点是它在所有平台上提供了一个通用接口。 在 2.1.x 内核开发过程的后期之前,x86 平台的控制台驱动程序与其他平台的控制台驱动程序完全不同。 随着 2.1.109 内核的引入,所有这些都得到了更好的改变,并在 x86 平台下引入了更统一的控制台处理,并且首次在 x86 上引入了带有企鹅徽标的真位图图形控制台,并允许代码在不同平台之间共享。 请注意,2.0.x 内核不支持帧缓冲设备,但是将来某天可能会有人将 2.1.x 内核中的代码向后移植到 2.0.x 内核。 该规则的一个例外是,m68k 平台的 0.9.x 内核端口确实包含帧缓冲设备支持。

随着 2.2.x 内核的发布,帧缓冲设备支持非常可靠和稳定。 如果您的显卡支持帧缓冲设备,并且您正在使用 2.2.x 内核,则应使用帧缓冲设备。 较旧的 2.0.x 内核不支持帧缓冲设备,至少在 x86 平台上是这样。

帧缓冲设备有一些很酷的功能,您可以启动时为内核提供通用选项,包括特定于特定帧缓冲设备的选项。 这些是

通常,帧缓冲设备按照内核中指定的顺序进行探测,但是通过指定 video=xxx 选项,您可以在内核中指定的其他设备之前添加要探测的特定帧缓冲设备。


4. 在 x86 平台上使用帧缓冲设备

4.1. 什么是 vesafb?

Vesafb 是一个用于 x86 架构的帧缓冲驱动程序,它与符合 VESA 2.0 标准的显卡配合使用。 它与内核中的帧缓冲设备驱动程序密切相关。

vesafb 是一种显示驱动程序,它允许在您的 x86 平台上为位图文本控制台使用图形模式。 它还可以显示徽标,这可能是您想要使用 vesafb 的主要原因 :o)

遗憾的是,您无法成功地将 vesafb 与 VESA 1.2 显卡一起使用。 这是因为这些 1.2 显卡不使用线性帧缓冲。 线性帧缓冲简单地意味着系统的 CPU 能够访问显示的每一位。 从历史上看,较旧的图形适配器可能只允许 CPU 一次访问 64K,因此限制了可怕的 CGA/EGA 图形模式! 可能会有人为这些显卡编写 vesafb12 设备驱动程序,但这将占用宝贵的内核内存并涉及令人讨厌的黑客行为。

但是,有一种潜在的解决方法可以为您的旧版 VESA 1.2 显卡添加 VESA 2.0 扩展。 您或许可以下载一个 TSR 类型的程序,该程序可以从 DOS 运行,并与 loadlin 一起使用,可以帮助您为适当的图形控制台模式配置显卡。 请注意,这并非总是有效,例如,某些 Cirrus Logic 显卡(如 VLB 54xx 系列)被映射到一系列内存地址(例如,在 15MB-16MB 范围内)以进行帧缓冲,这使得它们无法在内存超过 32MB 的系统上成功使用。 有一种方法可以使其工作,即,如果您有一个 BIOS 选项可以在 15MB-16MB 范围内保留一个内存空洞,它可能会工作,Linux 不支持使用内存空洞。 但是,有针对此选项的补丁 [谁有这些补丁,从哪里可以获得?]。 如果您希望尝试此选项,则有很多 TSR 样式的程序可用,一个主要的例子是 UNIVBE,可以在 Internet 上找到。

或者,您可以下载内核补丁,以允许您的 VESA 1.2 显卡与 VESA 帧缓冲驱动程序一起工作。 例如,有一些补丁可用于支持 VESA 1.2 的较旧的 S3 板(如 S3 Trio、S3 Virge)。 对于这些显卡,您可以从 ftp://ccssu.crimea.ua/pub/linux/kernel/v2.2/unofficial/s3new.diff.gz 获取补丁。


4.2. 如何激活 vesafb 驱动程序?

假设您正在使用 menuconfig,您需要执行以下步骤

如果您的处理器(在 x86 平台上)支持 MTRR,请启用此功能。 它加快了处理器和显卡之间的内存复制速度,但并非绝对必要。 当然,您可以在控制台设备工作后执行此操作。

重要提示:对于 2.1.x 内核,请进入“代码成熟度级别”菜单,并启用开发和/或不完整驱动程序的提示。 对于 2.2.x 内核,不再需要这样做。

进入“控制台驱动程序”菜单,并启用以下选项

  • VGA 文本控制台

  • 视频选择支持

  • 帧缓冲设备支持(实验性)

  • VESA VGA 图形控制台

  • 高级底层驱动程序

  • 选择单色、2bpp、4bpp、8bpp、16bpp、24bpp 和 32bpp 打包像素驱动程序

VGA 芯片组支持(仅文本)- vgafb - 曾经是上面列表的一部分,但它已被删除,因为它现在已弃用且不再受支持。 它将很快被删除。 请改用 VGA 文本控制台 (fbcon)。 VGA 字符/属性仅与 VGA 芯片组支持一起使用,无需选择。

确保未启用 Mac 变量 bpp 打包像素支持。 如果首次选择“高级底层驱动程序”,Linux 内核版本 2.1.111(和 112)似乎会自动启用此功能。 2.1.113 中不再发生这种情况。

还可以选择将字体编译到内存中,但这并非真正必要,并且您始终可以使用 kbd-0.99 的(请参阅字体部分)setfont 实用程序,通过将字体加载到控制台设备中来更改字体。

确保这些不会成为模块。 [不确定是否可以将它们构建为模块 - 请纠正我]

您需要在 /dev 中创建帧缓冲设备。 每个帧缓冲设备需要一个,因此您只需键入 mknod /dev/fb0 c 29 0 即可创建第一个。 后续设备将是 32 的倍数,因此例如要创建 /dev/fb1,您需要键入 mknod /dev/fb1 c 29 32,依此类推,最多到第八个帧缓冲设备 (mknod /dev/fb7 c 29 224)

然后重建内核,修改 /etc/lilo.conf 以包含 VGA=ASK 参数,并运行 lilo,这是为了让您能够选择要使用的模式。

这是一个 LILO 配置示例(取自我的机器)

# LILO 配置文件 boot = /dev/hda3 delay = 30 prompt vga = ASK # 让用户输入所需的模式 image = /vmlinuz root = /dev/hda3 label = Linux read-only # 非 UMSDOS 文件系统应以只读方式挂载以进行检查

重新启动内核,并进行一个简单的测试,尝试在 VGA 提示符下输入 0301(这将为您提供 640x480 @ 256),您应该能够看到一个可爱的小企鹅徽标。

请注意,在 VGA 提示符下,您需要以“0”加上三位数的格式键入数字,并省略“x”。 如果您使用 LILO,则不需要这样做。

一旦您看到它运行良好,您可以探索各种 VESA 模式(见下文),并决定您最喜欢的模式,并将其硬编码到 lilo.conf 中的“VGA=x”参数中。 当您选择了您最喜欢的模式后,从下表中查找等效的十六进制数字并使用它(即,对于 1280x1024 @ 256,您只需使用“VGA=0x307”),然后重新运行 lilo。 这就是全部。 有关更多参考,请阅读 LoadLin/LILO HOWTO。

注意! vesafb 默认情况下不启用回滚缓冲。 您需要将启用它的选项传递给内核。 使用 video=vesa:ypan 或 video=vesa:ywrap 来激活它。 两者都做同样的事情,但方式不同。 ywrap 比 ypan 快得多,但可能无法在稍微损坏的 VESA 2.0 显卡上工作。 ypan 比 ywrap 慢,但兼容性更高。 此选项仅在内核 2.1.116 及更高版本中提供。 较早的内核没有在 vesafb 中允许回滚缓冲的功能。


4.3. VESA 模式有哪些可用?

这实际上取决于您的系统中拥有的 VESA 2.0 兼容显卡的类型以及可用的视频内存量。 这只是测试哪些模式最适合您的显卡的问题。

下表显示了您可以在 VGA 提示符下输入或与 LILO 程序一起使用的模式编号。 (实际上这些数字加上了 0x200,以便更易于参考该表)

表 1. VESA 模式

深度640x400640x480800x6001024x7681152x8641280x10241600x1200
4 位??0x302????
8 位0x3000x3010x3030x3050x1610x3070x31C
15 位?0x3100x3130x3160x1620x3190x31D
16 位?0x3110x3140x3170x1630x31A0x31E
24 位?0x3120x3150x318?0x31B0x31F
32 位????0x164??

键:8 位 = 256 色,15 位 = 32,768 色,16 位 = 65,536 色,24 位 = 1680 万色,32 位 - 与 24 位相同,但额外的 8 位可用于其他用途,并且非常适合 32 位 PCI/VLB/EISA 总线。

其他模式由制造商自行决定,因为 VESA 2.0 文档仅定义了高达 0x31F 的模式。 您可能需要进行一些调整才能找到这些额外的模式。


4.4. 有 Matrox 显卡吗?

如果您有 Matrox 显卡,您实际上不需要 vesafb,而是需要 matroxfb 驱动程序。 这大大增强了您显卡的功能。 Matroxfb 将与 Matrox Mystique Millennium I 和 II、G100 和 G200 一起使用。 它还支持多头系统(也就是说,如果您的机器中有两块 Matrox 显卡,您可以在同一台机器上使用两个显示器!)。 要为 Matrox 进行配置,您需要执行以下操作

您可能需要首先升级 Matrox BIOS,您可以从 http://www.matrox.com/mgaweb/drivers/ftp_bios.htm 下载 BIOS 升级程序 请注意,您需要 DOS 才能执行此操作。

进入“代码成熟度级别”菜单,并启用开发和/或不完整驱动程序的提示 [请注意,这可能会在未来的内核中发生变化 - 当这种情况发生时,将修订本 HOWTO]

进入“控制台驱动程序”菜单,并启用以下选项

  • VGA 文本控制台

  • 视频选择支持

  • 帧缓冲设备支持(实验性)

  • Matrox 加速

  • 根据您拥有的显卡选择以下选项

    • Millennium I / II 支持

    • Mystique 支持

    • G100 / G200 支持

  • 如果您想使用多于一块 Matrox 显卡,请启用多头支持

  • 高级底层驱动程序

  • 选择单色、2bpp、4bpp、8bpp、16bpp、24bpp 和 32bpp 打包像素驱动程序

重建您的内核。 然后您需要修改您的 lilo.conf 文件以启用 Matroxfb 设备。 最快最简单的方法是重用我的配置。

# LILO 配置文件 boot = /dev/hda3 delay = 30 prompt vga = 792 # 您需要这样做,以便它以正常状态启动 # Linux 可启动分区配置开始 image = /vmlinuz append = "video=matrox:vesa:440" # 然后切换到 Matroxfb root = /dev/hda3 label = Linux read-only # 非 UMSDOS 文件系统应以只读方式挂载以进行检查

最后,您需要在 /dev 中创建帧缓冲设备。 每个帧缓冲设备需要一个,因此您只需键入 mknod /dev/fb0 c 29 0 即可创建第一个。 后续设备将是 32 的倍数,因此例如要创建 /dev/fb1,您需要键入 mknod /dev/fb1 c 29 32,依此类推,最多到第八个帧缓冲设备 (mknod /dev/fb7 c 29 224i)

应该就是这样了! [注意:有人在使用此多头支持吗?请尽快与我联系 - 我需要与您讨论一下,以便我可以记录下来!


4.5. 有 Permedia 显卡吗?

Permedia 显卡不能与 vesafb 驱动程序一起使用,但幸运的是,可以使用 Permedia 帧缓冲驱动程序。 假设您正在使用 menuconfig,请执行以下操作

进入“代码成熟度级别”菜单,并启用开发和/或不完整驱动程序的提示 [请注意,这可能会在未来的内核中发生变化 - 当这种情况发生时,将修订本 HOWTO]

进入“控制台驱动程序”菜单并选择以下选项

  • VGA 文本控制台

  • 视频选择支持

  • 帧缓冲设备支持(实验性)

  • Permedia2 支持(实验性)

  • 通用 Permedia2 PCI 板支持

  • 高级底层驱动程序

  • 选择单色、2bpp、4bpp、8bpp、16bpp、24bpp 和 32bpp 打包像素驱动程序

  • 可选地,如果您希望使用编译后的字体,请选择以下选项

    • 选择编译后的字体

    • 选择 Sparc 控制台 12x22 字体

重建您的内核。 然后您需要修改您的 lilo.conf 文件以启用 pm2fb 设备。 最快最简单的方法是重用以下配置

# LILO 配置文件 boot = /dev/hda3 delay = 30 prompt vga = 792 # 您需要这样做,以便它以正常状态启动 # Linux 可启动分区配置开始 image = /vmlinuz append = "video=pm2fb:mode:1024x768-75,font:SUN12x22,ypan" # 然后切换到 pm2fb root = /dev/hda3 label = Linux read-only # 非 UMSDOS 文件系统应以只读方式挂载以进行检查

“pm2fb:mode:1024x768-75,font:SUN12x22,ypan”行表示您正在选择 1024x768 模式,频率为 75Hz,并选择了 SUN12x22 字体(如果您选择了它),包括用于回滚支持的 ypan。 您可以根据需要选择其他模式。

最后,您需要在 /dev 中创建帧缓冲设备。 每个帧缓冲设备需要一个,因此您只需键入 mknod /dev/fb0 c 29 0 即可创建第一个。 后续设备将是 32 的倍数,因此例如要创建 /dev/fb1,您需要键入 mknod /dev/fb1 c 29 32,依此类推,最多到第八个帧缓冲设备 (mknod /dev/fb7 c 29 224)

有关 Permedia 帧缓冲驱动程序的其他功能的更多信息,请将您的浏览器指向 http://www.cs.unibo.it/~nardinoc/pm2fb/index.html

video=pm2fb:[选项[,选项[,选项...]]]

其中 option 是以下之一

  • off - 禁用驱动程序

  • mode:分辨率 - 设置控制台分辨率。 这些模式取自 Geert 的 fbset 包中的 fb.modes.ATI 文件。 所有模式的深度均为 8 bpp。 这是可用模式的列表

    • 640x480-(60,72,75,90,100)

    • 640x480-(60,72,75,90,100)

    • 1024x768-(60,70,72,75,90,100,illo) illo=80KHz 100Hz

    • 152x864-(60,70,75,80)

    • 1280x1024-(60,70,74,75)

    • 1600x1200-(60,66,76)

  • 默认分辨率为 640x480-60

  • font:name - 设置控制台字体。 示例 font:SUN12x12

  • ypan - 将当前虚拟高度设置为视频内存允许的最大值。

  • oldmem - 仅用于安装了 Fujitsi SGRAM 的 Cyber​​visionPPC 板。 适用于 1998 年 12 月 30 日之前制造的所有 Cyber​​VisionPPC。

  • virtual - 与能够重新映射 PCI 区域的内核一起使用


4.6. 有 ATI 显卡吗?

[注意:此信息最多只是二手或三手的,因为我没有 ATI 显卡来测试它。 如果我错了,请随时纠正我或喷我!] 8)

ATI 显卡可以与 vesafb 驱动程序一起使用,但您可能会遇到问题,也可能不会遇到问题,具体取决于显卡的损坏程度。 幸运的是,可以使用 atyfb 帧缓冲驱动程序。 假设您正在使用 menuconfig,请执行以下操作

进入“代码成熟度级别”菜单,并启用开发和/或不完整驱动程序的提示 [请注意,这可能会在未来的内核中发生变化 - 当这种情况发生时,将修订本 HOWTO]

进入“控制台驱动程序”菜单并选择以下选项

  • VGA 文本控制台

  • 视频选择支持

  • 帧缓冲设备支持(实验性)

  • ATI Mach64 显示支持

  • 高级底层驱动程序

  • 选择单色、2bpp、4bpp、8bpp、16bpp、24bpp 和 32bpp 打包像素驱动程序

  • 可选地,如果您希望使用编译后的字体,请选择以下选项

    • 选择编译后的字体

    • 选择 Sparc 控制台 12x22 字体

重建您的内核。 然后您需要修改您的 lilo.conf 文件以启用 atyfb 设备。 最快最简单的方法是重用以下配置

# LILO 配置文件 boot = /dev/hda3 delay = 30 prompt vga = 792 # 您需要这样做,以便它以正常状态启动 # Linux 可启动分区配置开始 image = /vmlinuz append = "video=atyfb:mode:1024x768,font:SUN12x22" root = /dev/hda3 label = Linux read-only # 非 UMSDOS 文件系统应以只读方式挂载以进行检查

“atyfb:mode:1024x768,font:SUN12x22”行表示您正在选择 1024x768 模式。

最后,您需要在 /dev 中创建帧缓冲设备。 每个帧缓冲设备需要一个,因此您只需键入 mknod /dev/fb0 c 29 0 即可创建第一个。 后续设备将是 32 的倍数,因此例如要创建 /dev/fb1,您需要键入 mknod /dev/fb1 c 29 32,依此类推,最多到第八个帧缓冲设备 (mknod /dev/fb7 c 29 224)

video=atyfb:[选项[,选项[,选项...]]]

其中 option 是以下之一

  • font - 选择要使用的字体(编译到内核中)

  • noblink - 关闭闪烁

  • noaccel - 禁用加速

  • vram - 显卡上有多少视频内存

  • pll - 未知

  • mclk - 未知

  • vmode - 未知

  • cmode - 设置颜色深度(4、8、15、16、24 和 32)


4.7. 哪些显卡符合 VESA 2.0 标准?

这列出了所有已知与 vesafb 设备驱动程序配合使用的图形设备

  • ATI PCI VideoExpression 2MB(最大 1280x1024 @ 8 位)

  • ATI PCI All-in-Wonder

  • Matrox Millennium PCI - BIOS v3.0

  • Matrox Millennium II PCI - BIOS v1.5

  • Matrox Millennium II AGP - BIOS v1.4

  • Matrox Millennium G200 AGP - BIOS v1.3

  • Matrox Mystique & Mystique 220 PCI - BIOS v1.8

  • Matrox Mystique G200 AGP - BIOS v1.3

  • Matrox Productiva G100 AGP - BIOS v1.4

  • 所有基于 Riva 128 的显卡

  • Diamond Viper V330 PCI 4MB

  • Genoa Phantom 3D/S3 ViRGE/DX

  • Hercules Stingray 128/3D 带电视输出

  • Hercules Stingray 128/3D 不带电视输出 - 需要 BIOS 升级(从 support@hercules.com 免费获取)

  • SiS 6326 PCI/AGP 4MB

  • STB Lightspeed 128 (Nvida Riva 128 based) PCI

  • STB Velocity 128 (Nvida Riva 128 based) PCI

  • Jaton Video-58P ET6000 PCI 2MB-4MB(最大 1600x1200 @ 8 位)

  • Voodoo2 2000

以下列表列出了无法与 vesafb 设备配合使用的显卡

  • 待定


4.8. 我可以将 vesafb 编译为模块吗?

据目前所知,vesafb 无法模块化,尽管在某个时候,vesafb 的开发人员可能会决定修改源代码以进行模块化。 请注意,即使模块化是可能的,在启动时,在 modprobe vesafb 之前,您也无法在显示器上看到任何输出。 在出现启动问题的情况下,将其保留在内核中可能更明智。


4.9. 如何修改光标

感谢 Martin Mares,摘自他的 VGA-softcursor.txt 文档。

Linux 现在具有一些操作光标外观的能力。 通常,您可以设置硬件光标的大小(还可以解决那些可怜的 Trident 显卡中的一些丑陋的错误 - 请参阅 drivers/char/vga.c 中的 #define TRIDENT_GLITCH)。 如果您在系统配置中启用“软件生成光标”,您可以玩一些新技巧:您可以使您的光标看起来像一个不闪烁的红色块,使其成为它所在的字符的反色背景,或者突出显示该字符,并且仍然可以选择原始硬件光标是否应保持可见。 可能还有其他我从未想过的事情。

光标外观由 <ESC>[?1;2;3c 转义序列控制,其中 1、2 和 3 是下面描述的参数。 如果您省略其中任何一个,它们将默认为零。

参数 1 指定光标大小(0 = 默认,1 = 不可见,2 = 下划线,...,8 = 完整块)+ 16 如果您希望应用软件光标 + 32 如果您希望始终更改背景颜色 + 64 如果您不喜欢背景与前景相同。 最后两个标志忽略高亮。

第二个参数选择您要更改的字符属性位(只需将它们与此参数的值进行 XOR 运算)。 在标准 VGA 上,高四位指定背景,低四位指定前景。 在这两组中,低三位设置颜色(与控制台使用的正常颜色代码一样),最高有效位打开高亮(或有时闪烁 - 这取决于您的 VGA 的配置)。

第三个参数由您要设置的字符属性位组成。 位设置发生在位切换之前,因此您可以通过在设置掩码和切换掩码中都包含一位来简单地清除一位。

  • 要获得正常的闪烁下划线,请使用:echo -e '\033<ESC>[?2c'

  • 要获得闪烁块,请使用:echo -e '\033<ESC>[?6c'

  • 要获得红色不闪烁块,请使用:echo -e '\033i<ESC>[?17;0;64c'


5. 在 m68k 平台上使用帧缓冲设备

5.1. Atari 平台

本节介绍 Atari 平台上的帧缓冲选项


5.1.1. 有哪些模式可用?

表 2. Atari 模式

深度320x200320x480640x200640x400640x480896x6081280x960
1 位   sthighvga2falh2tthigh
2 位  stmid vga4  
4 位stlow   ttmid/vga16falh16 
8 位 ttlow  vga256  

ttlow、ttmid 和 ttmhigh 仅在 TT 上使用,而 vga2、vga4、vga16、vga256、falh3 和 falh16 仅在 Falcon 上使用。

当与内核选项 video=xxx 一起使用,并且未给出子选项时,内核将按以下顺序探测模式,直到找到给定硬件可能的模式

  • ttmid

  • tthigh

  • vga16

  • sthigh

  • stmid

如果您不希望自动探测您想要的模式,您可以指定您希望使用的特定模式。 例如,video=vga16 为您提供 4 位 640x480 显示。


5.1.2. 其他子选项

video=xxx 参数有许多子选项可用

  • inverse - 反转显示,使背景/前景颜色反转。 通常背景是黑色,但使用此子选项,它会设置为白色。

  • font - 设置在文本模式下使用的字体。 目前您只能选择 VGA8x8、VGA8x16、PEARL8x8。 默认情况下,仅当显示器的垂直尺寸小于 400 像素时才使用 VGA8x8,否则默认为 VGA8x16。

  • internal - 一个非常有趣的选项。 请参阅下一节以获取信息。

  • external - 与上面相同。

  • monitorcap - 描述多同步的功能。 请勿与固定同步监视器一起使用!


5.1.2.1. 使用子选项

语法:internal:(xres);(yres)[;(xres_max);(yres_max);(offset)]

此选项指定某些扩展内部视频硬件的功能,即 OverScan 模式。 (xres) 和 (yres) 给出了屏幕的扩展尺寸。

如果您的 OverScan 模式需要黑色边框,您需要写入 internal: 子选项的最后三个参数。 (xres_max) 是硬件允许的最大行长,(yres_max) 是最大行数,(offset) 是屏幕内存的可见部分到其物理起点的偏移量(以字节为单位)。

通常需要激活扩展的内部视频硬件,为此您需要“switches=*”选项。 [注意:作者希望获得有关此的更多信息,请。 内核中的 m68k 文档在这方面不够清楚,而且他没有 Atari! 示例也会有所帮助]


5.1.2.2. 使用子选项

语法:external:(xres);(yres);(depth);(org);(scrmem)[;(scrlen)[;(vgabase)[;(colw)[;(coltype)[;(xres_virtual)]]]]]

这非常复杂,因此本文档将尝试尽可能清楚地解释,但作者将不胜感激,如果有人可以查看一下并确认他没有搞砸什么! :o)

此子选项指定您拥有外部视频硬件(很可能是图形板),以及如何在 Linux 中使用它。 内核基本上仅限于它所知道的内部视频硬件,因此您必须提供它所需的参数才能使用外部视频硬件。 有两个限制:您必须在启动前切换到该模式,并且一旦启动,您就无法更改模式。

前三个参数很明显; 给出了屏幕的尺寸,即像素高度、宽度和深度。 提供的深度应该是颜色数量是所需平面数量的 2^n。 例如,如果您希望使用 256 色显示,则需要将深度设置为 8。 这取决于外部图形硬件,因此您将受到硬件功能的限制。

由此,您还需要告诉内核视频内存的组织方式 - 提供一个字母作为 (org) 参数

  • n - 使用普通平面,即一个完整的平面之后是另一个

  • i - 使用交错平面,即第一个平面的 16 位,然后是下一个平面的 16 位,依此类推。 只有内置的 Atari 视频模式使用此模式 - 并且没有图形卡支持此模式。

  • p - 使用打包像素,即连续位代表像素的所有平面。 这是图形卡上 256 色显示最常见的模式。

  • t - 使用真彩色,即这实际上是打包像素,但不需要像其他打包像素模式使用的那样使用颜色查找表。 这些模式通常是 24 位显示,并提供 1680 万种颜色。

但是,对于单色模式,(org) 参数具有不同的含义

  • n - 使用正常颜色,即 0 = 白色,1 = 黑色

  • i - 使用反转颜色,即 0 = 黑色,1 = 白色

关于视频硬件的下一个重要项目是视频内存的基地址。 这由 (scrmem) 参数作为带有 0x 前缀的十六进制数给出。 您需要从外部视频硬件随附的文档中找到这一点。

下一个参数 (scrlen) 告诉内核视频内存的大小。 如果缺少它,则会根据 (xres) 和 (depth) 参数计算出来。 无论如何,现在在这里写入值都没有用。 要将此项留空,如果您需要给出 (vgabase) 参数,请给出两个连续的分号,否则,只需将其留空即可。

(vgabase) 参数是可选的。如果未给出该参数,内核将无法读取/写入视频硬件的任何颜色寄存器,因此您必须在启动 Linux 之前设置好适当的颜色。但是,如果您的显卡与 VGA 兼容,您可以提供地址,以便内核可以找到 VGA 寄存器组的位置,从而更改颜色查找表。此信息可以在您的外部视频硬件文档中找到。为了清楚起见,(vgabase) 是基地址,即 4k 对齐的地址。对于读取/写入颜色寄存器,内核使用 (vgabase) + 0x3c7 和 (vgabase) + 0x3c9 之间的地址范围。此参数以十六进制给出,并且必须带有 0x 前缀,就像 (scrmem) 一样。(colw) 仅在指定了 (vgabase) 参数时才有意义。它告诉内核每个颜色寄存器的宽度,即每个单色(红/绿/蓝)的位数。默认值通常为 6 位,但指定 8 位也很常见。

(xres_virtual) 仅对于物理行长与可见长度不同的 ProMST/ET4000 显卡是必需的。对于 ProMST,您需要提供 2048,而对于 ET4000,则取决于视频板的初始化。


5.2. Amiga 平台

本节介绍 Amiga 的选项,这些选项与 Atari 平台的选项非常相似


5.2.1. 有哪些模式可用?

这取决于 Amiga 中使用的芯片组。主要有三种芯片组:OCS、ECS 和 AGA,它们都使用彩色帧缓冲区。

  • NTSC 模式

    • ntsc - 640x200

    • ntsc-lace - 640x400

  • PAL 模式

    • pal - 640x256

    • pal-lace - 640x512

  • ECS 模式 - 在 ECS 芯片组上为 2 位颜色,仅在 AGA 芯片组上为 8 位颜色

    • multiscan - 640x480

    • multiscan-lace - 640x960

    • euro36 - 640x200

    • euro36-lace - 640x400

    • euro72 - 640x480

    • euro72-lace - 640x800

    • super72 - 800x300

    • super72-lace - 800x400

    • dblntsc - 640x200

    • dblpal - 640x256

    • dblntsc-ff - 640x400

    • dblntsc-lace - 640x800

    • dblpal-ff - 640x512

    • dblpal-lace - 640x1024

  • VGA 模式 - 在 ECS 芯片组上为 2 位颜色,在 AGA 芯片组上为 8 位颜色

    • vga - 640x480

    • vga70 - 640x400


5.2.2. 附加子选项

这些与 Atari 子选项类似。它们是

  • depth - 指定像素位深度

  • inverse - 与 Atari 子选项执行相同操作

  • font - 与 Atari 子选项执行相同操作,尽管如果显示尺寸小于 400 像素宽,则使用 PEARL8x8 字体而不是 VGA8x8 字体。

  • monitorcap - 指定多频显示器的功能。请勿与固定同步显示器一起使用


5.2.3. 支持的 Amiga 图形扩展板

  • Phase5 CyberVision 64 (S3 Trio64 芯片组)

  • Phase5 CyberVision 64 3D (S3 ViRGE 芯片组)

  • MacroSystems Retina Z3 (NCR 77C32BLT 芯片组)

  • Helfrich Piccolo, SD64, GVP ECS Spectrum, Village Tronic Picasso II / II+ 和 IV (Cirrus Logic GD542x / 543x 芯片组)


5.2.4. Macintosh 平台

目前,帧缓冲设备实现仅支持在启动到 Linux 之前在 MacOS 中选择的模式,并且还支持 1 位、2 位、4 位和 8 位颜色模式。

帧缓冲子选项使用以下语法选择

video=macfb:<font>:<inverse>

您可以选择字体,例如 VGA8x8、VGA8x16 和 6x11 等。inverse 选项允许您使用反色视频。


6. 在 PowerPC 平台上使用帧缓冲设备

作者很乐意收到有关在此平台上使用帧缓冲设备驱动程序的信息。


7. 在 Alpha 平台上使用帧缓冲设备

7.1. 有哪些模式可用?

到目前为止,只有 TGA PCI 卡,它仅以 8 位或 24/32 位分辨率执行 640x480 的 80x30 模式。


7.2. 哪些显卡可以在 Alpha 上工作?

此列表列出了已知可以工作的所有显卡

  • DEC TGA PCI (DEC21030) - 640x480 & 8 位或 24/32 位版本


8. 在 SPARC 平台上使用帧缓冲设备

8.1. 哪些显卡可以在 SPARC 上工作

此列表列出了所有可用的显卡

  • MG1 / MG2 - SBus 或集成在 Sun3 上 - 最大 1600 x 1200 & 单色 (BWtwo)

  • CGthree - 类似于 MG1 / MG2,但支持彩色

  • GX - SBus - 最大 1152 x 900 & 8 位 (CGsix)

  • TurboGX - SBus - 最大 1152 x 900 & 8 位 (CGsix)

  • SX (仅限 SS10 / SS20) - 最大 1280 x 1024 & 24 位 (CGfourteen)

  • ZX (TZX) - SBus - 加速 24 位 3D 卡 (Leo)

  • TCX (仅限 Sparc 4) - 最大 1280 x 1024 & 8 位

  • TCX (仅限 Sparc 5) - 最大 1152 x 900 & 24 位

  • Creator - SBus - 最大 1280 x 1024 & 24 位 (FFB

  • Creator3D - SBus - 最大 1920 x 1200 & 24 位 (FFB

  • ATI Mach64 - PCI - 仅限加速 8/24 位 UltraSparc

可以选择使用 PROM 将字符输出到显示器或串行控制台。

另请查看 Sparc 帧缓冲区 FAQ,网址为 http://c3-a.snvl1.sfba.home.com/Framebuffer.html


8.2. 配置帧缓冲设备

在 make config 期间,您需要选择是否编译 promcon 和/或 fbcon。您可以同时选择两者,但是如果这样做,您将需要设置内核标志以选择设备。如果未设置,fbcon 始终优先。如果未选中 promcon,则在启动时,它默认为 dummycon。如果选中 promcon,它将使用此设备。一旦总线启动,并且 fbcon 已编译,内核将探测上述帧缓冲区并将使用 fbcon。如果没有帧缓冲设备,它将默认为 promcon

以下是内核选项

  • video=sbus:options

    • 其中 options 是逗号分隔的列表

      • nomargins - 将边距设置为 0, 0

      • margins=12x24 - 将边距设置为 12, 24 (默认值从分辨率计算得出)

      • off - 不探测任何 SBus / UPA 帧缓冲区

      • font=SUN12x22 - 使用特定字体

例如,以 video=sbus:nomargins,font=SUN12x22 启动,您将获得一个漂亮的快速文本控制台,文本分辨率为 96x40,看起来类似于 Solaris 控制台,但具有颜色和虚拟终端,就像在 x86 平台上一样。

如果要使用 SUN12x22 字体,则需要在 make config 期间启用它(禁用 fontwidth != 8 选项)。加速帧缓冲区可以支持 1 到 16 像素之间的任何字体宽度,而哑帧缓冲区仅支持 4、8、12 和 16 像素字体宽度。

建议您获取最新的 consoletools 软件包。


9. 在 MIPS 平台上使用帧缓冲设备

此平台无需进行任何更改,这一切都会自动为您处理。特别是 Indys 被硬连线为使用 160x64 的控制台尺寸。但是,正在采取措施为这些 Indys 重写控制台代码,因此请密切关注此部分。


10. 在 ARM 平台上使用帧缓冲设备

10.1. Netwinders

对于 Netwinders(使用 ARM SA110 RISC 芯片 - 一款可爱的英国处理器),Cyber2000 帧缓冲驱动程序有两个版本 - 一个用于 2.0.x 内核,另一个用于 2.2.x 内核。在两个内核上启用和使用此驱动程序都非常简单,但是,旧版本是为深度和分辨率硬编码的(讨厌),但好消息是 2.2.x 内核中的较新版本更加灵活,但目前仍处于不稳定状态,因为它仍在开发中。要启动并运行此驱动程序,最好的选择是阅读内核源代码的 ARM 端口随附的文档。

Netwinders 使用 VGA 兼容芯片组,但不幸的是,还没有人将其 vgafb 移植到它。如果有人有空,这可能会发生。[如果有人给我一台 NetWinder 玩,我会这样做]


10.2. Acorn Archimedes

自 Linux 1.9.x 时代以来,Acorn 始终具有帧缓冲支持。但是,2.2.x 中的 Acornfb 驱动程序是全新的,因为通用帧缓冲接口在 2.1.x 内核(当然,它变成了 2.2.x)的开发过程中发生了变化。与以前一样,激活驱动程序并设置深度和分辨率非常简单。


10.3. 其他 ARM 端口 (SA7710s 等)

令人惊讶的是,甚至 Psion 5 和 Geofox 也有帧缓冲驱动程序!我被告知它可以很好地显示 Penguin。[请有人捐赠我一台 Psion 5!]


11. 使用多头帧缓冲器

本文档的这一部分由 Frederick A. Niles 慷慨捐赠,他保留本 HOWTO 这一部分中包含的信息的所有权利。


11.1. 简介

本文档的主要目标是帮助您开始运行 Linux 的双头配置。虽然此过程非常简单,但在此过程中可能会做错很多事情。

我重点关注的示例是在第二台显示器上运行 X 服务器。我发现这很好,因为您通常可以找到旧的 19 英寸到 21 英寸固定频率显示器,人们因为无法使用它们而赠送出来。这样,您可以从小型多频显示器启动,然后在漂亮的大显示器上使用 X。

请理解双头支持目前正在开发中,因此此信息变化迅速。在您阅读本文档时,本文档中的任何内容都可能已过时或完全不正确。

** 警告 ** 本文档是在任何 XFree86 4.0 发布之前编写的。如果您正在阅读本文档,并且 XFree86 4.0 已经发布,则许多事情可能已经改变。如果可以,请尝试获取本文档的较新版本。


11.2. 反馈

非常欢迎对此文档提供反馈。没有您的提交和投入,本文档将不复存在。因此,请将您的添加、评论和批评发布到.


11.3. 贡献者

以下人员为本迷你 HOWTO 做出了贡献。

  • Petr Vandrovec

  • Andreas Ehliar (x2x)

  • Marco Bizzarri (多个 X 服务器)


11.4. 标准免责声明

不对本文档的内容承担任何责任。您需要自行承担使用概念、示例和其他内容的风险。由于这是本文档的新版本,因此可能存在错误和不准确之处,这些错误和不准确之处可能会损坏您的系统。请谨慎操作,尽管这种情况不太可能发生,但我不对其承担任何责任。


11.5. 版权信息

本文档的这一部分版权归 Frederick Niles � 1999 所有,并根据以下条款分发

  • Linux HOWTO 文档可以完整或部分地以任何物理或电子媒介复制和分发,只要所有副本都保留此版权声明。允许并鼓励商业再分发;但是,作者希望收到任何此类分发的通知。

  • 所有翻译、衍生作品或包含任何 Linux HOWTO 文档的聚合作品都必须受此版权声明的约束。也就是说,您不得从 HOWTO 生成衍生作品并对其分发施加额外限制。在某些条件下,可以授予这些规则的例外;请联系以下地址的 Linux HOWTO 协调员。

  • 如果您有疑问,请联系 Linux HOWTO 协调员,地址为


11.6. 支持哪些硬件?

大多数显卡都假定它们将是系统中的唯一显卡,并且永久设置为主显示适配器的寻址。有一些例外情况。

  • Matrox 显卡:这包括 Matrox Millennium、Matrox Millennium II、Matrox Mystique、Matrox Mystique 220、Matrox Productiva G100、Matrox Mystique G200、Matrox Millennium G200 和 Matrox Marvel G200 显卡

  • MDA:这包括单色 Hercules 图形适配器等。这仅用于文本的第二头支持。

注意:只有第二个适配器必须是上述适配器之一。


11.7. 商业支持

本迷你 HOWTO 主要关注免费软件。但是,有一些商业 X 服务器具有多头支持。这些包括 Metro Link 的 (www.metrolink.com) Metro-X 和 Xi Graphics' 的 (www.xig.com) Accelerated-X。


11.8. 获取所有内容

您需要以下补丁和程序


11.9. 入门

您需要做的第一件事是用 "fbaddon" 补丁修补 Linux 源代码的副本。然后您需要配置内核并启用帧缓冲支持。如果您有 Matrox 显卡,请启用 Matrox 统一加速驱动程序支持以及您拥有的特定显卡类型。不要启用 VESA 帧缓冲支持。它可能会导致冲突。请务必启用多头支持(显然)。构建内核并重新启动。

现在您需要安装 "fbset" 程序并仔细阅读有关如何调整设置的所有文档。一旦您确定了设置,强烈建议使用 "/etc/fb.modes" 文件。fbset 程序包含一个 Perl 脚本,用于将您的 XF86Config 文件转换为 fb.modes 设置。我在附录 A 和 B 中包含了我的 octave/Borne shell 脚本,用于转换您的 XF86Config 文件。

您需要熟悉在一个显示器上使用帧缓冲设备,了解您的设置可能出现的任何与多头支持无关的问题。这可以节省以后的大量挠头。

我将重点解释如何在第二台显示器上运行 X,因为执行大多数其他配置只是该过程的显而易见的子集。


11.9.1. 移动控制台...

编译 "con2fb" 程序。如果您在没有任何参数的情况下运行它,您将收到以下用法消息:“usage: con2fb fbdev console”。

因此,示例命令将是 "con2fb /dev/fb1 /dev/tty6",将虚拟控制台编号六移动到第二台显示器。使用 Ctrl-Alt-F6 移动到该控制台,并查看它是否确实显示在第二台显示器上。


11.9.2. 使用 "" 调整此第二台显示器上的设置

仅在运行 "fbset" 命令的显示器上设置 "fbset" 设置。因此,您必须小心在第二台显示器上使用 "-fb" 标志。特别是,如果您什么都不做,您可能至少希望将虚拟垂直分辨率设置为您的实际垂直分辨率。

例如 "fbset -fb /dev/fb1 -vyres 600"

这将严重减慢文本模式的速度,但没有它,X 会很讨厌。


11.9.3. 设置 X 以支持帧缓冲。

framebuffer.txt 文件比我能解释得更好,但这里有两个要点。

确保将 "X" 的链接设置为指向 "XF86_FBDev"。

接下来,您需要在 XF86Config 文件中为帧缓冲设备添加一个监视器部分。这是一个示例

# 帧缓冲服务器 Section "Screen" Driver "fbdev" Device "Millennium" Monitor "NEC MultiSync 5FGp" Subsection "Display" Depth 8 Modes "default" ViewPort 0 0 EndSubsection Subsection "Display" Depth 16 Modes "default" ViewPort 0 0 EndSubsection Subsection "Display" Depth 24 Modes "default" ViewPort 0 0 EndSubsection Subsection "Display" Depth 32 Modes "default" ViewPort 0 0 EndSubsection EndSection

使用 "default" 模式,因为我认为任何其他模式都无法与 Matrox 帧缓冲一起使用。


11.9.4. 尝试在第二台显示器上启动 X 服务器

将环境变量 FRAMEBUFFER 设置为第二个帧缓冲。

"export FRAMEBUFFER=/dev/fb1" 或 "setenv FRAMEBUFFER /dev/fb1"

您需要启动 X 服务器,使其既匹配所选的颜色深度,又出现在您启动 X 服务器的同一台显示器上。

例如 "startx -- :0 -bpp 16 vt06"

此示例将在虚拟控制台六上以 16 位颜色启动“第零个”X 服务器。为另一个帧缓冲启动另一个 X 服务器时使用 “:1” 将允许您运行两个 X 服务器。


11.10. 摘要

在第二台显示器上运行 X 服务器所涉及的步骤可以总结如下

  • 获取内核补丁、fbset 和 con2fb

  • 修补内核、配置、重新构建和重新启动

  • 将 XF86_FBDev 部分添加到 XF86Config 文件并设置 X 符号链接

然后每次重新启动时

  • 移动控制台,例如 "con2fb /dev/fb1 /dev/tty6"

  • 调整设置,例如 "fbset -fb /dev/fb1 1280x1024"

  • 设置 FRAMEBUFFER,例如 "export FRAMEBUFFER=/dev/fb1"

  • 启动 X 服务器,例如 "startx -- -bpp 16 vt06"

您可以每次重新启动时通过 shell 别名自动执行此操作。它必须是别名而不是 shell 脚本,因为它需要检测当前控制台编号。这是我的 csh 别名,用于在第二台固定频率显示器上启动 X

alias startxfb = " setenv FRAMEBUFFER /dev/fb\!*; # 将 env var 设置为 cmd arg。 con2fb $FRAMEBUFFER /dev/$tty; # 将 fb 移动到当前 tty。 fbset -fb $FRAMEBUFFER 1280x1024@62; # 来自 /etc/fb.modes 的收藏 startx -- :\!* -bpp 16 vt0`echo $tty | cut -dy f 2`' # 此 tty 上的 X。 "

在我的 .cshrc 文件中,这些都在同一行上,没有注释,但在这里更容易阅读,并插入了换行符和注释。我只给出帧缓冲区的编号作为参数,它就会立即启动。

我不确定如何在 bash 中执行相同的别名。我不知道如何在 bash 中确定当前 tty 或获取别名的参数。如果有人告诉我,我会将其插入此处。但是,您可以使用 "tty" 命令获取当前 VT 的名称,并为每个 X 服务器制作两个单独的别名。


11.11. 其他注意事项和问题

  • "fbset" 和 "startx" 命令都必须从受影响的同一帧缓冲区运行。这严重限制了可以通过脚本自动执行多少这些命令。

  • XFree86 4.0 将具有“适当的”多头支持,但 3.3.1 没有。您可以使用 3.3.1 运行两个服务器,并使用 "x2x" 在它们之间切换...(请参阅下一个要点)

  • 非活动帧缓冲区将仅保留上次活动时的图像,不会发生更新。

  • 未选中的显示器在不活动时并不总是保留其状态。(但通常会保留)

  • Geert Uytterhoeven(帧缓冲区的维护者)和 Linus Torvalds 不同意当前“每个 VT 一个帧缓冲区”的多头控制台支持更改(即 "fbaddon"),因此它可能永远不会进入主流内核树。(这是第三手听到的,可能非常不真实。)

  • 如果您“违反规则”并从不同的显示器启动 X 服务器(运行 "startx"),机器最终可能会严重崩溃,键盘和鼠标输入都混在一起。

  • 内核源代码中的文档 framebuffer.txt 解释说,在运行 X 时,您可以直接在 XF86Config 文件中使用 Modeline 设置。使用 Matrox 帧缓冲区似乎会强制 X 服务器删除所有这些设置。因此,您一次只能有一个 ("default") 设置(与文本模式下的设置相同)。

  • XF86_FBDev 驱动程序是未加速的。但是,在 http://www.in-berlin.de/User/kraxel/xfree86/ 上有加速 Matrox 支持的补丁


11.11.1. 使 "" (即 / ) 工作

我尚未找到一种方法以 init level 5 启动双显示器配置(并实际将服务器放在第二台显示器或两者上)。虽然似乎很容易在 gdm/xdm Xservers 文件中添加一行,但您必须从同一帧缓冲区启动 X 服务器的约束阻止了明显的解决方案起作用。如果有人找到方法,请通过电子邮件发送给我,我会将其添加到此处。


11.11.2. 使用 "" 程序

有一个名为 x2x 的漂亮小程序,当您到达屏幕边缘时,它将为您切换 X 服务器。此程序的最后一个已知主页是:http://ftp.digital.com/pub/DEC/SRC/x2x/ 它也是一个可选的 Debian 软件包。我还没有尝试过,但一些用户报告成功。


11.11.3. 其他有用的命令

这些是现有的 linux 命令,在处理多头配置(尤其是在编写脚本时)时值得记住。

  • "chvt" 将允许您在虚拟终端之间切换。

  • "openvt" 在新的虚拟终端 (VT) 上启动程序。

  • "tty" 将报告当前终端的名称。


11.12. 附录 A. Octave "" 脚本

(注意 bpp 设置)

#!/usr/bin/octave -q bpp = 16; DCF = sscanf(argv(1,:), "%f"); HR = sscanf(argv(2,:), "%f"); SH1 = sscanf(argv(3,:), "%f"); SH2 = sscanf(argv(4,:), "%f"); HFL = sscanf(argv(5,:), "%f"); VR = sscanf(argv(6,:), "%f"); SV1 = sscanf(argv(7,:), "%f"); SV2 = sscanf(argv(8,:), "%f"); VFL = sscanf(argv(9,:), "%f"); pixclock = 1000000 / DCF; left_margin = HFL - SH2; right_margin = SH1 - HR; hsync_len = SH2 - SH1; # 3) vertical timings: upper_margin = VFL - SV2; lower_margin = SV1 - VR; vsync_len = SV2 - SV1; RR = DCF / (HFL * VFL) *1e6; HSF = DCF / HFL * 1e3; printf("mode \"%dx%d\"\n",HR,VR); printf(" # D: %3.2f MHz, H: %3.2f kHz, V: %2.2f Hz\n", DCF, HSF, RR); printf(" geometry %d %d %d %d %d\n", HR, VR, HR, VR, bpp); printf(" timings %d %d %d %d %d %d %d\n", ... pixclock, left_margin, right_margin, ... upper_margin, lower_margin, ... hsync_len, vsync_len); printf("endmode\n");


11.13. 附录 B. Bourne Shell "" 脚本

(这调用 octave 脚本 "cvtmode")

#!/bin/sh # Shell 脚本,用于将 XF86Config 文件转换为 fb.modes 文件。 # 使用 octave 脚本 cvtmode.m if [ -z $1 ]; then FILE=/etc/X11/XF86Config else FILE=$1 fi i=1 LEN=`grep Modeline $FILE | wc -l` while expr $i \< $LEN > /dev/null ; do CURLINE=`grep Modeline $FILE | cut -d'"' -f 3-20 | head -$i | tail -1 ` ./cvtmode.m $CURLINE echo " " i=`expr $i + 1` done


12. 使用/更改字体

要获得更改字体的功能,您需要 kbd-0.99。您可以从 ftp://ftp.win.tue.nl/pub/linux/utils/kbd 获取它

下载并安装 kbd-0.99 的一个优点是,您将能够将国际字体(即欧元符号)加载到控制台设备中。在我的键盘上,我可以有三个符号:美元符号、英镑符号和欧元符号。


13. 更改控制台模式

要获得更改模式(即 640x480、800x800 等)的功能,您需要 fbset(当前为 fbset-19990118.tar.gz)- 您可以从 http://www.cs.kuleuven.ac.be/~geert/bin/fbset-19990118.tar.gz ftp 下载它。这附带了有关如何操作的完整说明。


14. 设置 X11 FBdev 驱动程序

如果您没有使用 XFree86 3.3.3.1 或更高版本,强烈建议您升级到 XFree86 3.3.3.1,因为它包含用于帧缓冲设备的 FBdev X 驱动程序。否则,请按照以下步骤下载或构建您自己的用于旧版本 XFree86(如 3.3.2、3.3.3 等)的 FBdev 驱动程序。

转到 http://www.xfree86.org,下载最新的 XServer 源代码存档,解压缩并配置驱动程序,按照以下步骤操作

然后构建驱动程序。不要担心 m68k 引用,它支持 x86 平台。然后构建整个内容 - 这将花费很长时间,因为它是一个大型源代码树。

或者,如果您没有时间,可以从以下站点获取二进制文件。请注意,这些是“非官方”构建,您需要自行承担使用它们的风险。

对于 libc5,请使用以下网址中的文件:http://user.cs.tu-berlin.de/~kraxel/linux/XF68_FBDev.gz。对于 glibc2,请从以下 URL 下载 (http://user.cs.tu-berlin.de/~kraxel/linux/XF68_FBDev.libc6.gz http://pobox.com/~brion/linux/fbxserver.html

有报告称,在某些启用了 vesafb 功能的显卡上,X11 无法正常工作,如果发生这种情况,请尝试新的 XF86_FBdev X11 驱动程序。

此驱动程序与 vesafb 一起,还可以帮助在更高图形分辨率下运行 X11,对于某些不受当前任何 X11 驱动程序支持的图形芯片组,例如 Matrox G200 等。

要使用 X11 系统配置 XF86_FBdev 驱动程序,您需要编辑 XF86Config 以进行以下操作

Section "Screen" Driver "FBDev" Device "Primary Card" Monitor "Primary Monitor" SubSection "Display" Modes "default" EndSubSection EndSection

您还需要在键盘部分中设置 XkbDisable,或者使用 '-kb' 选项调用 XF86_FBDev 服务器以设置键盘,使其正常工作。如果您忘记设置 XkbDisable,则需要在您的 .Xmodmap 中添加以下行以理顺键盘映射。或者,您可以编辑您的 xkb 以反映以下列表。

这在 XFree86 3.3.3.1 中已修复,无论如何,最好升级到此版本,因为有很多错误修复,而且,正如我之前提到的,它包含 FBDev 作为驱动程序之一。

! 键盘代码设置 required keycode 104 = KP_Enter keycode 105 = Control_R keycode 106 = KP_Divide keycode 108 = Alt_R Meta_R keycode 110 = Home keycode 111 = Up keycode 112 = Prior keycode 113 = Left keycode 114 = Right keycode 115 = End keycode 116 = Down keycode 117 = Next keycode 118 = Insert keycode 119 = Delete

您可能需要对此进行一些调整(尝试从您正在使用的原始 X11 驱动程序复制原始定义,并将驱动程序的名称编辑为 FBDev),但这基本上是您使用 vesafb X11 驱动程序需要做的事情。

希望在未来的版本中,受支持的显卡的 X11 问题将得到修复。


15. 如何将 XFree86 模式行转换为帧缓冲设备时序?

如果您的机器上安装了 XFree86 (X11),并且您可以成功使用它,那么将 XF86Config 文件中的模式行转换为帧缓冲设备所需的时序就非常简单了。

帧缓冲设备需要以下字段

XFree86 模式行具有以下字段

为了将 XF86 模式行转换为一组帧缓冲设备时序,需要进行一些简单的计算。 作为示例,我们将研究如何转换从我的 XF86Config 文件中获取的模式行。

首先,计算所需的像素时钟频率。 XFree86 使用兆赫兹,而帧缓冲设备使用皮秒(我不知道为什么)。 将一百万除以 DCF。 例如:1,000,000 / 110.0 = 9090.9091

现在我们需要计算水平时序。

在我们的示例中,这将是

现在我们需要计算垂直时序。

对于我们的示例,这将是

现在我们可以使用这些信息来为所需的模式设置帧缓冲。 例如,对于 matroxfb 帧缓冲驱动程序,它需要以下内容

我在我的 /etc/lilo.conf 文件中放入了以下行

请注意,在这种情况下,像素时钟不被使用。 只有当你不喜欢默认的像素时钟频率时,它才是必要的。 你也可以将此作为参数提供。 设置像素时钟在本文档的其他部分有说明。


16. 更改 Linux 徽标

可以通过更改 include/linux 目录中的 linux_logo.h 文件来自定义它。 这是一个 C 头文件,手动更改非常困难,但是 Gimp 有一个插件可以从 http://registry.gimp.org/detailview.phtml?plugin=Linux+Logo 获取,它可以为你创建一个。 你只需要一张高度和宽度均为 80 像素,颜色少于 224 种的图片。 你可以让 Gimp 创建三种变体(2、16、224 色),或者自己创建它们并与插件一起使用。 它会询问你想要将文件存储在哪里,如果你愿意,可以将其放入 ($SRCDIR)/include/linux/linux_logo.h。 完成后,你所需要做的就是像往常一样重新编译内核,重启,如果帧缓冲工作正常,你将在启动时看到你的新徽标。


17. 寻找更多信息

对于那些有兴趣使用帧缓冲驱动程序的人,请将你的网络浏览器指向 http://www.linux-fbdev.org 以获取有关编程的更多信息。

你说法语吗? 这里有一个翻译在 http://www.freenix.org/unix/linux/HOWTO/mini/Vesafb.html