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服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...
随机推荐
- vue -- config index.js 配置文件详解
此文章介绍vue-cli脚手架config目录下index.js配置文件 此配置文件是用来定义开发环境和生产环境中所需要的参数 关于注释 当涉及到较复杂的解释我将通过标识的方式(如(1))将解释写到单 ...
- Ajax的跨域问题分析
一.Ajax的跨域问题 Ajax是利用javascript内置XMLHttpRequest对象来进行传输的,所以它依赖于XMLHttpRequest对象,而XMLHttpRequest对象却有很多的限 ...
- Ubuntu 16.04下的LAMP环境配置
在学习开发过程中,每当遇到新的问题时,通常都能在网上搜到解决的方法,但是网上的方法千千万,有些是已经过时了的,有些是跟自己开发环境不同的,总是不能第一时间能找到答案. 而当时遇到的问题可能在今后的开发 ...
- 03009_SQL注入问题
1.注入问题 (1)假设有登录案例SQL语句如下: SELECT * FROM 用户表 WHERE NAME = 用户输入的用户名 AND PASSWORD = 用户输的密码; (2)此时,当用户输入 ...
- Hibernate5配置与使用具体解释
转载请注明出处:http://blog.csdn.net/tyhj_sf/article/details/51851163 引言 Hibernate是一个轻量级的持久层开源框架,它是连接java应用程 ...
- BestCoder Round #65 HDOJ5592 ZYB's Premutation(树状数组+二分)
ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- jquery如何阻止子元素相应mouseout事件
jquery如何阻止子元素相应mouseout事件:mouseout有一个特点,当鼠标移入子元素的时候,也会触发此事件,但是在实际应用中这个特点往往不是我们想要的,下面就通过代码实例介绍一下如何实现此 ...
- var、let和const的区别
var 首先var有变量提升 console.log(a); // undefined var a = 1; function也存在提升现象 console.log(b); //function b( ...
- 【Educational Codeforces Round 35 B】Two Cakes
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 从小到大枚举x. 看看a/x+b/x是不是大于等于n 是的话. 看看是不是两种蛋糕都能凑一堆. 也即x的最大枚举量是min(a,b) ...
- 98.TCP通信传输文件
客户端 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include <stdlib.h> #include <s ...