G.2. 文本模式 100x37

本章由 Cedric Adjih 友情提供,尽管我修改了一些小的部分。请注意:另一种在文本模式下获得更好分辨率的方法是使用 framebuffer 驱动程序(如上面的 X-Windows 章节所述)。此方法需要内核重新配置(一些 Linux 发行版已经包含合适的内核)以及在以下文件中添加新条目 (vga=NNN):/etc/lilo.conf。在文本模式下,即使对于 2.0 版本之前的 VESA BIOSes 也能工作,至少在我可以测试的模型上是这样。虽然 SVGATextMode 方法可能更快(尚未对此进行检查)。

关于 Neomagic 芯片组 NM20xx 一个鲜为人知的事实是,您可以运行 100x37(即 800x600)的文本模式。这种文本模式非常好(与丑陋的 80x25 相比)。我用 HP OmniBook 800 尝试过,并认为它也可能适用于其他使用 NeoMagic 芯片的笔记本电脑。

主要问题是设置起来有点困难,并且如果您在使用 SVGATextModerestoretextmode 命令时出错,LCD 上的一些结果可能会令人害怕。尽管我多次尝试出错但并没有损坏我的 LCD,免责声明:这可能会损坏您的硬件。您已被警告。请自行承担风险遵循以下说明。如果发生任何不好的事情,我概不负责。

G.2.1. 概述

您需要执行三个主要步骤

  1. 使 Linux 能够在 800x600 文本模式下启动。问题是,在完成以下两个步骤之前,您将看不到任何文本。

  2. 自动运行 restoretextmode 并使用正确的寄存器数据。

  3. 自动运行 SVGATextMode

G.2.2. 更多细节

我修改的所有文件,目前都可以在 我的页面 上找到

G.2.2.1. 使 Linux 能够在 800x600 下启动

最近的内核 (2.2.x) 需要在定义了 CONFIG_VIDEO_GFX_HACK 的情况下编译。默认是关闭。(查看/usr/src/linux-2.2.x/arch/i386/boot/video.S)

这是通过将参数 vga=770 传递给旧内核或将 vga=7 传递给 2.2.x 内核来完成的。例如,使用lilo.conf:

image=/boot/bzImage-modif
label=22
append="svgatextmode=100x37x8_SVGA" #explained later
vga=7
read-only

G.2.2.2. 在启动时运行 restoretextmode 和 SVGATextMode

在启动时运行 restoretextmodeSVGATextMode。您必须安排在启动时运行 restoretextmode <textreg.dat 文件的名称>SVGATextMode 100x37x8_SVGA

一个例子textreg.dat用于 restoretextmode 的 (使用 savetextmode 获得) 在我的 tar 存档中的tmp/,以及一个例子/etc/TextConfig.

因为我很懒,所以我只是将 SVGATextModerestoretextmode 放在了/etc/rc.boot/kbd来自我的 Debian/GNU Linux 的文件,它在启动时执行(也可在 tar 存档中找到)。

G.2.2.3. 现在是关键点

如果您在正确的视频文本模式下没有使用正确的 SVGATextMode,将会显示令人讨厌的东西:这就是为什么当我也设置 vga=7 时,我还将环境变量 "svgatextmode=100x37x8_SVGA" (任意名称)传递给内核(使用 lilo.conf 中的 append=xxx):该脚本/etc/rc.boot/kbd测试此变量,并且仅在满足条件时调用 restoretextmodeSVGATextMode

G.2.3. 路线图

  1. 使用 CONFIG_VIDEO_GFX_HACK 重新编译内核 2.2.x

  2. 将带有正确参数的 restoretextmode 插入到初始化脚本中,无需其他更改。

  3. 以普通文本模式 (80x25) 启动,但使用 restoretextmode:您应该看到屏幕变为 100x37,但只有 80x25 可用。暂时不要使用 SVGATextMode。

  4. 最好像我一样条件化您的初始化代码,以保持在两种模式下启动的可能性:您现在可以通过一些重启来测试这一点(启动或不启动 restoretextmode)。

  5. 使用参数 vga=7 (lilo.conf) 以 100x37 文本模式启动,您应该在某个时候看到白色背景,但字符将是黑底黑字。这没关系。您现在必须盲目重启。

  6. 在初始化脚本中的 restoretextmode 之后插入 <路径>/SVGATextMode 100x37x8_SVGA。

  7. 使用 vga=7 (lilo.conf) 重启

  8. 现在应该可以了。尽情享用。