个人工具

UbuntuHelp:ConsoleFramebuffer/zh

来自Ubuntu中文

跳转至: 导航, 搜索

如果你的嵌入式系统给出这样的信息:“控制台:正在将显卡切换至80x30模式(Console: switching to colour frame buffer device 80x30)“,那么下面内容将能帮助你。

方案:加入黑名单(The Blacklist Solution)

控制台切换至frame buffer设备,是因为引导期间加载了frame buffer设备驱动。查看哪个frame buffer设备驱动被加载,可以运行命令:

    #lsmod

在我的系统中,我注意到这样的一行:

    gxfb 8832 1

那么,我该如何阻止加载这个驱动呢?Ubuntu提供了一个阻止自动加载驱动的方法。在/etc/modprobe.d中存在着一个黑名单。对我来说,我只要简单地在黑名单文件中加入

    blacklist gxfb

以後,我的系统不再尝试转换到frame buffer控制台。

增加控制台的可见行和可见列

选择喜欢的控制台分辨率

由于历史原因,控制台的默认大小为25x80字符,使用vga(640x480)模式。为了充分利用现代显示设备的分辨能力,你可以修改引导过程的设置。请注意,内核控制台驱动暂时还不能支持宽屏格式。从下表中选择一个合适的值,如0x31A(代表16位深1280x1024)。

Colours 640x400 640x480 800x600 1024x768 1152x864 1280x1024 1600x1200
--------+--------------------------------------------------------------
4 bits |  ?  ? 0x302  ?  ?  ?  ?
8 bits | 0x300 0x301 0x303 0x305 0x161 0x307 0x31C
15 bits |  ? 0x310 0x313 0x316 0x162 0x319 0x31D
16 bits |  ? 0x311 0x314 0x317 0x163 0x31A 0x31E
24 bits |  ? 0x312 0x315 0x318  ? 0x31B 0x31F
32 bits |  ?  ?  ?  ? 0x164  ?  ?

编辑/boot/grub/menu.lst

在kernel行的末尾增加 vga=0x31A 。注意,root=UUID 在不同的机器上是不一样的,请不要编辑它,以免导致无法启动。将选项splash 删掉,不然在切换分辨率时可能导致液晶显示器进入睡眠模式,虽然这不是什么大问题,但却很烦人。

title Ubuntu 7.10, kernel 2.6.22-14-generic
root (hd0,0)
kernel /vmlinuz-2.6.22-14-generic root=UUID=98c2b6c5-4f08-4fbf-bd9c-c470b286f614 ro vga=0x31A
initrd /initrd.img-2.6.22-14-generic
quiet
  • 小贴示:如果你只想暂时测试一下,那么可以在系统引导到grub的时候按下ESC键,进入引导菜单(boot menu),将vga=0x31A追加到kernel行末,继续引导Linux

  编辑/etc/initramfs-tools/modules

字符在传递到显示器之前,先寄存在帧缓存(framebuffer)中。我们需要告诉操作系统,我们修改了控制台的分辨率,以便显卡驱动程序做出相应调整。要做到这一点,只需将 vesafbfbcon 加入到/etc/initramfs-tools/modules

sudo bash
echo vesafb >> /etc/initramfs-tools/modules
echo fbcon >> /etc/initramfs-tools/modules

杏林小草注:粗略地讲,vesafb和fbcon是两种显卡驱动。

重建内核镜像(Rebuild the kernel image)

这一步是必须的,以便内核在下次引导的时候加载上述两个模块。升级内核後也需要重复这一步。

sudo update-initramfs -u

编辑/etc/modprobe.d/blacklist-framebuffer

在某些时候,Framebuffers会将计算机从睡眠状态中唤醒,然後自动失效(to wake up the computer from suspend mode and are hence disabled by default)。此时,可以找到blacklist vesafb这一行,在前面加上“#”(注释符)重现载入模块。

# blacklist vesafb

编辑/etc/modules

虽然,我们已经将vesa framebuffer从黑名单中剔除,但还是要在/etc/modules中追加一行:vesafb

echo vesafb >> /etc/modules

重启

希望你在重启後看到引导过程中出现的字体都变小了。

链接

本节综述了不同来源的信息。