全志科技公司A83T Qt 支持双屏显示

目前A83T支持单屏显示,首屏为LCD或者首屏为hdmi,都使用无论使用SCREEN0还是SCREEN1都是使用FB0作为framebuffer,在android下可以实现LCD和HDMI同样屏幕显示,而我们需要LCD和HDMI分别显示。
FrameBuffer采用的是linux下的framebuffer分层驱动,fbmem.c作为通用层,然后驱动层实现对fb操作的可选部分,包括一系列的fb_ops。A83T硬件上有一个DE,然后通过TCON0和TCON1实现对显示的输出,其中TCON0控制LCD,实现对lvds,dsi,rgb接口的LCD控制,TCON1实现对HDMI的控制,整体的硬件框架如图。
全志科技公司A83T Qt 支持双屏显示
全志科技公司A83T Qt 支持双屏显示
从框架上来看是可以实现双屏异显的,目前系统无法实现可能还和以前一样硬件上为了和android配合接下来抽丝剥茧把驱动撸一遍,应该就能找到原因。
驱动层上共注册了两个设备,一个是disp,另一个是hdmi,通过disp的probe对全盘进行初始化,通过hdmi的probe进行hdmi的底层初始化。
[ 0.750562] [dev_disp]disp_module_init
[ 0.750989] [dev_disp]disp probe function
[ 0.751092] [dev_disp]start disp_init
[ 0.751297] [dev_disp]display mode is 0
[ 0.751398] [dev_disp]disp_mode is 0,base=0xf1000000, size=0x400000, irq=0
[ 0.751665] [dev_disp]disp_mode is 1,base=0xf1c0c000, size=0x3fc, irq=118
[ 0.751767] [dev_disp]disp_mode is 2,base=0xf1c0d000, size=0x3fc, irq=119
[ 0.751947] [dev_disp]disp_mode is 3,base=0x0, size=0x0, irq=0
[ 0.752048] [dev_disp]disp_mode is 4,base=0xf1c26000, size=0x2fc, irq=0
[ 0.752227] [dev_disp]disp_mode is 5,base=0x0, size=0x0, irq=0
[ 0.752325] [dev_disp]disp_mode is 6,base=0x0, size=0x0, irq=0
[ 0.752503] [dev_disp]disp_mode is 7,base=0x0, size=0x0, irq=0
[ 0.752692] [dev_disp]boot para type is 1,mode is 0
[ 0.752791] [disp_display]start bsp_disp_init
[ 0.753406] [disp_display]start init hdmi
[ 0.753592] [disp_hdmi]hdmi is used,start disp_init_hdmi
[ 0.753692] [disp_hdmi]disp number is 0
[ 0.753868] [disp_hdmi]disp number is 1
[ 0.753965] [disp_hdmi]disp 1 is output by hdmi
[ 0.754064] [disp_hdmi]mode is 4,irq number is 119
[ 0.754243] [disp_hdmi]start check hdmi is supported and register
[ 0.754429] [disp_hdmi]start hdmi init call clk init
[ 0.754605] [disp_hdmi]start hdmi clk init
[ 0.754710] [disp_hdmi]init hdmi and register
[ 0.754954] [dev_disp]total screens is 2
[ 0.792619] [dev_disp]start work
[ 0.792728] [dev_disp]bsp disp sync with hw
[ 0.793464] [dev_disp]output type is not hdmi or hdmi is registed
[ 1.256339] [dev_hdmi]start hdmi module init
[ 1.261716] [drv_hdmi]start hdmi_init
[ 1.266445] [drv_hdmi]start hdmi thread hdmi_run_thread
[ 1.272615] [dev_disp]start work
[ 1.276419] [dev_disp]output type is not hdmi or hdmi is registed

LCD作为首屏和hdmi作为首屏有两个不一样的地方,LCD作为首屏使用的是syn=1,貌似是通过硬件进行显示同步;hdmi时并不这样做,差异表现在disp的初始化后的start_work函数。
Start_work函数解析。
首先等待初始化完成,如果50ms还没初始化完成,则报异常。
然后判断启动参数,启动参数为sync=1时,则根据启动时对应的屏幕是不是一致的,不一致则切换,并且设置硬件sync函数;如果sync不是1时,则分别对不同的屏幕做初始化。启动时的屏幕配置则从command line中获取,经过验证,lcd为主屏是设置为100,hdmi为主屏时设置为00.

