五、Android硬件访问服务编写系统代码

  • 应用程序通过向service_manger查询请求获得getService调用ILedService.java这个接口,然后通过这个接口向SystemServer请求服务,实现对硬件的操作。这里的ILedService.java这个接口,不用自己写,只需要实现一个AIDL文件。我们写出这个aidl文件之后,用android系统里边的编译命令,让它帮我们自动生成这个接口文件。
    AIDL:Android Interface Definition Language,即Android接口定义语言。
  • 怎么写出这个aidl文件
    搜获aidl文件以振动器为例 * vibrator *aidl 找到IVibratorService.aidl文件
    拷贝这个文件到自己的目录,命名为ILedService.aidl ,修改内容,led服务中对于led应用程序,只需要点亮或者熄灭,所以声明一个接口,如下:
	package android.os;、
	interface ILedService
	{
		int ledCtrl(int which,int status);
	}

把这个aidl文件上传到服务器编译之前,要先编译好整个android系统。
Android系统庞大复杂,把aidl文件上传到哪里去呢,可以模仿振动器来做。

  1. 将aidl文件放到系统目录 /work/android-5.0.2/frameworks/base/core/java/android/os

  2. 修改 ``/work/android-5.0.2/frameworks/base/` 目录下的Android.mk,添加aidl文件
    在这里插入图片描述

  3. 执行mmm

    命令 ,命令会根据目录下的Android.mk 把目录里边的文件编译出来,,编译可以生成ILedService.java,使用mmm命令的前提是要根据文档设置好环境变量,选择单板
    在这里插入图片描述

    执行mmm命令是有可能找不到命令错误
    跳转到源码顶层目录,执行**. build/envsetup.sh**
    执行成功
    编译结果会放在 out目录中,搜索 find -name "ILedService.java"
    在这里插入图片描述
    拿到windows下看下这个文件
    ILedService.java 文件中接口类 ILedService可以看到定义了ledCtrl() 接口方法
    在这里插入图片描述在这里插入图片描述

  4. 怎么调用ILedService 这个接口类呢,参考安卓源代码

  • 以振动器为例,全局搜索 IVibratorService
    在这里插入图片描述
    在这里插入图片描述
    首先定义了一个IVibratorService对象,
    实例化mService,从ServiceManager中获取"vibreator"名字的这个服务,然后转成接口赋给mService
    然后就可以掉用这些接口方法了

    编码

    1. 编写ILedService.aidl文件,编译得到ILedService.java这个文件

    2. 定义接口对象 ,实例化对象
      ILedSercice iLedService;
      iLedService = ILedService.Stub.asInterface(
      ​ ServiceManger.getService(“led”);
      );

    3. 就可以调用led控制方法了
      iLedService.ledCtrl(0,1);
      这个函数不会直接调用我们写的C函数,会把服务请求发送给LedService.java ,我们要编写LedService.java 在其中调用本地方法操作led

    4. 实现LedService.java 参考VibratorService.java

      • 定义类VibratorService
    5. 修改SystemServer.java
      addService

    6. 添加JNI文件,注册本地方法,供LedService.java使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AIOT技术栈

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值