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,(struct hw_device_t**)device) -> led_device_open()
如此就完成了
到底層的初始化工作。
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))
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檔案了。
sql執行過程分析
我們總是寫sql語句,資料庫把結果返回給我們,那中間過程又是什麼?如果了解oracle是怎麼執行sql語句的中間過程,對我們優化sql有很大的幫助 首先了解一下執行sql,需要消耗什麼資源,cpu,記憶體,io,我們要了解什麼情況下會消耗cpu,什麼情況下消耗記憶體,什麼情況下消耗io,只有了解了這...
mysql sql執行慢 分析過程
為了驗證select 1 與 select 1 from tablename 與 select from tablename的執行效率,需要測試一下各自執行的時間。於是總結一下,檢視mysql語句執行時間的方法。方法一 show profiles。1.show profiles是5.0.37之後新增...
flume sink執行過程簡單分析
沒有執行,直接看原始碼得到sink簡單執行過程 sinkrunner負責執行sink程式 內部類pollingrunner implements runnable private sinkprocessor policy 負責執行sink run方法 while shouldstop.get els...