Linux 版 (精华区)

发信人: howdoit (教练让我上场!!!), 信区: Linux
标  题: 版本2.2内核的帧缓冲(framebuffer)选项
发信站: 哈工大紫丁香 (Tue May 18 08:55:47 1999), 转信

《Linux公报》……让Linux更富魅力!

   版本 2.2 内核的帧缓冲(frame

                      buffer)选项

                            By Larry Ayers

                         翻译:Zou hongbo

                                引言

    随着新年的来临, 期盼已久的 Linux 2.2 稳定版本也即将发行;

这个版本包含了大量 新特性和新设备驱动程序. 这些新特性中有一项

是一种新的驱动虚拟控制台的设备类型, 即帧缓冲(frame buffer)设

备 (/dev/fb[0-7].) 这种设备类型对于那些使用 intel 硬件结构的

Linux 用户是无所谓的, 但是对于那些 使用 Alpha, Sparc, PPC, 或

任何其他 Linux 支持的平台的用户们却是极其有益的, 因为 帧缓冲

控制台意味着提供了一个独立于硬件的控制台驱动设备. 

    Geert Uytterhoeven, 一个比利时程序员, 他是帧缓冲驱动主要

开发者之一, 写了 一个简洁的说明, 它已经包含在内核源码的帧缓冲

文档中: 

          帧缓冲设备对图象硬件设备提供了一种抽象化处理.

      它代表了一些视频硬件设备, 允许应用软件通过定义明确

      的界面来访问图象硬件设备, 因此软件无需了解任何涉及

      硬件低层驱动的东西(如硬件寄存器).

    Intel 机器的用户已经有办法调整控制台屏幕显示正文的分辨率,

例如通过 video=ask Lili 参数, 或者是使用工具 SVGATextMode. 相

当一段时间内 我使用 SVGATextMode 将控制台正文显示分辨率设置为

114x34. 它做的不错, 但是在配置最新的 2.2 beta 内核时, 我忍不

住对Console Drivers 子屏幕 中提供的选项发生了兴趣. 正好这段时

间我用的是 Matrox Mystique 显示卡, 所以当我 看到有一个新的

Matrox 卡帧缓冲驱动程序(带有 Mystique 支持)时, 便决定 做一次

尝试. 

                              安装花絮

    在第一次启动带有 Matrox 帧缓冲支持的内核时, 我能够看到显

卡已经识别 出(在滚动的启动信息中), 企鹅徽标出现在屏幕右上角,

看起来至少这部分编译到内核 中的特性已经在工作了, 但是控制台屏

幕依然是老的 80x25. 回过来再查文档, 我发现 一个实用程序 fbset

对我有所帮助. 这个小程序(由Geert Uytterhoeven 和 Roman Zippel

完成)用来改变和查询帧缓冲的当前模式. 更重要的是, fbset的安装

过程将产生特殊设备文件 /dev/fb[0-7], 它们是 帧缓冲功能所必须

的. fbset下载档案在这个 FTP 站点 . 

    在内核源码目录 Documentation 的 fb 子目录中有另一份 文档,

名称为 matroxfb.txt, 作者是 Petr Vandrovec, 一个捷克开发员, 他

负责 Matrox 的帧缓冲驱动程序, 这份文档可以极大地帮助那些想设

置 帧缓冲工作模式的人们. 还有另一份叫作 vesafb.txt 的文档, 在

设置其它服从 VESA-2.0 规范的显卡模式时可以参考. 

    有两种方式可以设置内核使用的帧缓冲模式. 在实验阶段, 通过

Lilo 参数尝试设置 模式是一条捷径. 现在我们假设你系统中稳定的

内核是 /etc/lilo.conf 的 第一个, 编译了帧缓冲的内核是第二个,

名称为 bzImage-2.2. 启动你的机器, 当 LILO 提示符出现时, 按住

换档(shift)键. 这里是一个设置模式的例子: 

LILO bzImage-2.2 video=matrox:vesa:0x188 

    如果设置的模式是合理的, 控制台屏幕将在启动信息开始滚动后

