整理一下Gentoo上让Mplayer在framebuffer中运行的设置过程

Wayne posted @ Mon, 09 May 2011 17:05:44 +0000 in Experience , 6219 readers

这两天一直在折腾。现在还在emerge kde-meta。这次基本是死磕状态,各种问题遇到一个解决一个,不留隐患。

要让mplayer能在framebuffer中运行,那么首先需要打开framebuffer。不知道该不该用“打开”这个词,反正就那个意思了。即便不准备在framebuffer中跑mplayer,只要没装X之类的东西,framebuffer也是很有必要开启的,因为原生的字体太大了,很多目录单纯ls一下都能超过屏幕边界,不得不再在后面加上 | less,可是这样一来颜色又没了。

打开framebuffer的话,主要就是编译内核,使之支持framebuffer。这部分昨天做的时候走了不少歪路,但最终发现还是应当按着Gentoo Wiki 上的相关说明 来做是最好的。

一开始是在内核中开启 “Support for frame buffer devices”,并启用下面的 firmware EDID

 

Device Drivers ->
	Graphics support  --->
		-*- Support for frame buffer devices  --->
			[*]   Enable firmware EDID
			...
			*** Frame buffer hardware drivers ***

然后选择要开的framebuffer的类型。“类型”这个词可能也不准确,应该说不同的驱动吧。昨天走的歪路就在这里。因为我顺手点进了KMS下的设置,而上面说,应当禁用掉Frame buffer hardware drivers中所列的所有驱动,不然会有冲突。事实上我用的是nvidia的闭源驱动,根本不关KMS的事。

我选择了uvesa,因为我用的是64位的内核。64位的内核跟uvesa之间的必然联系还有待研究,反正就是有这么一个说法,说64位内核应当使用uvesa而不是更普遍被使用的vesa。况且Gentoo的nVidia Guide中也说到

A framebuffer alternative is uvesafb, an advanced framebuffer.

既然高级,那么用就是了。开启uvesa的支持:

 

Device Drivers ->
	<*> Connector - unified userspace <-> kernelspace linker  --->
	Graphics support ->
		[*] Support for frame buffer devices  --->
			[*] Enable firmware EDID
			...
			<*> Userspace VESA VGA graphics support

这个时候需要编译一次内核。

编译完之后,直接emerge -av v86d。 这步我开始看漏了没做,结果后来一直不正常。补上之后才算完。装好v86d之后,继续设置内核。

先是要开启initramfs:

 

General setup  --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

然后把这个文件的路径写进去:

 

General Setup ->
	(/usr/share/v86d/initramfs) Initramfs source file(s)

然后再编译一次内核,并安装,作为要使用的内核。

 

这样的话,内核已经准备好了。接下去就是修改grub中的grub.conf文件,在启动的时候设定参数。网上流传最多的是关于vesa的设置,当然uvesa的也不少。wiki中写的是相当清楚:

 

kernel /boot/bzImage root=/dev/hda3 video=uvesafb:ywrap,mtrr:3,1024x768-32@70

直接写分辨率就行,唯一需要注意的是中间那个是小写的“x”,而不是*。

 

重启后,不出意外的话,framebuffer就启用了,能够看到字体什么的都变成分辨率设定的大小了。

 

接下去是搞mplayer。看了很多文章,貌似都说mplayer天生就支持输出到framebuffer中,但是我的mplayer在刚装好时“mplayer -vo help”了一下,并没有发现任何framebuffer相关的设备。强行写“mplayer -vo /dev/fb0” 或者 “mplayer -vo fbdev” 或者 “mplayer -vo fbdev2” 都是没用的,直接报告 “video: no video”。我估计着是编译问题。因为我的mplayer是emerge来的,很可能由于USE标记后少了功能

经过一番查找后,终于确定,USE里需要加上 fbcon. 编辑/etc/make.conf,加上了fbcon这个标记,然后emerge --info了一下,发现果然,VIDEO_CARDS那里出现了我所要的fbdev等几个东西。果断重新编译了mplayer,再使用"mplayer -vo fbdev2 xxxx", 视频画面成功出来了。


Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter