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的更多相关文章

  1. 11.1 Android显示系统框架_framebuffer原理及改进

    1. Android显示系统框架Android Graphic UI with GPU Hardware Accelerationhttps://community.nxp.com/docs/DOC- ...

  2. 11.5 Android显示系统框架_Vsync机制_黄油计划_三个方法改进显示系统

    5. Vsync机制5.1 黄油计划_三个方法改进显示系统vsync, triple buffering, vsync虚拟化 参考文档:林学森 <深入理解Android内核设计思想>第2版 ...

  3. 11.5 Android显示系统框架_Vsync机制_代码分析

    5.5 surfaceflinger对vsync的处理buffer状态图画得不错:http://ju.outofmemory.cn/entry/146313 android设备可能连有多个显示器,AP ...

  4. 11.3 Android显示系统框架_最简单的surface测试程序

    APP有一个surface(界面),其有多个buffer用来存放界面数据,这些buffer是向surfaceflinger申请的: 因此我们编写的surface测试程序步骤: (1)获得surface ...

  5. 11.4 Android显示系统框架_APP与SurfaceFlinger内部机制分析

    4.1 APP跟SurfaceFlinger之间的重要数据结构 一个应用程序有一个或者多个surface(一般只有一个),一个surface有一个或者多个buffer,这些buffer需要应用向sur ...

  6. Android 显示系统:飞思卡尔平台图形界面与GPU硬件加速

    图形是Android平台中的一个大主题,包含java/jni图形框架和2d/3d图形引擎(skia.OpenGL-ES.renderscript). 本文档描述了飞思卡尔设备上的一般Android图形 ...

  7. Android 显示系统:SurfaceFlinger详解

    一.Android系统启动 Android设备从按下开机键到桌面显示画面,大致过程如下图流程: 开机显示桌面.从桌面点击 App 图标到 Activity显示在屏幕上的过程又是怎样的呢?下面介绍And ...

  8. Android动画学习(一)——Android动画系统框架简介

    2015-11-09补充:Drawable Animation极有可能是Frame Animation 这几天在找工作,面试的时候被问到了Android动画,之前完全没接触过这部分,直接给懵了,当然其 ...

  9. Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

    Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...

随机推荐

  1. Es61

    ECMAScript和JavaScript的关系 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.Mozilla公司将在这个标准的基础 ...

  2. 50.Node.js 连接 MySQL

    转自:http://www.runoob.com/nodejs/nodejs-express-framework.html 安装驱动 本教程使用了淘宝定制的 cnpm 命令进行安装: $ cnpm i ...

  3. vue methods 方法中 方法 调用 另一个方法。

    vue在同一个组件内: methods中的一个方法调用methods中的另外一个方法. 可以在调用的时候 this.$options.methods.test(); this.$options.met ...

  4. ZJOI2005沼泽鳄鱼

    矩阵优化dp ** 注意:矩阵乘法没有交换律 ** 思路:类比P2151hh去散步 代码特点在一维的答案矩阵 1.矩阵优化两点间方案数不必赘述 2.注意2,3,4可以办到以他们的lcm为周期,正是因为 ...

  5. PatentTips - Enhancing the usability of virtual machines

    BACKGROUND Virtualization technology enables a single host computer running a virtual machine monito ...

  6. [Python] Python's namedtuples can be a great alternative to defining a class manually

    # Why Python is Great: Namedtuples # Using namedtuple is way shorter than # defining a class manuall ...

  7. UVa10397_Connect the Campus(最小生成树)(小白书图论专题)

    解题报告 题目传送门 题意: 使得学校网络互通的最小花费,一些楼的线路已经有了. 思路: 存在的线路当然全都利用那样花费肯定最小,把存在的线路当成花费0,求最小生成树 #include <ios ...

  8. [51Nod]NOIP2018提高组省一冲奖班模测训练(二)

    http://www.51nod.com/contest/problemList.html#!contestId=73&randomCode=4408520896354389006 还是原题大 ...

  9. STL中向量vector笔记

    vector的本质是:数组的封装 特点:读取能在常数时间内完成 Vector成员函数 函数 表述 c.assign(beg,end) c.assign(n,elem) 将[beg; end)区间中的数 ...

  10. 带你一分钟理解闭包--js面向对象编程(转载他人)

    什么是闭包? 先看一段代码: function a(){ var n = 0; function inc() { n++; console.log(n); } inc(); inc(); } a(); ...