CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 30612|回复: 24

关于A20调LCD屏的若干见解

[复制链接]
发表于 2013-12-11 21:05:26 | 显示全部楼层 |阅读模式
查看/frameworks/base/services/java/com/android/server/SystemServer.java
看到这么一段:
final String srcPath = "/data/displaysetmode";
        final File FILE = new File(srcPath);
        final String values = new String(finalFormat.mOutputType + "\n" + finalFormat.mFormat);

        try {
            FileOutputStream fos = new FileOutputStream(FILE);
            fos.write(values.getBytes());
            fos.flush();
            fos.getFD().sync();
            fos.close();
        } catch (FileNotFoundException e) {
        } catch (IOException e) {
        }
大概意思是说把finalFormat.mOutputType和finalFormat.mFormat的数据存到/data/displaysetmode

adb进入到android系统的cb2,发现了/data/displaysetmode这个文件,看到的内容为:
2
14

或许有时是:
3
5

这个和设置的sys_config有关,也和开机时检测显示器的连接状态有关,具体得跟进finalFormat是怎么来的(这个没去看),反正知道这里就够用了。

之后跳到/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp

有个void SurfaceFlinger::bootFinished() ,读取了displaysetmode的内容。这里会导致我们在sys_config配置的lcd失效,所以会出现开机显示android,后面就暗了。

大概原理知道了,怎么改,见仁见智,最好别影响vga和HDMI。(反正我改好了)

还有个疑问是sys_config有个screen1,对它设置无效,如果有效,直接使用就好了,源码不用改。


回复

使用道具 举报

发表于 2013-12-12 19:57:09 | 显示全部楼层
能分享一下如何修改吗?
我把改了java代码,让它写入:
1
4
可惜还是看不到LCD上的输出啊。
能帮帮忙吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-13 08:44:51 | 显示全部楼层
直接把这句注释掉
final String srcPath = "/data/displaysetmode";
回复 支持 反对

使用道具 举报

发表于 2014-1-9 13:35:09 | 显示全部楼层
你好,我用是a10的板子,扩展了7寸的lcd,用ubuntu系统显示正常,用android也是开机动画后黑屏。http://forum.cubietech.com/forum ... 1856&extra=page%3D1 这个要怎么搞啊,求帮助啊
回复 支持 反对

使用道具 举报

发表于 2014-4-24 15:50:48 | 显示全部楼层
有用,谢谢,mark
回复 支持 反对

使用道具 举报

发表于 2014-5-19 20:28:07 | 显示全部楼层
我们使用cb2驱动3.5寸的I8080接口的显示屏,调试了半个月,最终成功了.
在所有调试的过程中最令人无奈的是显示开机动画后就黑屏了,浪费了好几天的时间,最后才发现是A20的源码有问题,显示输出做旋转后就显示到了屏幕的可视区域之外了.这点是通过使用Eclipse的截屏功能发现的.
在开机动画之后进入系统的时候被莫名其妙的修改了输出的分辨率(好像是720P),但是这个时候是按照我们设置的320*480的分辨率绘图,并且绘图的(0,0)点离屏幕的可视区域非常远,导致显示屏上看到的是黑色的.
到最后没有办法了,无奈的将所有关于HDMI输出的代码全部删除,终于显示了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-20 12:06:53 | 显示全部楼层
屏幕旋转后,显示半屏需要修改内核fb_disp驱动,有个分辨率问题。默认1080P 要改720P

回复 支持 反对

使用道具 举报

发表于 2014-5-23 23:28:49 | 显示全部楼层
lin     我想问一下,sys_config.fex文件中有关lcd屏显示(lvds)不是要去读好几个参数的吗,比如hbp  ht  vbp  vt  以及单双通道这些!
可是我在SurfaceFlinger.cpp 文件中,看到他只读取了两个数据一个type   一个format!这一块看着有点迷惑

/data/displaysetmode  文件是通过哪个.c或者.cpp文件处理sys_config.fex之后得到的呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-24 09:27:11 | 显示全部楼层
f839903061 发表于 2014-5-23 23:28
lin     我想问一下,sys_config.fex文件中有关lcd屏显示(lvds)不是要去读好几个参数的吗,比如hbp  ht   ...

sys_config.fex这个文件是由内核驱动处理的,具体位子在内核里使用grep搜一下应该可以找到
回复 支持 反对

使用道具 举报

发表于 2014-7-15 13:03:22 | 显示全部楼层
lin 发表于 2013-12-13 08:44
直接把这句注释掉
final String srcPath = "/data/displaysetmode";

高手你直接把
final String srcPath = "/data/displaysetmode";
这行注释掉,后面这句:
        final File FILE = new File(srcPath);
肯定就找不到srcPath,就会报错了啊,那你编译怎么通过啊?如果连后面这句注释掉,下面这几行也会报错啊:
        final String values = new String(finalFormat.mOutputType + "\n" + finalFormat.mFormat);

        try {
            FileOutputStream fos = new FileOutputStream(FILE);
            fos.write(values.getBytes());
            fos.flush();
            fos.getFD().sync();
            fos.close();
        } catch (FileNotFoundException e) {
        } catch (IOException e) {
        }

怎么解决呢?求指点
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2022-8-11 09:48 , Processed in 0.029341 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部