如何避免 Ubuntu Touch Emulator 中的“FrameBuffer”错误?

如何避免 Ubuntu Touch Emulator 中的“FrameBuffer”错误?

当我启动 Ubuntu touch 时,出现以下错误并且挂起:

“FrameBuffer::post eglMakeCurrent 失败”

仅当我使用专有显示驱动程序时才会发生这种情况。

所以我理解这可能是与驱动程序相关的问题,超出了 Canonical 的控制范围。因此我正在寻找一种解决方法来避免这种情况.(也许可以通过禁用模拟器中的 GPU 渲染?)

当涉及到应用程序开发时,这种情况就非常不舒服。

Ubuntu Touch 版本:Trusty Thar
主机操作系统:Trusty Thar
ubuntu-emulator 版本:0.2+14.10.20140429.1-0ubuntu1
我的 GPU:AMD Mobility Radeon HD 5430

谢谢你的帮助!

答案1

这里建议了四个选项。

1. 暂时禁用 GRUB 启动菜单中的帧缓冲区

进行此更改不会对您已安装的系统产生影响,并且被认为是安全的。如果您重新启动系统,此更改将消失。这是暂时的。

正常启动计算机,几秒钟后您将看到 GRUB 启动加载程序菜单。

正常启动计算机,几秒钟后您将看到 GRUB 启动加载程序菜单。

  • 使用箭头键,突出显示要编辑的标题(第一个 Ubuntu 条目应该可以),然后按“e”进入条目编辑器界面。现在您将看到所选标题的启动条目。
  • 再次使用箭头键突出显示“kernel”行,然后按“e”编辑该行。
  • 添加(不带引号)“vga=normal nomodeset”,然后按回车键退出编辑模式。
  • 按“b”键启动系统。

笔记:要取消更改,请按 Esc 键直到出现主菜单。


2. 在 GRUB 配置文件中永久禁用帧缓冲区

请参阅下面的“在 GRUB 中设置不同的帧缓冲区分辨率”。


3. 在 CMOS/BIOS 中禁用帧缓冲区 进行此更改不会影响您已安装的系统。但是,更改将保留,直到您将设置改回原样。

本 wiki 不会详细介绍此选项,原因很简单;许多系统都有不同的 BIOS 和版本。如何进入 BIOS 以及在何处进行更改可能会有很大差异。

  • 输入您的 BIOS
  • 找到帧缓冲区引用并禁用它
  • 保存设置并重新启动系统
  • 正常启动 Ubuntu 系统

4. 安装时禁用帧缓冲区

安装 Ubuntu 系统时,您可以告诉 Ubuntu 安装程序不要使用帧缓冲区。在开始菜单中输入 F6,然后添加不带引号的“vga=711”,然后按回车键。


在旧版本的 GRUB 中设置不同的帧缓冲区分辨率

笔记: 现代版本的 GRUB 从保存/etc/grub.d/在参数文件 下的部分构建其配置文件/etc/default/grub。要对现代 GRUB 进行更改,您需要了解如何更改文件/etc/default/grub,然后运行update-grub以创建新的 GRUB 配置文件/boot/grub/grub.cfg。下面描述的更改menu.lst仅适用于旧版本的 GRUB。

在 GRUB 的配置文件中,/boot/grub/menu.lst您可以为帧缓冲区设置不同的分辨率,或者禁用它。

您必须添加到所选菜单项的“内核...”行中的选项是“vga=value”(不带引号)。

  • 在内核行中添加“vga=normal”或“nofb”将禁用帧缓冲区
  • 如果“nofb”没有帮助,请尝试“nomodeset”来禁用内核模式设置
  • 添加“vga=ask”将使您能够在每次启动时设置一个值 - 适合测试各种模式。

因此,要禁用帧缓冲区,请在 menu.lst 中使用的活动内核的内核行中输入“vga=normal”或“nofb”,然后重新启动。每次更新内核版本或 GRUB 本身时,您都需要重新编辑 menu.lst 文件。这些更改将仅针对此特定 GRUB 条目禁用帧缓冲区;要针对所有内核禁用它们,请参见下文。

示例(仅适用于旧版本的 GRUB):

title           Ubuntu, kernel 2.6.15-20-386
root            (hd0,4)
kernel          /boot/vmlinuz-2.6.15-20-386 root=/dev/hda5 ro nofb
initrd          /boot/initrd.img-2.6.15-20-386
savedefault
boot

对于其他分辨率,请参阅以下列表:

Colour depth        640x480     800x600     1024x768    1280x1024   1400x1050   1600x1200
8  (256)        769     771     773     775             
15 (32K)        784     787     790     793             
16 (65K)        785     788     791     794     834     884
24 (16M)        786     789     792     795

因此,要使用分辨率为 1024x768 且颜色深度为 16 位的帧缓冲区,您需要将“vga=791”(同样不带引号)添加到内核行(您正在使用的活动内核 - 每次更新内核版本时,您都需要重新编辑 menu.lst)。示例:

title           Ubuntu, kernel 2.6.15-20-386
root            (hd0,4)
kernel          /boot/vmlinuz-2.6.15-20-386 root=/dev/hda5 ro vga=791
initrd          /boot/initrd.img-2.6.15-20-386
savedefault
boot


只需在所有内核的 menu.lst 文件中禁用帧缓冲区即可

可以修改 menu.lst 文件以禁用所有内核和所有新内核的帧缓冲区。/boot/grub/menu.lst使用您喜欢的任何编辑器编辑该文件,并具有 sudo 权限。请务必备份原始文件,以防万一您真的搞砸了。

sudo cp /boot/grub/menu.lst  /boot/grub/menu.list.backup_date
sudo nano /boot/grub/menu.lst

我们对以下几行感兴趣。最后一行是需要更改的。请注意,与其他配置文件不同,2 个注释 ## 标记实际上是 Grub 和 update-grub 命令的注释。一个 # 只是 grub 的注释,但它是 update-grub 命令的配置行。请务必小心,确保 # 中的 # 正确无误。

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
## The following Line is the default for all kernels. Yours may vary the nofb option disables the framebuffer
## the nosplash option also disables the fancy splash screen. You may want to disable this to allow easier troubleshooting of the system
# defoptions=quiet nosplash nofb

一旦最后一行按您的需要编辑完毕,您需要以 root 权限运行 update-grub 命令,以便使用新选项修复所有 grub 内核条目。

sudo update-grub

现在应该为所有当前和新内核禁用帧缓冲区。

其他帧缓冲区工具和调整

*此部分需要扩展*

本 wiki 的大部分内容都是关于如何禁用帧缓冲区,但它确实有一些实际用途。帧缓冲区设备允许的一些功能包括:-无需安装 X 系统即可在控制台上播放视频。-一些游戏可以使用帧缓冲区 -自定义控制台背景以包含徽标和其他图像 -无需安装 X 即可使用图像查看器。-甚至可以将 X 配置为使用帧缓冲区设备而不是特定的视频卡驱动程序。

如果确实希望使用和探索帧缓冲区,该fbset命令允许人们动态地更改帧缓冲区的几个设置。

sudo apt-get install fbset

要查看具有帧缓冲区功能的其他应用程序(非完整列表),请按照以下步骤操作。

apt-cache search framebuffer | less

Mplayer 和其他播放器也可以支持帧缓冲。

~来源~

相关内容