从而在start_work中导致了不同,如果是LCD启动,则如果输出类型是hdmi且HDMI没有注册(也就是没有初始化)则退出,否则判断启动时对应的disp也就是fb是否和控制器对应,不对应则调用bsp_disp_sync_with_hw

bsp_disp_sync_with_hw函数,在启动时syn=1并且启动类型不是DISP_OUTPUT_TYPE_NONE时才可以。先获取fb对应的控制器,然后调用disp_device_attached,从两个screen里找到一个disp_device_attached可以成功的。然后调用控制器,调用控制器对应的设备的sw_enable。

在sync为0时,如果设置的是使用screen0,id=0或者screen1,id=1时,如果输出类型是lcd,lcd已经注册且当前id对应的显示类型不是lcd,调用bsp_disp_device_switch进行切换,hdmi时也如此操作,如果既不是lcd,也不是hdmi,则直接调用切换。

bsp_disp_device_switch函数就是直接用disp_device_attached函数进行绑定,如果不成功,则从两个screen里找一个能绑定成功的。

disp_device_attached,找到id对应的mgr,设备存在,类型不为0,则表示已经绑定成功了。
对应设备是enabled同时,enable和disable都存在,disable设备,unsetmanger函数存在时,unsetmanager。根究disp_dev和output_type找到设备,设备具有set_manager时,设置mgr,设备存在set_mode函数时,设置mode。

Fb_init
首先初始化8个framebuffer,其中有一个fb_num的变量,写死为1,此处做的操作为从设备的信息获取长宽等信息,填入fb的结构体信息。然后调用display_fb_request函数。

display_fb_request函数。
通过fb_id和fb_para设置fb对应的参数,然后调用Fb_map_video_memory,然后获取mgr并且通过mgr把参数设置到g_fbi的参数内。

Fb_map_video_memory函数
函数会根据传入的info内容申请内存并把内存记录到info的变量内。

把syn=1去掉,换成syn=0;然后在注册时保证lcd注册成功;fb_number设置为2,startwork时分别switch一下屏幕,再看日志,再看日志,解决了。
从代码结构上看,应该是能够够实现channel和layer的,但貌似没怎么好好弄,反正我们也不用这么高级的功能,算了,不研究了。

转载于:https://blog.51cto.com/13558393/2056499

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

明日之后怎么跳过实名认证_明日之后宝箱达人活动怎么玩 明日之后宝箱达人可以开箱多少次...

《明日之后》宝箱达人是今天游戏中更新的活动,玩家们在部分的野外地图中可以找到宝箱。很多玩家都想知道这个宝箱获得的奖励是什么。接下来就让小编给大家带来明日之后宝箱达人活动奖励介绍,一起来看看吧。明日之后宝箱达人活动介绍 一、活动时间2020年9…

JVM内存模型与垃圾回收GC

Java开发有个很基础的问题,虽然我们平时接触的不多,但是了解它却成为Java开发的必备基础——这就是JVM。在C中我们需要手动申请内存然后释放内存,否则就会出现对象已经不再使用内存却仍被占用的情况。在Java中JVM内置了垃圾回收的机制&#x…

伤疤好了有黑印怎么办_春藤家长圈|家有二孩,老大老二一起抢东西,家长该怎么办?...

本期主讲:齐静美国G.T.I.认证父母效能训练师高级家庭教育指导师未来春藤家长学院特聘讲师(西安)五年一线幼儿教学从业经验两个孩子的妈妈每周一次的春藤家长圈线上案例分享时间到啦!本周是我们线上案例分享的第十四期!本周案例:本…

Java_方法

