android 调试驱动,Android 5.1设备驱动调试记录

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

简要记录了Android5.1设备驱动的调试记录,以led为例,记录了HAL、Framework层的处理,并对调用关系进行了简要分析。

HAL Layer

1.g6818_lollipop_v51hardwarelibhardwareincludehardware创建led.h头文档

2.Z:arm6818E17160g6818_lollipop_v51hardwarelibhardwaremodules创建led文档夹

led.c

Android.mk

3.编译source build/envsetup.sh

lunch 选择 21. g6818-userdebug

mmm hardware/libhardware/modules/led/

ll out/target/product/g6818/system/lib/hw/

Frameworks Layer

1.创建JNI接口

1.1 创建frameworks/base/services/core/jni/com_android_server_LedService.cpp

1.2 修改frameworks/base/services/core/jni/onload.cpp添加注册native接口

1.3 修改frameworks/base/services/core/jni/Android.mk

添加”com_android_server_LedService.cpp”项注意:

LedService.java的java接口的入参、返回值类型一定要与com_android_server_LedService.cpp的native函数一致

否则,main.txt日志会报注册JNI接口失败”Failed to register native method”

导致zygote初始化失败,反复init

2.创建frameworks/base/services/core/java/com/android/server/LedService.java 实现服务类

修改frameworks/base/services/java/com/android/server/SystemServer.java

注册Led服务到Service Manager中

3.生成ILedService.java服务接口类

3.1 创建frameworks/base/core/java/android/os/ILedService.aidl

3.2 修改frameworks/base/Android.mk

添加编译项”core/java/android/os/ILedService.aidl”

3.3 编译

mmm frameworks/base/

4.编译mmm frameworks/base/services/

ll out/target/product/g6818/system/lib/libandroid_servers.so

框架分析

调用关系(自顶向下):1.应用Activity

private ILedService iLedService = ILedService.Stub.asInterface(ServiceManager.getService(“led”))

Client进程通过ServiceManager(Binder,Stub)向Server进程请求已注册的Led服务

2.iLedService.LedOpen()调用JNI接口,JNI转C++接口

3.C++接口通过int hw_get_module(const char *id, const struct hw_module_t **module)

加载HAL动态库led.default.so

dlsym()获取动态库led.default.so中HAL_MODULE_INFO_SYM符号表的入口地址

即struct led_module_t的地址

4.通过句柄直接调用驱动api接口->内核驱动

具体实现(自底向上):

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值