LeMaker Guitar:显示功能使用说明

From BananaPro/Pi
Jump to: navigation, search
This page is a translated version of the page LeMaker Guitar:The instructions on display and the translation is 100% complete.

Other languages:
English • ‎中文(简体)‎

显示设备

s500 平台最新的显示框架已在 v1601 版本的系统镜像中体现,可同时支持多种显示设备,如下:

  • HDMI
  • LCD(LVDS & RGB)
  • DSI(MIPI)
  • CVBS

目前, LeMaker Guitar v1.3 + LeMaker Guitar Base Board仅支持 HDMI 及 LCD, CVBS 功能将在 LeMaker Guitar Base Board B Plus底板及 LeMaker Guitar v1.4 组合中得到支持,其对应的软件已更新到 Github.下面重点讲述 HDMI和LCD 的使用:

显示模式

LeMaker Guitar 可支持异屏异显和异屏同显模式,其中最多支持两种显示设备同时输出。一般情况下选择屏接口+TV 接口输出, 如 HDMI+LCD, HDMI+DSI, CVBS+LCD,CVBS+DSI, 也可以选择 HDMI+CVBS 两种接口同时输出。

异屏同显

系统默认工作在该模式,HDMI 作为主设备,LCD 作为从设备;如果 HDMI 输出 1080P 图像,且主设备的显示图像镜像到 LCD[1024*600]时,将会进行 scale 处理,导致 LCD 上显示的画面模糊; 如果 LCD 的分辨率为 1080P,将输出点对点的图像,显示画面不受影响。

异屏异显

系统默认工作在异屏同显模式,可通过如下命令切换到异屏异显:

# echo 0 > /sys/class/graphics/fb0/mirror_to_hdmi

在异屏异显模式,HDMI 作为主设备(/dev/fb0),LCD 作为从设备(/dev/fb1);用户可通过/dev/fb1接口往从设备的 framebuffer 中写入显示内容,最终写入的内容将显示在 LCD 上,可参考下面的测试程序:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
#define FB_FILE "/dev/fb1"
#define FAIL -1
#define SUCC 0
int fb = 0;
char *pFb = NULL;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
void draw_square(char *fp, int row, int colum, int color)
{
	int i, j;
	int bpp = vinfo.bits_per_pixel;
	int steps = finfo.line_length /(bpp >>3);
	int *buf = (int *)fp;
	for(i=0; i < row; i++)
		{
		for(j=0;j < colum; j++)
		{
			buf[i*steps+j] = color;
		}
	}
}
int main(void)
{
	fb = open(FB_FILE, O_RDWR);
	if(fb < 0)
	{
		printf("Don't open the framebuffer device\n");
		return FAIL;
	}
	if(ioctl(fb, FBIOGET_FSCREENINFO, &finfo))
	{
		printf("Reading fixed information failed\n");
		return FAIL;
	}
	if(ioctl(fb,FBIOGET_VSCREENINFO, &vinfo))
	{
		printf("Reading variable information failed\n");
		return FAIL;
	}
	pFb = (char *)mmap(NULL, finfo.smem_len, PROT_READ | PROT_WRITE,
	MAP_SHARED, fb, 0);
	if(pFb == MAP_FAILED)
	{
		printf("Error: Failed to map framebuffer device to memory\n");
		return FAIL;
	}
	memset(pFb, 0x0, finfo.smem_len); //clear buffer
	sleep(1);
	printf("start to draw red...\n");
	draw_square(pFb, vinfo.yres, vinfo.xres, 0x00ff0000);
	sleep(2);
	printf("start to draw green...\n");
	draw_square(pFb, vinfo.yres, vinfo.xres, 0x0000ff00);
	sleep(2);
	printf("start to draw blue...\n");
	draw_square(pFb, vinfo.yres, vinfo.xres, 0x000000ff);
	sleep(2);
	munmap(pFb, finfo.smem_len);
	close(fb);
	return SUCC;
}

主从显示设备设置

系统默认情况下, HDMI 做为主显示设备; 可通过下面的方法, 将 LCD 设置为主显示设备, HDMI设置为从显示设备。但是 uboot 和 kernel 的 DTS相关配置需要同步修改,否则出现花屏

编辑DTS文件

uboot DTS 文件存放位置: u-boot-actions/arch/arm/dts/lemaker_guitar.dts
kernel DTS 文件存放位置:linux-actions/arch/arm/boot/dts/lemaker_guitar_bbb.dts

  • 将 LCD 设置为主显示设备,如下所示:

注意要同步修改uboot和kernel的相关配置:

