由我以上图表可以看出,加载驱动的时候,会尝试先从libGLES_android.so中加载EGLGLESV1_CMGLESV2三个部分的函数,如

果加载失败,则会尝试从libEGL_android.solibGLESV1_cm.solibGLESV2.so三个动态库中对应的函数。在这部分代码中,我们可以看到一个非常重要的结构体,egl_connection_t

struct egl_connection_t

{

void * dso;

gl_hooks_t * hooks[2];

EGLint major;

EGLint minor;

egl_t egl;

};到处都有他的身影,对这几个变量进行一下解释。

struct soinfo

{

const char name[SOINFO_NAME_LEN];

Elf32_Phdr *phdr;

int phnum;

unsigned entry;

unsigned base;

unsigned size;

// buddy-allocator index, negative for prelinked libraries

int ba_index;

unsigned *dynamic;

unsigned wrprotect_start;

unsigned wrprotect_end;

soinfo *next;

unsigned flags;

const char *strtab;

Elf32_Sym *symtab;

unsigned nbucket;

unsigned nchain;

unsigned *bucket;

unsigned *chain;

unsigned *plt_got;

Elf32_Rel *plt_rel;

unsigned plt_rel_count;

Elf32_Rel *rel;

unsigned rel_count;

unsigned *preinit_array;

unsigned preinit_array_count;

unsigned *init_array;

unsigned init_array_count;

unsigned *fini_array;

unsigned fini_array_count;

void (*init_func)(void);

void (*fini_func)(void);

#ifdef ANDROID_ARM_LINKER

/* ARM EABI section used for stack unwinding. */

unsigned *ARM_exidx;

unsigned ARM_exidx_count;

#endif

unsigned refcount;

struct link_map linkmap;

};


更多相关文章

  1. android图片加载处理
  2. Content Provider加载原理
  3. 2012年总结
  4. 关于Android中Java与Javascript之间的传值研究
  5. android usb挂载分析---MountService启动
  6. [置顶] android Listview分批加载+自动加载(改进版)(附源码下载)
  7. 关于java、Android中Math的一些用法
  8. AndroidQuery 开源项目
  9. android常用的方法

随机推荐

  1. android之定时器AlarmManager .
  2. android项目开发流程
  3. 开发Android主攻四大方向
  4. 史上最好用的Android省市区选择,三级联动
  5. Android(安卓)Support兼容包详解
  6. Android Studio获取SHA1值
  7. android 在myeclipse中查看源码
  8. Android(安卓)OpenGL ES学习笔记之绘制线
  9. smem在Android中的使用
  10. Android中Fragment的简单介绍