一、Android系统的一般性框架

一、android 系统的启动流程

一张自做草图先大概了解下:
            第一个android进程,或许说是第一个dalvik进程zygote进程,是在init.rc中用命令启动的,init.rc在device/方案商/产品型号 中,各个厂商可能会有不同的命名,比如rk  init.rk30board.rc。里面会有启动zygote进程和传参的具体细节,如果想深入了解可参考老罗的系列文章:Dalvik虚拟机的启动过程分析。
          我这里引入一个形象的比喻,也是出自一位网友的博客。如果android是一个世界,我们把init.rc比喻成造物者,它创造的第一个人就是亚当(zygote),亚当(zygote)一个人太寂寞,用自己的肋骨(fork 子进程)创造了夏娃(SystemServer),夏娃(SystemServer)负责创建更多的人(package service,power service。。。。。),当创造的东西太多了,就需要一个管家(activity manage service)来管理,就这样人数(service)越来越多,但是仍然井然有序,每一个人的祖先都是zygote,他们的基因(各自所对应的dalvik虚拟机实例,或者后面版本的ART虚拟机实例)都是从祖先(zygote)遗传下来(zygote fork子进程之前就已经初始化了dalvik/art 虚拟机,所以都会复制一份给到子孙进程)。如果这个世界想诞生新的人(service),必须向AMS提出需求,然后转告给zygote,由zygote来进行fork子进程,其实有一点是不一样的,夏娃并不会自己创造人类,最终都是亚当来完成实质的创造过程。以上只是一个浅显的比喻,便于大家理解android中的service 各个级别。

二、Android的CS架构

一张草图说明一下:
流程看似简单,CS架构,这是android整体的基本框架,几乎所有的流程都是按照这么个章法来走的。了解android的基本框架,对android的各个模块的学习有很大的帮助,这个框架的核心就是基于IPC Binder的通信过程,涉及了C++中多种设计模式,比如代理模式,出现太多Bp,Bn开头的类名,比如builder模式(camera中会应用)等,还有当中引入的weak stronger pointer来对指针进行管理,大大减小了指针引起的各种内存问题。

三、Android 一般性Hardware AL框架

我觉得网上已经有相当不错的介绍,就拿老罗的文章,深入分析了hello module的例子,我就不赘述了:在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序。

二、Android camera的框架

一、Android camera framework层框架分析

抛出一张图压压惊:
           上面一个类+流程图的关系描述了camear中比较重要的接口startPreview的整体调用流程,这里数据流向和callback相关的类没有深入分析,后面博客会详细说明。图中已经说明了一切,我这边简单说下代码的位置:
camera java:
 frameworks\base\core\java\android\hardware
JNI interface :
 frameworks\base\core\jni
camera client:
 frameworks\av\camera
camera service:
 frameworks\av\services\camera
大家看C++代码的时候注意留意文件夹中的Android.mk文件,当中会描述该方案商会选择什么version的camera,即会参加编译成库的文件。

二、Android Hardware AL camera框架分析

序言:我手上的代码是RK3288的代码,所以这里仅介绍RK camera的框架,当然这里只是从框架上进行分析,具体细节后面系列文章会继续分析。
    
     下面先贴出service调用到hal层的接口
仔细跟踪代码会发现CameraSevice类中的方法onFirstRef()会去调用hw_get_module加载这个操作:
void CameraService::onFirstRef()
{LOG1("CameraService::onFirstRef");BnCameraService::onFirstRef();if (hw_get_module(CAMERA_HARDWARE_MODULE_ID,(const hw_module_t **)&mModule) < 0) {ALOGE("Could not load camera HAL module");mNumberOfCameras = 0;}else {ALOGI("Loaded \"%s\" camera module", mModule->common.name);mNumberOfCameras = mModule->get_number_of_cameras();if (mNumberOfCameras > MAX_CAMERAS) {ALOGE("Number of cameras(%d) > MAX_CAMERAS(%d).",mNumberOfCameras, MAX_CAMERAS);mNumberOfCameras = MAX_CAMERAS;}for (int i = 0; i < mNumberOfCameras; i++) {setCameraFree(i);}if (mModule->common.module_api_version >=CAMERA_MODULE_API_VERSION_2_1) {mModule->set_callbacks(this);}CameraDeviceFactory::registerService(this);}
}

具体细节可自己跟踪代码看看。

这个接口的定义在camerahal_module.cpp文件中,为的就是标准化camera的接口。每个接口的具体实现都在camera_hal.cpp中,不过当中还只是一个简单的抛出cmd的操作,这就涉及到了camera hardware 的架构设计了,下面抛出一张草图:
RK 的camera hal看起结构比较简单两个主要的线程一个负责处理上层的接口要求,一个负责处理数据流相关基本也是cs模式。
综上camera的架构大致梳理完毕,草图纯手工制作用的软件是亿图,下一阶段会具体到各个细节的实现。

