《老罗的Android之旅》阅读笔记——Android硬件抽象层

写在前面的话:快两个月没看书了,颓!决定拿起学习,但害怕失掉坚持,所以写个博客让坚持看得见,也算一种督促吧!加油!

硬件抽象层在Android系统中的位置,以及它和其它层的关系:

  • 内核驱动程序路径:kernel/common/drivers

三种访问设备寄存器的方法:

一是通过proc文件系统来访问,

二是通过传统的设备文件的方法来访问,

三是通过devfs文件系统来访问

hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是:

传统的设备文件/dev/hello、

proc系统文件/proc/hello、

devfs系统属性文件/sys/class/hello/hello/val

*.使用C语言编写的可执行程序来访问我们的Linux内核驱动程序

C语言执行程序路径:external/


  • 在硬件抽象层中增加硬件模块来和内核驱动程序交互

硬件抽象层模块添加路径

.h文件:hardware/libhardware/include/hardware

.c文件:hardware/libhardware/modules

*.Hello Stub: failed to open /dev/hello -- Permission denied.

      解决办法是类似于Linux的udev规则,打开Android源代码工程目录下,进入到system/core/rootdir目录,里面有一个名为ueventd.rc文件,往里面添加一行:
      /dev/hello 0666 root root

  • 为Android硬件抽象层接口编写JNI方法

新建com_android_server_HelloService.cpp文件路径:frameworks/base/services/jni

修改同目录下的onload.cpp文件,首先在namespace android增加register_android_server_HelloService函数声明

在JNI_onLoad增加register_android_server_HelloService函数调用


  • 在Android系统的Application Frameworks层提供Java接口的硬件服务

定义好通信接口:进入到frameworks/base/core/java/android/os目录,新增IHelloService.aidl接口定义文件

进入到frameworks/base/services/java/com/android/server目录,新增HelloService.java文件

 修改同目录的SystemServer.java文件,在ServerThread::run函数中增加加载HelloService的代码


  • 通过ServiceManager接口获取指定的服务,然后通过这个服务来获得硬件服务

helloService = IHelloService.Stub.asInterface( ServiceManager.getService("hello"));


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值