方法就是将一段代码封装在一个结构体中,并且可反复调用 方法的定义: public static 返回值类型 方法名称 ([参数类型 变量, 参数类型 变量,参数类型 变量...]){ 方法中包含的代码; [return 返回…

不懂卷积神经网络?别怕,看完这几张萌图你就明白了

本文来自AI新媒体量子位(QbitAI)这篇文章用最简明易懂的方式解释了卷积神经网络(CNN)的基本原理,并绕开了里面的数学理论。 同时,如果想对从头开始构建CNN网络之类的问题感兴趣,作者推荐去读《 …

2018双一流排名 计算机,2018中国双一流高校名单

目前全球范围内,比较有影响力的世界大学排名包括《QS世界大学排名》、《世界大学学术排名(ARWU)》、《泰晤士高等教育世界大学排名》、《usnews世界大学排名》和CWUR沙特阿拉伯全球大学评级中心世界大学排名。这些排名从各个方面对世界范围内的高校进行综合排名&…

usart和uart 的区别

摘自:https://blog.csdn.net/meic51/article/details/7714847 什么是同步和异步 转自https://blog.csdn.net/seashine_yan/article/details/71192283转载于:https://www.cnblogs.com/chulin/p/8661720.html

苹果产品开发的绝密工作流程

长期以来苹果产品开发流程在很多方面都笼罩着一层神秘的面纱,而在AdamLashinsky新发行的《InsideApple:HowAmerica’sMostAdmired–andSecretive–CompanyReallyWorks》一书中对这些流程有所涉及。这本书同时谈论了苹果公司各个不同的方面,包括其理念、招…

Linux系统集群架构线上项目配置实战(一)

项目整体介绍 **整个项目包括以下几个应用工程** 1、 用户APP 2、 商家APP 3、 业务平台管理后台 4、 商家业务管理后台 5、 官网 **整体项目规划设计如下** 1、 用户APP采用JAVA环境布署,初始环境两台服务器,实现负载均衡与高可用,前端…

HTML5 webfont字体图标的使用

2019独角兽企业重金招聘Python工程师标准>>> 一.参考文献 1.http://www.cnblogs.com/yes-V-can/p/5716853.html 2.http://blog.csdn.net/zhouwangling_/article/details/53096649 二.html使用方法 1.下载字体 网上百度自己要使用的字体,一般下载的是ttf格…

javaweb不同用户需要几张表_程序员必备2020版:JavaWeb快速进阶全套教程

Java Web应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。JavaWeb项目简单来说就是一个应用程序,比如每天打开的QQ、微信、百度地图等,这些都是应用程序。有很多同学反应Ja…

Git 回滚动任意版本

为什么80%的码农都做不了架构师?>>> Git经常会碰到版本回滚的问题,下面就介绍一下如何回滚版本。 显示提交的log $ git log commit 38be40e4cbdb5512c8318c5ab4e09c462ff5095a (HEAD -> dev, origin/master, origin/dev, origin/HEAD, ma…

axureux中后台管理信息系统通用原型方案 v2_前端公共图表数据大盘方案

作者 | 马一文程序员中的一种,偶尔吟湿作对,润滑万物 ——子慕大诗人前言前端常常会在的业务中后台开发数据统计图表,对于类似 Echarts 这种配置性极强的库,需要花费很多时间查看文档, 一个项目中统计图表大多情况下只…

mac安装和卸载mysql_基于centos7系统卸载rpm安装的mysql

概述前面有介绍了怎么用rpm包去安装mysql,那么如果我们要卸载的话可以怎么弄呢?下面介绍下卸载mysql的流程。环境:centos7.31、 检查是否安装了MySQL组件。# rpm -qa | grep -i mysql2、卸载前关闭MySQL服务systemctl stop mysqld3、收集MySQ…

(转)Linux服务器磁盘空间占满问题

转自:https://www.cnblogs.com/cindy-cindy/p/6796684.html 下面我们一起来看一篇关于Linux服务器磁盘占满问题解决(/dev/sda3 满了),希望碰到此类问题的人能带来帮助。今天下班某电商技术部leader发现个问题,说他们服…

vue用阿里云oss上传图片使用分片上传只能上传100kb以内的解决办法

首先,vue和阿里云oss上传图片结合参考了 这位朋友的 https://www.jianshu.com/p/645f63745abd 文章,成功的解决了我用阿里云oss上传图片前的一头雾水。 该大神文章里有写github地址,里面的2.0分支采用vue2.0实现,只不过这个上传图…

计算机二级access选择题技巧,计算机二级access考试注意事项及解题技巧策略

计算机二级access考试注意事项及解题技巧策略2017年计算机考试将至,今天yjbys小编为大家带来了计算机二级access考试注意事项及解题技巧哦!快点行动起来吧~考试注意事项1.考试时间:120分钟(即2小时)2.考试类型:上机操作 (总分100分&#xff0…