关于Android驱动的思想困惑。

struct hw_module_t;              //模块类型
struct hw_module_methods_t;      //模块方法
struct hw_device_t;              //设备类型
这几个数据结构是在Android工作目录/hardware/libhardware/include/hardware/hardware.h文件中定义.


hal源代码目录,一般在Android 源代码目录/hardware/libhardware


根据id找到结构体,放入module结构体
module结构体是继承于hw_module_t,且内部的变量名字为
函数返回结构体,调用,结构体方法中open方法,返回控制结构体。控制结构体,控制结构体,包含操作函数
int hw_get_module(const char *id, const struct hw_module_t **module);




一般情况下,驱动是在操作系统给出的统一接口下工作的。应用通过统一系统调用接口访问设备, 中间具体是通过驱动来完成的


系统给应用程序的调用接口是什么?write?read?open?close?ioctl?驱动实现这些接口,实现具体定义。给上层调用。上层


只是使用函数,调用它,得到结果。  函数体的实现是由驱动定义的。


可以这样认为,linux中的设备文件其实就是驱动程序,write?read?open?close?ioctl?就是驱动对上层提供的系统接口。


gps驱动是在内核中,通过系统接口write,reade等调用?在外层通过hal调用?还是驱动没有统一访问接口,直接对上处理出数


据。这些已经编译好的函数,对于个人都是不可知的。




都是为了设备移植。编译,复用。   统一接口是软件开发的重要原则。


目前的问题和思路:


1.直接操纵硬件,直接根据硬件参数可以相关协议,操纵硬件。
2.知道驱动向上的接口,然后直接加载so,调用
3.通过hal,获得模块的接口及其方法。


存在的问题:每种手机硬件都是不一样的,
第一种情况,gps硬件是不是都一样
            gps驱动接口是不是都一样
            hal给出的是不是都一样




第三种,Android系统驱动与传统电脑驱动调用的区别,是否调用驱动接口是一样的。gps不是打印机,随时更换,万一坏了,再


热插拔换一个


        厂家手机系统的过程,基于每种硬件,就是Android移植,改底层驱动,都是自定义的,对于上层应用来说,


        就是拿到源代码,主要改底层驱动。然后编译系统,安装。


        原则上讲,只要是sdk,框架层的接口一致,在sdk开发阶段的能用,更下层随便改,随便实现都是可以的么??
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值