OpenEdv-开源电子网

 找回密码
 立即注册
查看: 775|回复: 2

RK3568操作显示屏的异常求助

[复制链接]

22

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2019-11-10
在线时间
61 小时
发表于 2024-1-2 21:47:41 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 woshi520laoxie 于 2024-1-4 22:13 编辑

使用板卡:RK3568
使用测试代码:IMX6ULL的第十九章 FrameBuffer应用编程代码
问题描述:
#1、刷屏涂颜色或者刷图,把运行的刷屏代码给关闭,操作鼠标,那么会出现花屏的现象,或者留下鼠标的印记,如下图1
#2、刷屏涂颜色或者刷图,不关闭刷图代码,操作鼠标,现象一致
#3、使用IMX6ULL的第十九章 FrameBuffer应用编程代码还报其他的问题
#4、我使用网络上找到的其他刷屏代码,可用,可以刷屏,不过问题就是上面的1和2
#5、而且由于使用 mmap接口函数 还特别容易出现段错误
#4号问题
异常位置:mmap接口函数
异常的情况:
[main] success open
[main] screen_size:5529600 width:800 height:1280
[main] screen_base:0xffffffff
mmap error: Invalid argument
代码的位置如下:
    printf("[%s] screen_size:%d width:%d height:%d \r\n",__func__,screen_size,width,height);
    /* 将显示缓冲区映射到进程地址空间 */
    screen_base = (short unsigned int*)mmap(NULL, screen_size, PROT_WRITE, MAP_SHARED, fd, 0);
    if (MAP_FAILED == (void *)screen_base) {
        perror("mmap error");
        close(fd);
        exit(EXIT_FAILURE);
    }

我还测试了网络上面的其他例子,其他例子是能显示图片的,不过我咨询问题是
#1号问题
1、刷屏之后,然后把运行的刷屏代码给关闭,之后操作鼠标,那么会出现花屏的现象,留下鼠标的印记
2、使用QT,单独开启了3个QT,界面也还是正常的,证明QT对显示屏的操作是好的。
我的猜想:和鼠标没有关系吧,应该和/dev/fb0 或者framebuffer直接有关系
因为
#1、我还不太清除QT是怎么操作显示屏的
#2、RK3568是不建议使用framebuffer吗?那么建议使用哪种操作显示屏的方式呢

求助:如何知道这个原因是什么,并且如何解决这个问题,因为我目前还不打算使用QT作为界面显示的方式,用的其他方式
#花屏的样式大概下面这样,上面的轨道,就是鼠标走过的大致轨道
图1、 123.png
##2、我看了一些介绍是这么说的
QT 应用程序能够在 LCD 屏幕上显示的原理是什么?_qt驱动显示屏原理-CSDN博客
从 /dev/fb。framebuffer 作为 LCD 的帧缓存,LCD 控制器根据固定的频率,从 fb 中取走一幅图像数据,经过自身加工,将数据通过 RGB 接口发送给 LCD 屏幕。
如果按照这一句的表述,那么我自己使用framebuffer 应该也是一样的效果才对,不应该出现花屏,因为都是framebuffer操作
实际中
1、很多时候打开,容易映射失败
      我猜想可能是不正常关闭,会不会没有释放内存
2、为什么使用鼠标的时候会出现这种情况,是否和默认配置的底图有关系呢?
      QT是不是另外开启了一个容器,导致对QT的兼容比较好,正常操作framebuffer 就不太对了,印象中,是做了一些操作的,并不是无任何操作,如果无任何操作,显示屏应该是黑色的或者其他样式的吧,因为目前没有运行APP的时候底图是带花纹的图形。
3、我实际测试:花屏的位置,就是我刷屏过的位置,底图带花纹的位置是不会这样的
     是不是和这个图层有关系,两个图层来回切换导致的呢?
     因为我记得UI是可以用多种图层操作的,例如带3个图层,由于默认花纹的屏在底图,我直接写 /dev/fb也在底图,导致画屏出现了问题
     RK3568我还不太清除,H750是有3个图层的,底图单色,和中间,已经顶层。如果RK3568也有多个图层的话,会不会这里面就有情况了。
4、我明天想试试能不能把这个带花纹的底图也给去掉测试效果?
     待验证中......

5、如果kill掉 /usr/bin/weston 进程那么操作mmap会出现下面的情况
The framebuffer device was opened successfully.get fbfd info ...fbmap:8c0852b0初始化内存成功拷贝数据完成frameBuffer: 800 x 1280, 4bytes / 32bpp800x1280, 32bppscreensize:4096000
---》下面是异常的信息
[  119.476412] Unable to handle kernel paging request at virtual address ffffff800f435000
[  119.477570] Mem abort info:
[  119.477826]   ESR = 0x96000007
[  119.478096]   Exception class = DABT (current EL), IL = 32 bits
[  119.478645]   SET = 0, FnV = 0
[  119.478927]   EA = 0, S1PTW = 0
[  119.479207] Data abort info:
[  119.479464]   ISV = 0, ISS = 0x00000007
[  119.479800]   CM = 0, WnR = 0
[  119.480072] swapper pgtable: 4k pages, 39-bit VAs, pgdp = 000000000a0b2818
[  119.480672] [ffffff800f435000] pgd=00000000efffe003, pud=00000000efffe003, pmd=00000000dfbbb003, pte=000000000000000
      





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2019-11-10
在线时间
61 小时
 楼主| 发表于 2024-1-4 21:31:53 | 显示全部楼层
如果kill掉:/usr/bin/weston 线程
回复

使用道具 举报

22

主题

69

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2019-11-10
在线时间
61 小时
 楼主| 发表于 2024-1-4 21:33:34 | 显示全部楼层
如果Kill掉:/usr/bin/weston 线程
还会出现要么无法 mmap返回 -1,要么直接段错误,打印一段信息,然后卡死的情况
卡死的时候,无法使用指令交互
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 09:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表