迅速切换到新模式 (本例中是 900x720). 有关的启动信息就象下面列

出的几行: 

matroxfb: Matrox Mystique (PCI) detected 

matroxfb: 960x720x8bpp (virtual: 960x4364) 

matroxfb: framebuffer at 0xE0000000, mapped to 0xc4807000, size 4194304 

Console: switching to colour frame buffer device 120x45 

fb0: MATROX VGA frame buffer device

    如果你喜欢这个模式, 可以将上面的 Lilo 命令改变一下直接插

入到 /etc/lilo.conf 文件中; 这一行看起来应该如下所示: 

append="video=matrox:vesa:392" 

    引号是必不可少的, 同时注意十六进制数 0x188 已经转换为十进

制数 392, 这是因为 Lilo 不能识别 lilo.conf 文件中的十六进制数.

    一旦支持帧缓冲的内核启动后, 就可以使用 fbset 实用工具切换

至其它模式. 更多的(模式)参数可以从 X 的模式导出, 但我不想在这

方面花费时间, 因此寻找了一个 快速解决方案. 在修改 lilo.conf 使

它自动设置模式之前, 我在 Lilo 提示 符下尝试了数个不同的十六进

制数字. 每次尝试启动后, 我都直接运行 fbset, 不带任何参数. 这

样运行 fbset 将输出可以用在 /etc/fb.modes 配置文件中的当前屏幕

模式文本. /etc/fb.modes 配置文件在初始时不存在. 下面是输出信息

的一个样本: 

kbdmode "name"

    # D: 56.542 MHz, H: 45.598 kHz, V: 59.998 Hz

    geometry 960 720 960 4364 8

    timings 17686 144 24 28 8 112 4

endmode

    输出的这几个模式文本可以剪贴到一个新的 /etc/fb.modes 文件

中, 代入不同的助记名称到 "name&quott;. 其中一个有用模式是设置

一个基本的, 单色的 文本模式, 或者通过尝试文档中描述的文本模

式, 或者简单一点直接运行 fbset -depth 0得出. 在高颜色深度时,

SVGAlib 控制台图像程序将不能正常 工作在帧缓冲控制台上. 一旦一

个 fb.modes 文件生成后, 就可以通过 fbset name 来改变帧缓冲模式,

在这里 "name" 是文件中的一个 模式名称. 

                            帧缓冲和 X

    自然地, 许多读者关心的一个大问题是 "X 窗口系统能否从一个

帧缓冲的控制台 上启动运行?". 答案是 "视情况而定.". 一些 X 服

务器和显卡的组合 是存在问题的, 特别是在 X 和虚拟控制台之间切

换时. 这个问题也存在于 SVGATextMode 中. 我的 XFree86 3.3.3

SVGS server 和 Matrox 卡在帧缓冲控制台上工作得很好. 你的运气

也许不同. 

    这里有一个特殊的以源码发行的 X 服务器; 它的名字是

XF86_FBDev, 包含 在 XFree86 3.2 (及以后) 的源码中. 这个服务器

不带加速, 无运行码, 主要是为那些 在非标准硬件上运行 Linux(如

PPC)的用户准备的. 

                                总结

    短时间内, 大多数 Linux 用户也许不会使用帧缓冲内核选项. 在

某些硬件上, 它有 优势, 但是有效地判断(模式)从而使用它是要花费

一些时间的, 而且控制台用户可以 得益, 而对于大部分时间花在 X

窗口下的人们无甚好处. 我想下一代(2.2)稳定内核 之所以带有帧缓

冲设备是因为帧缓冲设备不是依附于 Intel 结构, 而当前的控制台

编码则不然. 可以预料 XFree86 4.0(可能今年推出)将在它的服务器

模块中包括更多 的帧缓冲兼容性, 就象当前的 SVGA 服务器中的一

样. 

Last modified: Sun 3 Jan 1999  

  

                       版权所有 (C) 1999 NJLUG

           出版于第36期《Linux公报》1999年1月 中文版第三期

                            


--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.952毫秒