By Toradex 秦海
1). 简介
对于一些嵌入式领域应用如医疗,汽车等,多屏显示应用是需要的,因此本文就基于NXP iMX6 嵌入式ARM平台来实现双屏显示应用。
本文所采用的测试平台为来自Toradex的ARM 计算机模块平台Colibri iMX6DL搭配其对应的开发载板Colibri Eva Board.
2. 准备
a). Colibri iMX6DL系统分别通过X18连接LVDS LCD屏(1024x768)和X5 DVI接口连接标准DVI液晶显示器。
b). Colibri iMX6DL 模块需要连接FFC排线和Colibri Eva Board X6连接,如下图所示
c). Colibri iMX6DL 系统使用Toradex Linux Release V2.6.1,不过原生没有包含Qt库,需要基于Toradex Openembedded环境添加Qt相关并重新编译,建立环境和编译相关请参考这里,涉及到添加Qt5以及linuxfb支持的修改请参考下面两个patch文件,然后根据这里说明将重新编译好的image文件更新到Colibri iMX6DL模块上面去。
./ angstrom-lxde-image.bb 添加Qt5 X11支持库
https://github.com/simonqin09/qt5patch/blob/master/angstrom-lxde-image_qt5_x11.patch
./ qtbase_git.bb添加linuxfb支持
https://github.com/simonqin09/qt5patch/blob/master/qtbase_git_linuxfb.patch
d). Colibri iMX6DL Uboot环境变量如下设置来使能双屏配置,此配置LVDS作为主屏显示X11桌面,DVI显示器作为副屏
----------------------------
Colibri iMX6 # setenv vidargs ‘video=mxcfb0:dev=lcd,1024x768M@60,if=RGB666 mxc_hdmi.only_cea=1 video=mxcfb1:dev=hdmi,1920x1080M@60,if=RGB24 fbmem=32M’
----------------------------
3). 播放视频测试
a). 利用videotestsrc元素测试DVI显示器 ”/dev/video18” 输出
----------------------------
gst-launch-1.0 -v videotestsrc !imxv4l2sink device=/dev/video18 force-aspect-ratio=true overlay-width=1920 overlay-height=1080
----------------------------
b). 测试DVI显示器播放1080P 高清视频“fullhdvideo.mkv”
----------------------------
gst-launch-1.0 -v filesrc location=/home/root/fullhdvideo.mkv ! video/x-matroska !aiurdemux !vpudec !imxv4l2sinkdevice=/dev/video18 force-aspect-ratio=trueoverlay-width=1920 overlay-height=1080
----------------------------
c). 测试LVDS和DVI显示器同时播放1080P 高清视频“fullhdvideo.mkv”
----------------------------
gst-launch-1.0 -v filesrc location=/home/root/2528.mkv ! video/x-matroska !aiurdemux !vpudec !imxv4l2sink device=/dev/video18 force-aspect-ratio=true overlay-width=1920 overlay-height=1080 & gst-launch-1.0 -v filesrc location=/home/root/2528.mkv ! video/x-matroska !aiurdemux !vpudec !imxv4l2sink overlay-width=1024 overlay-height=768
----------------------------
4). Qt 5应用程序运行
a). 测试程序请参考这里说明,文章是基于Colibri iMX7 ARM计算机模块平台的,针对本文的Colibri iMX6只需要更改下面代码中” this->gpio_out”变量为数值为”38”, 然后在载板上面将X10连接器SODIMM_127管脚和X21连接器LED1管脚相连。
https://github.com/simonqin09/QtGPIOProject/blob/master/mainwindow.cpp
b). 将修改编译好的程序放到Colibri iMX6模块上面进行执行
----------------------------
root@colibri-imx6# ./helloworldUI -platform linuxfb:fb="/dev/fb2"
Sucessfully export GPIO-38
Sucessfully set GPIO-38 direction
GPIO-38 value set low
Sucessfully set GPIO-38 value
GPIO-38 value set high
……
----------------------------
c). 清理显示,执行下面命令
----------------------------
root@colibri-imx6# cat /dev/zero > /dev/fb2
----------------------------
5). 总结
本文基于NXP iMX6嵌入式平台测试了双屏显示,其模式是一个主显示,另外一个基于frame buffer来进行操作,并具体测试了播放视频以及运行Qt程序,尽管还有一定局限性,但是已经可以实现一些比较基本的双屏需求。