11.2 Android显示系统框架_android源码禁用hwc和GPU
2. 修改tiny4412_Android源码禁用hwc和gpu(厂家不会提供hwc和gpu的源代码,没有源代码就没法分析了,因此在这里禁用该功能并用软件库实现)
最终源码:
git clone https://github.com/weidongshan/SYS_0003_Patch_Disable_HWC_GPU_tiny4412.git
或
git clone https://git.coding.net/weidongshan/SYS_0003_Patch_Disable_HWC_GPU.git
更新:
git pull origin
取出指定版本:
git checkout v1 // v1, patch to disable HWC&GPU for tiny4412's android-5.0.2
这个补丁做了3件事:
a. 去掉厂家提供的gralloc, hwcopser HAL模块
b. 添加属性让android系统认为自己运行于"没有GPU的模拟器"
修改libagl/Android.mk,给系统添加libGLES_android.so (软件实现的GL)
c. 修改系统自带的gralloc模块的BUG
如何获得HAL模块gralloc:
(1)、从哪里查找文件:/vendor/lib/hw,/system/lib/hw
(2)、文件名是什么?gralloc.属性值.so:gralloc.tiny4412.so/gralloc.exynos4.so/gralloc.default.so(gralloc.tiny4412.so就是厂家提供的)
修改源码:
a. 去掉厂家提供的gralloc, hwcopser HAL模块
a.1 删除单板上/system/lib/hw(删除的时候需要执行mount -o remount /system 重新挂载/system后才具有删除权限)
gralloc.tiny4412.so
hwcomposer.exynos4.so
a.2 修改源码使得编译结果中不含上述文件 (修改vendor/friendly-arm/tiny4412/device-tiny4412.mk, 参考补丁110和116行)
出错 : invalid buffer handle given
发现出错的的函数__egl_platform_create_surface_from_native_buffer出错,但在android系统中搜不到,因此其可能是在厂家提供的库中,
在系统中执行grep “__egl_platform_create_surface_from_native_buffer” * -nR 发现只在libMali.so中找到,在运行的系统中的/system/lib下搜索Mali相关的库,找到在/system/lib/egl中,把得到的libGLES_android.so复制到单板/system/lib/eg/,并添加读属性,reboot系统
b. 添加属性让android系统认为自己运行于"没有GPU的模拟器"
修改libagl/Android.mk,给系统添加libGLES_android.so (软件实现的GL)
b.1 添加软件GPU库
开发板: su, mount -o remount /system
在服务器编译软件GPU库: mmm frameworks/native/opengl/libagl //执行mmm命令后会得到libGLES_android.so
把得到的libGLES_android.so复制到单板/system/lib/eg/,并添加读属性chmod 777 libGLES_android.so
b.2 修改frameworks/native/opengl/libagl/Android.mk (参考补丁)
b.3 修改属性文件 , 单板 /system/build.prop,添加:
ro.kernel.qemu=1
ro.kernel.qemu.gles=0
或修改源码 device/friendly-arm/tiny4412/system.prop 同样添加上述属性, 然后重新编译系统
重新启动后出错: no suitable EGLConfig found, giving up
c. 修改系统自带的gralloc模块的BUG
c.1 修改 hardware\libhardware\modules\gralloc\Framebuffer.cpp
HAL_PIXEL_FORMAT_BGRA_8888
改为:
HAL_PIXEL_FORMAT_RGBA_8888
mmm hardware/libhardware/modules/gralloc/
把gralloc.default.so复制到单板/system/lib/hw
重启,出错:BufferQueueProducer( 2320): [FramebufferSurface] dequeueBuffer: createGraphicBuffer failed
W/GraphicBufferAllocator( 1918): alloc(800, 480, 1, 00001a33, ...) failed -12 (Out of memory)
c.2 继续修改 hardware\libhardware\modules\gralloc\Framebuffer.cpp
mmm hardware/libhardware/modules/gralloc/
把gralloc.default.so复制到单板/system/lib/hw
成功!
11.2 Android显示系统框架_android源码禁用hwc和GPU的更多相关文章
- 11.1 Android显示系统框架_framebuffer原理及改进
1. Android显示系统框架Android Graphic UI with GPU Hardware Accelerationhttps://community.nxp.com/docs/DOC- ...
- 11.5 Android显示系统框架_Vsync机制_黄油计划_三个方法改进显示系统
5. Vsync机制5.1 黄油计划_三个方法改进显示系统vsync, triple buffering, vsync虚拟化 参考文档:林学森 <深入理解Android内核设计思想>第2版 ...
- 11.5 Android显示系统框架_Vsync机制_代码分析
5.5 surfaceflinger对vsync的处理buffer状态图画得不错:http://ju.outofmemory.cn/entry/146313 android设备可能连有多个显示器,AP ...
- 11.3 Android显示系统框架_最简单的surface测试程序
APP有一个surface(界面),其有多个buffer用来存放界面数据,这些buffer是向surfaceflinger申请的: 因此我们编写的surface测试程序步骤: (1)获得surface ...
- 11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析
4.1 APP跟SurfaceFlinger之间的重要数据结构 一个应用程序有一个或者多个surface(一般只有一个),一个surface有一个或者多个buffer,这些buffer需要应用向sur ...
- Android 显示系统:飞思卡尔平台图形界面与GPU硬件加速
图形是Android平台中的一个大主题,包含java/jni图形框架和2d/3d图形引擎(skia.OpenGL-ES.renderscript). 本文档描述了飞思卡尔设备上的一般Android图形 ...
- Android 显示系统:SurfaceFlinger详解
一.Android系统启动 Android设备从按下开机键到桌面显示画面,大致过程如下图流程: 开机显示桌面.从桌面点击 App 图标到 Activity显示在屏幕上的过程又是怎样的呢?下面介绍And ...
- Android动画学习(一)——Android动画系统框架简介
2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...
- Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机
Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...
随机推荐
- Windows下快速安装CACTI流量监控
Windows下快速安装CACTI流量监控 原文 http://os.51cto.com/art/201111/300977.htm CACTI是一套PHP程序,它利用SNMPGET采集数据,使用R ...
- POJ 3168 排序+扫描
题意: 思路: 我们可以把每个矩形拆成四条线 与x轴平行的放在一起 与y轴平行的放在一起 排个序 判一判有没有交 有交 则说明不可扩张 统计一下 就可以了 处理的姿势很重要 姿势不对毁一生 //By ...
- How to anti-Obfuscated code
Author:jin can zhu from China Source:http://blog.csdn.net/clever101 Now many software makers have us ...
- Codefroces Educational Round 26 837 D. Round Subset
D. Round Subset time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- centos的dns配置总结
找的一篇好的存根 DNS正反向解析 DNS(Domain Name Service)域名服务.就是域名解析服务器.所谓名称解析的过程就是某个应用程序基于某个搜索键在指定的数据库中查询.而后查询到某些对 ...
- userdel---删除用户及相关文件
userdel命令 userdel命令用于删除给定的用户,以及与用户相关的文件.若不加选项,则仅删除用户帐号,而不删除相关文件. 语法 userdel(选项)(参数) 选项 -f:强制删除用户,即 ...
- cocos2d-x-lua基础系列教程六(lua-table增删改查)
lua-table库 1.插入 table.insert () --假设没有设定位置.默认last位置 样例: myTable = { 1, 2, 3 } myTable.insert(myTable ...
- 兔子--ps中的基本工具总结(ps cs5)
矩形选框工具 椭圆选框工具 单行选框工具 单列选框工具 移动工具 套索工具柜 多边形套索工具 磁性套索工具 魔棒工具 高速选择工具 裁剪工具 切片工具 切片选择工具 吸管工具 颜色取样器工具 标尺工具 ...
- 探索Oracle之数据库升级八 12c Downgrade 11gR2
探索Oracle之数据库升级八 12c Downgrade 11gR2 前言: 我们前面已经完毕了11gR2 upgrade to 12c 的升级,整个过程还是比較顺利的,尽管和曾经版本号升级有些不太 ...
- theme- 自定义控件属性
今天想要在一个控件中增加自己的一条属性,具体步骤如下 1.在frameworks/base/core/res/res/values/attr中注册属性 因为我们希望增加的属性是在AutoComplet ...