android hal 诠释
历史原因使Android系统有了HAL,它的角色相当于一个中间人,对上层,它负责给JNI提供调用kernel的方法,对下层,它所提供的方法包含能够访问kernel的函数,即kernel提供给上层的API,如:open、read、write、ioctl等;
下面,我们通过对比Android系统架构和Linux系统架构来增加理解:
Android系统架构(HAL)
Android系统架构(无HAL)
Linux系统架构
补充一下基础概念:所谓的API函数,被包含在用户层的函数库中,API对kernel是产生系统调用,对用户程序是提供产生系统调用的方法;所谓的接口,是对外公开声明的函数、变量,即汇编语言中所说的标号或符号,外部程序通过接口可以引用某些自己不具备的服务
1、Linux系统架构
Android是基于Linux的扩展,所以我们先来看一下Linux系统架构;
从软件架构的角度来看,Linux分为user层、kernel层,这两层是C实现的(应用层还可用C++实现);
从系统服务流程的角度来看,Linux有调用服务的user层、执行系统调用的服务层、支持系统调用的内核函数(服务模块);
所以,在Linux系统中访问设备的流程为:用户层程序直接产生系统调用(系统开发人员)或者通过API函数间接产生系统调用陷入kernel层,在kernel层找到用户程序所需的服务,这里说的是访问设备,则找的是device driver,通过device driver最终实现对硬件设备的访问;
以代码示意整个流程:
---------------------------------------------------------------
main()
{
operation();
extern system_call();
operation()
{
system_call();
---------------------------------------------------------------
kernel层
system_call()
{
datatype (*system_service)();
system_service = find_sys_service();
system_service();
}
device_operateion() // this is one of system service module functions(methods)
{
}
---------------------------------------------------------------
device 硬件层
---------------------------------------------------------------
2、Android系统架构
从Android系统架构(无HAL)框图可知,Android系统架构比Linux系统架构多了Application、Application Framework两层,这就是android的应用层(JAVA);
Android将Linux的应用层(用户C程序+函数库)添加一个Android Runtime作为其中间层,并将中间层和kernel层统称Android的系统层(C/C++);
HAL所调用的API来自Libraries,真正能和kernel打交道的是API,所以,Android系统架构(HAL)框图并不准确,HAL并非一个独立的具有隔离作用的层,而是从某方面性质上宣称它是一个Layer,其实它相当于Linux系统中的用户C程序组,只是它不仅要完成在Linux系统中用户C程序所要完成的工作,还要向上给JNI提供完成这些工作的接口,实现从JAVA调用C获取kernel系统服务的机制;因此,我个人认为Android系统架构(无HAL)框图更为恰当,HAL的存在只是为了在概念上更好的表述和理解Android系统而已;
Android的整个系统服务调用流程我只从HAL开始往下较为清晰,对JNI方法有初步了解,尚未完全清晰理解,JAVA层则几乎未涉及,此次学习只能暂时到此为止了!
android hal 诠释的更多相关文章
- android HAL 教程(含实例)
http://www.cnblogs.com/armlinux/archive/2012/01/14/2396768.html Android Hal 分析 ...
- 整理: Android HAL
这篇文章整理来自http://bbs.chinaunix.net/thread-3675980-1-1.html 在论坛中看到的Android HAL讨论,有个ID描述的比较清楚,摘录如下: temp ...
- 【转】Android HAL实例解析
原文网址:http://www.embedu.org/Column/Column339.htm 作者:刘老师,华清远见嵌入式学院讲师. 一.概述 本文希望通过分析台湾的Jollen的mokoid 工程 ...
- Android Hal 分析
本文是基于android4.0.3.对应其他低版本的代码,可能有所差异,但基本大同小异. Android的HAL是为了保护一些硬件提供商的知识产权而提出的,是为了避开linux的GPL束缚.思路是把控 ...
- Android Hal层简要分析
Android Hal层简要分析 Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的一个软件层次, ...
- 〖Android〗OK6410a的Android HAL层代码编写笔记
一.编写LED灯的Linux驱动程序代码 之所以使用存在HAL层,是为了保护对硬件驱动过程的逻辑与原理: 所以,残留在Linux驱动层的代码,只保留了基本的读写操作,而不含有关键的逻辑思维: 1. l ...
- I.MX6 GPS Android HAL Framework 调试
I.MX6 GPS Android HAL Framework 调试 一.参考文章: android4. GPS定位问题 http://blog.csdn.net/bzw073/article/det ...
- Android HAL实例解析
一.概述 本文希望通过分析台湾的Jollen的mokoid 工程代码,和在s5pc100平台上实现过程种遇到的问题,解析Andorid HAL的开发方法. 二.HAL介绍 现有HAL架构由Patric ...
- Android HAL模块实现
1. HAL介绍 Android的HAL(Hardware Abstract Layer硬件抽象层)是为了保护一些硬件提供商的知识产权而提出的.是为了避开linux的GPL束缚. 思路是把控制硬件的动 ...
随机推荐
- 自己测试项目中的log4j配置
日志生成的位置在项目名下 主要记录的是这样配置,日志的生成的地方 下边是配置文件的内容 log4j.rootLogger=WARN, stdout, file log4j.appender.stdou ...
- JS-jquery对象和dom对象的属性操作区别
<label class="">时间1</label> <label class="">时间2</label> ...
- 贪吃蛇(简易版)Leslie5205912著
# include <stdio.h># include <string.h># include <windows.h># include <stdlib.h ...
- tmux复制模式
复制模式支持滚屏等操作,进入方法为Ctrl + b再按"[",此时进入所谓的copy-mode 然后就可以用上下键或PageDn/PageUp浏览屏幕了. 想退出copy-mode ...
- 基于服务器的AAA配置实验(Cisco PT)
一.实验拓扑 二.网络地址分配 Device Interface IP Address Subnet Mask R1 Fa0/0 192.168.1.1 255.255.255.0 S0/0/0 10 ...
- 视频剪辑软件原型-videocut
制作软件:墨刀 分享网址:<iframe src="https://modao.cc/app/fb0e31590711295ebebdf50fff7dd9861b7a9c1d/embe ...
- 探索未知种族之osg类生物---渲染遍历之认识SceneView
前言 我们在进行osg程序的开发时,最常用到的场景管理方式是“场景节点树”的结构, a 场景树底端的叶节点(osg::Geode)包含了各种需要渲染的几何体的顶点和渲染状态信息: b ...
- 《笨方法学Python》加分题35
sys.exit 用于结束程序 from sys import exit # 进入黄金房间后的逻辑 def gold_room(): print("This room is full of ...
- form表单上传图片文件
import os def upload(request): if request.method == 'GET': img_list = models.Img.objects.all() retur ...
- shell脚本学习-练习写一个脚本1
# 1.依次展示/etc/passwd中的用户名和UID.格式如:Hello,$USER,your UID is $UID. # 2.统计一个有多少个用户 #!/bin/bash #Program D ...