为Android添加HAL模块
来源:互联网 发布:数据库漏洞扫描 编辑:程序博客网 时间:2024/06/05 11:09
1.每个硬件抽象层模块在内核中都对应一个驱动程序,硬件抽象层模块就时通过这些驱动程序来访问硬件设备的,它们是通过读写设备文件来进行通信的。
硬件抽象层中的模块接口源文件一般保存在hardware/libhardware目录中,为了方便起见,我们将虚拟硬件设备freg在硬件抽象层中的模块名称定义为freg,目录结构如下:
hardware/libhardware/include/hardware/freg.h
hardware/libhardware/modules/freg/Android.mk
hardware/libhardware/modules/freg/freg.cpp
上述三个文件分别对应模块的头文件、makefile文件、源文件。下载地址如下:
http://download.csdn.net/detail/getnextwindow/9017755
2.HAL层的编译步骤
首先要修改hardware/libhardware/modules下面的Android.mk文件,如下:
hardware_modules := gralloc hwcomposer audio nfc nfc-nci local_time \ power usbaudio audio_remote_submix camera consumerir sensors vibrator \ tv_input fingerprint freginclude $(call all-named-subdir-makefiles,$(hardware_modules))
修改点:将freg加入到hardware_modules变量当中
编译:mmm ./hardware/libhardware/modules
结果:会生成一个HAL层的动态库,比如freg.default.so
3.查看freg.default.so
使用linux的nm工具可以查看动态库的符号表,我们查看out/target/product/XXXX/symbols/system/lib/hw
目录下面的freg.default.so动态库文件,命令如下:
nm freg.default.so
输出:
00000549 t _ZL12freg_get_valP13freg_device_tPi0000059d t _ZL12freg_set_valP13freg_device_ti000004b9 t _ZL16freg_device_openPK11hw_module_tPKcPP11hw_device_t000004ad t _ZL17freg_device_closeP11hw_device_t00002084 d _ZL19freg_module_methods
我们就可以看到确实是有HAL层的函数被编入。
4.加载硬件抽象层模块
上面我们生成了硬件抽象层对应的.so文件,那么怎么加载.so呢?Android系统中的硬件抽象层是由系统统一加载的,当调用者需要加载这些模块时,只要指定ID就可以了,在Android硬件抽象层中,负责加载硬件抽象层的函数是hw_get_module函数,原型如下:
int hw_get_module(const char *id, const struct hw_module_t **module);
比如我们传入参数FREG_HARDWARE_MODULE_ID,即”freg”,函数内部找到相应的.so文件,然后,最后调用load加载。
- 为Android添加HAL模块
- Android Framework层添加一个HAL模块
- Android HAL模块实现
- Android HAL 例 蓝牙模块
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序 .
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
- iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值
- HDU3068 最长回文 manacher
- hdu5371 Hotaru's problem(manacher 算法+枚举)
- hdu 3466 Proud Merchants(01背包)
- linux下jenkins安装
- 为Android添加HAL模块
- [优先队列] POJ2010 Moo University - Financial Aid
- 两个viewport的故事(第一部分)
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- uva 11796 - Dog Distance(几何)
- 修饰过的Dialog
- Infragistics的介绍以及在ASP.net中使用的总结
- 【后缀数组】
- uva 12325