android4.4 Camera 框架纵横方向分析相关推荐

  1. Android Camera TakePicture過程分析

    Android Camera TakePicture過程分析 接著上一篇文章,繼續講解camera拍照等具體功能實行流程 Camera子系统采用C/S架构,客户端和服务端在两个不同的进程当中,它们使用 ...

  2. 增加录像时间戳水印、 camera框架介绍

    最近项目上要在mtk6589机器上增加录像的水印功能,那个纠结呀--  一大通 度娘.google啊-- 最终整个变通的方案:做好10几个bmp(8位深度黑底白字)贴图,把文件使用ue去除掉bmp文件 ...

  3. msm8996平台的 camera 框架笔记

    msm8996平台的 camera 框架笔记 标签(空格分隔): camera 文章目录 msm8996平台的 camera 框架笔记 @[toc] 0 前言 1 kernel中的camera结构 1 ...

  4. 中国幼儿教育市场运营模式与未来发展方向分析报告2022版

    中国幼儿教育市场运营模式与未来发展方向分析报告2022版 HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS--HS-- [修订日期]:2021年11月 [搜索鸿晟信 ...

  5. 全球及中国第五代移动通信技术(5G)产业建设现状与应用发展方向分析报告2022年

    全球及中国第五代移动通信技术(5G)产业建设现状与应用发展方向分析报告2022年 -------------------------------------  <出版单位>:鸿晟信合研究院 ...

  6. SPI驱动框架源码分析

     SPI驱动框架源码分析 2013-04-12 16:13:08 分类: LINUX SPI驱动框架源码分析 SPI协议是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式.相关通讯设 ...

  7. S3C24XX DMA框架源码分析

    基于S3C2440 的DMA 框架源码分析 基于S3C2440 的DMA 框架源码分析 二寻根溯源 1 设备类的注册 2 s3c2410_dma_init 3 s3c24xx_dma_order_se ...

  8. C++程序员学习发展方向分析和指导(C++入门学习指导建议必看)

    一路走来,磕磕碰碰,走到现在,历经了千辛万苦,可是路才刚刚开始走,未来还很长,我将会不断的思考和探索. 我想,如果是打算走进C++编程的同志们,请好好看完这篇文章,或许,对你的发展有所启发.但是,不要 ...

  9. 高通平台Camera 框架简介

    接触高通平台camera不长时间,了解的不够深入,下面个人所了解内容的是基于高通平台的camera,有的地方能描述不一定会很清楚,以后会慢慢补充! 一 框架介绍 Package -> Framw ...

最新文章

  1. 笔记本电脑排行_笔记本电脑性价比排行2020
  2. 关于surface安装foxmail附件预览失效解决方案
  3. ARC-060C - Tak and Cards - 动态规划
  4. 【刷题】BZOJ 2125 最短路
  5. C++和C语言函数相互调用
  6. 大二下学期学习进度(四)
  7. SharePoint Framework 企业向导(三)
  8. Oracle客户端的卸载
  9. 未来两年九大信息安全威胁
  10. Solidity safesub防止溢出
  11. CentOS6.x 升级 CentOS7.1
  12. freeswitch 用户配置详解_FreeSwitch配置和使用手册
  13. 2017中国云计算开源优秀案例
  14. 基于Matlab的自适应低通滤波器设计,课程设计-低通滤波器设计(含matlab程序)
  15. Netapp存储日常检查及信息收集
  16. 数据中心与云计算关系
  17. mysql的连接名和用户名_MySQL登陆认证用户名先后顺序
  18. 软件测试周刊(第23期):你理想中的工作是什么?
  19. Redis源码阅读,从入门到放弃
  20. Unity2019中的android动态申请权限(Permissions)

热门文章

  1. 堵在路上的你,真的要好好补一补了……
  2. EasyCVR对接用户自研国标平台出现invite消息无消息返回无法播放问题排查
  3. 在线购物平台领域类图
  4. 【期末复习】北京邮电大学《网络安全》课程期末复习笔记(9. 虚拟专用网络)
  5. 1.19.7.Table API、SQL、数据类型、保留关键字、查询语句、指定查询、执行查询、语法、操作符、无排名输出优化、去重、分组窗口、时间属性、选择分组窗口的开始和结束时间戳、模式匹配
  6. 如何选用模块化UPS
  7. linux 进程通信机制,LINUX内核进程高效通信机制研究
  8. 从云鲸率先布局上门服务,看其如何用服务冲破行业“封锁线”
  9. java实现 蓝桥杯 算法训练 安慰奶牛
  10. idc模板html页,一套IDC主机皮-Html模板BREED HOSTING