framebuffer {
    compatible = "actions,framebuffer";
    def_display = "lcd";//主显示设备可设置为:"hdmi","lcd","cvbs","dsi"
};
  • 关闭其他的显示设备

如果 CVBS 及 DSI 显示设备对应的配置节点处于"okay"状态, 须将其设置为"disabled", 因为显示框架只支持两种显示设备的组合。

dsi: dsi@b0220000 {
    status = "disabled";
    ...
    ...
};
...
...
cvbs: cvbs@b02b0000 {
    status = "disabled";
    ...
    ...
};

更新DTB文件

  • 重新编译 u-boot-dtb.img 和 kernel.dtb,参考如下链接:

http://wiki.lemaker.org/LeMaker_Guitar:How_to_use_LeMaker_Guitar_BSP
编译后需要的文件:
u-boot-dtb.img: linux-actions-bsp/build/s500/u-boot/u-boot-dtb.img
kernel.dtb: linux-actions-bsp/build/s500/misc/kernel.dtb

  • 更新

将编译生成的u-boot-dtb.imgkernel.dtb复制到Guitar的 /home/lemaker目录下,然后通过以下命令更新:

//更新uboot镜像:
# sudo dd if=/home/lemaker/u-boot-dtb.img of=/dev/mmcblk0 bs=512 seek=6144
//更新kernel的DTB文件
# sudo mount /dev/mmcblk0p1 /mnt
# sudo cp -f /home/lemaker/kernel.dtb /mnt
# sudo umount /mnt
//同步文件并重启系统
# sudo sync && reboot

注意; 1. uboot 的 DTB 文件和镜像文件已合并在 u-boot-dtb.img 文件中; 可通过更新 u-boot-dtb.img镜像文件来更新 DTB 文件。
2. 如果用户更倾向于使用 LCD,HDMI 可有可无,那最好将 LCD 设置为主显示设备,HDMI 作为从显示设备,v1511 系统版本即属于该场景的应用。

HDMI 显示设备分辨率设置

新显示框架下 HDMI 可配置分辨率列表如下:

VID Resolution
2 720*480p-60
4 1280*720p-60
16 1920*1080-60
17 720*576p-50
19 1280*720p-50
31 1920*1080p-50

HDMI 分辨率自适应

默认情况下系统可根据获取的 EDID 来设置 HDMI 的输出分辨率,即分辨率自适应;该检测发生在 uboot 阶段,因此在启动前需插上 HDMI 设备;可通过uboot启动时的log判断是否成功获取EDID。

parse hdmi edid information successfully
In: serial
Out: serial
Err: serial
Net: owl_mac

如果成功获取,会看到"successfully"。

手动设置HDMI分辨率

在 HDMI 分辨率自适应失败的情况下,系统默认输出的分辨率为720P@60HZ;可通过同步修改 uboot 及 kernel 的 dts 配置文件来重新设置。例如:将系统默认输出的分辨率设置为"720x480p@60":

hdmi: hdmi@b02c0000{
    ...
    ...
    default_resolution = "720x480p-60";
};

注意: 所设置的分辨率需从 HDMI 分辨率支持列表中选取。

如何查看 HDMI 输出分辨率

  • HDMI作为主显示设备

在 X-Window 窗口下可通过如下命令查看当前系统的分辨率:

# xrandr
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 720 x 480, current 720 x 480, maximum 720 x 480
default connected 720x480+0+0 0mm x 0mm
720x480 0.00*
  • HDMI作为从显示设备

HDMI 作为从显示设备时,其显示的内容是通过主显示设备显示的内容 scale 出来的。所以此时不能使用 xrandr 命令来查看 HDMI 输出分辨率,可通过如下方法查看:

# cat /sys/devices/b02c0000.hdmi/vid
2

通过查看 HDMI 分辨率支持列表可知当前 HDMI 输出分辨率为"720x480p-60"。

CVBS 显示设备分辨率设置

CVBS 默认支持两种制式标准:
1. PAL: 720*576i-50Hz
2. NTSC: 720*486i-60Hz
配置默认分辨率的方式和 HDMI 类似,但是 CVBS 没有 EDID 的读取,所以用户配置什么就输出什么,当前系统默认的配置是 PAL 制式,如下:

cvbs:cvbs@b02b0000{
    default_mode = "PAL";
    ...
    ...
};
 default_mode: 可选的配置有"PAL"和"NTSC"两种,根据实际需求配置。

其它

注意:S500只支持HDMI和VGA接口显示器,不支持DVI接口。