hw_get_module 的聲明如下:
int hw_get_module_by_class(const char *class_id, const char *inst,
const struct hw_module_t **module)
int hw_get_module(const char *id, const struct hw_module_t **module)
{
return hw_get_module_by_class(id, NULL, module);
}
hardware so 命名如下:
name
| |
id.inst.subname.so
| | |
| | 依次從下面屬性中查找泽疆,以它們的值當(dāng)做subname,如果都找不到就用“default”作為subname
| | {ro.hardware.%s,(%s為id.inst組成的name)
| | ro.hardware,
| | ro.product.board,
| | ro.board.platform,
| | ro.arch}
| 一般為空玲献,與id組成name
hw_get_module()傳進(jìn)來(lái)的第一個(gè)參數(shù)殉疼,比如sensor、power捌年、audio對(duì)應(yīng)不同模塊
如:sensor模塊hardware so為:
// id: sensors
// inst: null
// subname: rk30board
sensors.rk30board.so
hw_get_module_by_class() 按照上面so的命名規(guī)則組合出so庫(kù)名瓢娜,再到下面目錄中去查找對(duì)應(yīng)文件:
“/system/lib/hw”
“/vendor/lib/hw”
當(dāng)找到壓so文件,則調(diào)用dlopen()打開so并取得文件句柄礼预,再調(diào)用dlsym()從中取得hw_module_t結(jié)構(gòu)返回眠砾。