HAL MODULE 执行过程分析
来源:互联网 发布:冬天打底衫淘宝推荐 编辑:程序博客网 时间:2024/06/06 01:30
HAL module执行过程分析 1.其初始化过程如下: System.loadLibrary("led_runtime")->JNI_OnLoad()->registerMethods()->->env->RegisterNatives(clazz,gMethods,sizeof(gMethods)/sizeof(gMethods[0])); onCreate() -> led_srv= new LedService() ->_init()->led_init() ->hw_get_module(LED_HARDWARE_MODULE_ID, (const hw_module_t**)&module)-> led_control_open(&module->common,&sLedDevice)->module->methods->open(module,LED_HARDWARE_MODULE_ID,(structhw_device_t**)device) -> led_device_open() 如此就完成了app到底层的初始化工作。 2.接下来看一下hw_get_module()函数。 hw_get_module()->property_get(variant_keys[i],prop,NULL)->__system_property_get(key,value) ->__system_property_find(const char *name)->__system_property_read(pi, 0, value)-> load(id, prop,&hmi)->snprintf(path,sizeof(path), "%s/%s.%s.so", HAL_LIBRARY_PATH, id, variant)-> handle = dlopen(path, RTLD_NOW)-> const char *sym = HAL_MODULE_INFO_SYM_AS_STR; hmi = (const struct hw_module_t *)dlsym(handle, sym) 3. 最后我们看一下property_get(variant_keys[i],prop,NULL) 这个其实就是获取ro.hardware属性,我们关心的就是这个值是什么。在system/core/init/init.c文件中的main函数中有这么一句:property_set("ro.hardware", hardware);无疑ro.hardware的值就是hardware中的内容了。我们再找一下hardware赋的什么值,就ok了。其实就是在这个函数中完成的get_hardware_name()。 open("/proc/cpuinfo", O_RDONLY) hw = strstr(data, "/nHardware") while (*x && !isspace(*x)) { hardware[n++] = tolower(*x); x++; if (n == 31) break; } Ok,我们看到了,它是从/proc/cpuinfo中读出来的。我们再打开cpuinfo文件看一下:Hardware: Goldfish。好了,我们确定了property_get()得到的是goldfish,那么snprintf(path, sizeof(path), "%s/%s.%s.so", HAL_LIBRARY_PATH, id, variant)构造出来的path就是/system/lib/hw/led.goldfish.so。终于找到咱们的so文件了。 详细地址:http://blog.chinaunix.net/u/22630/article_105768.html
- HAL MODULE 执行过程分析
- HAL module执行过程分析
- Android HAL module执行过程分析
- HAL层开发基础 && Android HAL module执行过程分析
- Android HAL hardware module分析 以GPS module为例
- Android HAL hardware module分析 以GPS module为例
- Android HAL hardware module分析 以GPS module为例
- 转)Android HAL hardware module分析 以GPS module为例
- Shuffle执行过程分析
- 分析MapReduce执行过程
- RMI执行过程分析
- ICloudOperator 执行过程分析
- 分析MapReduce执行过程
- HAL 分析
- jQuery.js执行过程分析
- Java程序执行过程分析
- hive 执行过程源码分析
- oracle sql执行过程分析
- TinyXml快速入门(一)
- 整理心情
- .COM 25 年回顾
- c++头文件知多少
- shared_ptr详解
- HAL MODULE 执行过程分析
- 改变你生活的50种方式
- 嵌入式系统工程师的十个不要
- 时刻记住,学到老
- jqGrid问题
- 女孩子最在乎的
- 32位程序到64位程序移植
- Zend Framework 中的插件 之三:结论
- Resin 3.1 配置文件 说明