Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介
Android HAL层与Linux Kernel层驱动开发简介
近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记。
HAL:Hardware Abstract Layer 硬件抽象层,由于Linux Kernel需要遵循GPL开源协议,硬件厂商为了保护自己硬件方面的各项参数不被外泄,而一个设备的驱动程序包含了硬件的一些重要参数,所以驱动的开源势必会使硬件厂商蒙受损失,Google为了保护硬件厂商的利益,所以在Android系统中加入了HAL层,在HAL层中不必遵循GPL协议,所以代码可以封闭。
所以如果硬件驱动开源的写在Kernel里,Framework直接调用,而不愿意开源的就写在HAL层里,实现闭源。
那究竟HAL怎样实现闭源的呢?我们来画个简图.(注意:本文只提供攥写驱动的大致思路,不对细节代码负责。)
一,编写驱动期以及LoadingTime:
编写驱动分为两个部分,一个是HAL层的驱动代码,一个是Kernel层的驱动代码。
1,HAL框架提供了三个结构体,分别为hw_device_t , hw_module_t ,hw_module_methods_t。
编写HAL层驱动首先要依据这三个结构体作扩展,我们创建自己驱动的device_t,module_t代码,并且写hw_module_methods_t这个结构体中方法的实现代码,这个部分叫做HAL Stub,编写此部分驱动分为三个步骤:
第一,创建myDeviceModel实例,第二,将hw_module_methods_t指针设定给myDeviceModel,实现hw_module_methods_t这个函数表里函数的代码.
2,在Kernel层框架同样提供了多个结构体(module,file,file_operations,cdev),我们可以对系统提供的结构体进行扩展,或者直接使用系统的结构体。这个部分叫做Linux Kernel Stub,编写此部分代码分为多个步骤:第一,创建myFile实例,第二 设定file_operations指针给myFile,第三 写file_operations这个函数表中函数的实现代码即开源部分代码,第四,创建myDeviceModule装配 cdev与myFile。
3,写完以后编译系统即将驱动封装载入系统中,装在过程首先会调用myDeviceModule的init,完成内核stub的载入,Hal层完成了对myDevice的创建.
二,调用驱动期(RunTime):
上面提到在HAL层我们编写了HAL_STUB部分,我们来分析下系统究竟怎么调用到硬件的,首先我们使用HAL框架为我们提供的函数get到我们写的HALStub层的myDeviceModule,通过myDeviceModule获取到myDevice,调用myDevice的setData或者getData方法,然后调用封闭代码区的函数,封闭代码区会调用systemCall调用linux内核的read(),write()函数,read(),write()往下就是硬件了。
总结:HALStub与KernelSutb部分为厂商开源部分,mydevice.so为闭源部分.本文只是对驱动开发思路以及代码执行流程作了个简介,如有错误的地方还请指正。
Android 系统(4)---Android HAL层与Linux Kernel层驱动开发简介相关推荐
- Android HAL层与Linux Kernel层驱动开发简介
Android HAL层与Linux Kernel层驱动开发简介 阅读数:5070 近日稍微对Android中的驱动开发做了一些简要的了解,稍稍理清了一下Android驱动开发的套路,总结一下笔记. ...
- Android系统 linux内核按键驱动开发
Android系统 linux内核按键驱动开发 前言 刚入门的小白,在csdn的帮助下完成了第一个按键驱动,特写此文记录学习并分享给有需要的人. 1.修改设备树.dts 我是用的开发板是rp-rk32 ...
- Android系统架构-[Android取经之路]
摘要:本节主要来讲解Android的系统架构 阅读本文大约需要花费10分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! 欢 ...
- android 服务端技术,移动应用服务器端开发(基于JSP技术)-2017 Android系统构架 Android系统构架.docx...
Android系统构架 PAGE 1 目 录 TOC \o "1-3" \h \z \u 一.Android系统构架 1 二.Linux内核层 2 三.系统运行库层 3 (一)系统 ...
- Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序(文末送书)
Android 系统到底提供了哪些东西,供我们可以开发出优秀的应用程序. 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体 ...
- 【android系统】android系统升级流程分析(二)---update升级包分析
接下来我们将通过几篇文章来分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.今天让我先来分析下升级包update.zip. 一 ...
- 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析
今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...
- android log抓取方法,Android系统之Android抓取各种log的方法
Android系统之Android抓取各种log的方法 2018年11月25日 | 萬仟网移动技术 | 我要评论 android之android抓取各种log的方法 1.logcat (四类log b ...
- 转载:Linux kernel SPI驱动解释
From: http://www.cnblogs.com/liugf05/archive/2012/12/03/2800457.html 下面有两个大的模块: 一个是SPI总线驱动的分析 ...
最新文章
- Form表单提交前进行JS验证的3种方式
- Python中的过滤器
- Facebook 3D视觉研究最新进展
- 【C++ STL】Map库使用方法
- win10添加美式键盘_win10玩dnf卡顿,怎么解决?
- AutoML - 数据增广
- BZOJ4403 序列统计—Lucas你好
- 《Programming in Lua 3》读书笔记(十二)
- Gompertz模型绘图 matlab,Logistic模型matlab求解
- python中文注释
- Android系统性能优化(56)---APP性能优化
- ASP.NET MVC3 Model验证总结
- 【算法竞赛-入门经典】计算并输出1+2的值
- 计算机禁止安装游戏软件,禁止游戏软件(游戏控制软件)
- Thinkpad L430无法识别Trackpoint解决方案
- IKEv2协议报文分片处理
- Java实现屏幕截屏
- (二十三)【模电】(波形的发生与信号的转换)非正弦波发生电路
- EOS FoMo 3D狼人杀游戏骗局始末,及两点建议
- window的onload事件的用法