![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android
文章平均质量分 70
Android
嵌入式_笔记
!
展开
-
Android MTK平台使用设备树的方式操作GPIO
【代码】Android MTK平台使用设备树的方式操作GPIO。原创 2024-05-30 00:38:50 · 156 阅读 · 0 评论 -
Android Binder机制
Binder是什么?Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信,Interprocess Communication)方案。也存在部分其他的IPC方式,如管道、SystemV、Socket等。原创 2024-05-05 21:37:24 · 318 阅读 · 1 评论 -
Android selinux权限
SELinux 是由美国NSA(国安局)和 SCC 开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以 GNU GPL 发布。从 fedora core 2开始, 2.6内核的版本都支持SELinux。在 SELinux 出现之前,Linux 上的使用的安全模型是 DAC( Discretionary Access Control 自主访问控制)。DAC 的核心思想很简单:进程理论上所拥有的权限与执行它的用户的权限相同。原创 2024-05-05 15:14:28 · 1019 阅读 · 0 评论 -
Android 恢复出厂设置流程
1、应用可以通过发送 android.intent.action.FACTORY_RESET 广播,来启用原生的恢复出场设置功能。当然需要申请权限(android:permission=“android.permission.MASTER_CLEAR”)2、系统中的 /android/frameworks/base/core/res/AndroidManifest.xml 中定义类广播的接收器为 MasterClearReceiver。原创 2024-05-02 00:09:18 · 1117 阅读 · 0 评论 -
Android 系统升级流程分析
Android支持Recovery模式。在某些操作之后,系统会自动重启并进入到Recovery模式,用户按组合键开机(HOME+POWER),也可进入Recovery模式。该模式提供如下功能:1、擦除用户数据恢复系统到出厂模式,即擦除用户数据和缓存数据。2、系统升级系统升级的概念比较广,包括系统文件的升级、恢复损害的系统数据、的升级,以及应用软件的维护,甚至影音文件的下载。系统升级需要使用特定的升级包,Android使用OTA[1]升级包,其初衷在于可以发挥广域无线通信链路的优势,如3G。原创 2024-05-01 20:08:38 · 711 阅读 · 0 评论 -
Android13 GKI架构开发方式
GKI:Generic Kernel Image 通用内核映像。Android13 GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像,是google为了解决内核碎片化的问题,而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加载模块中。核心内核为驱动模块提供了稳定的内核模块接口,模块驱动和核心内核可以独立进行更新。内核接口可以通过upstream的方式进行扩展。原创 2023-12-28 23:34:51 · 2175 阅读 · 2 评论 -
Android 音频系统
当AudioFlinger/AudioPolicyService初始化时,它们会去寻找系统中最匹配的实现(这些实现驻留在以audio.primary.,audio.a2dp.为名的各种库中)来填充这些“壳”。根据产品的不同,音频设备存在很大差异,在Android的音频架构中,这些问题都是由HAL层的audio.primary等等库来解决的,而不需要大规模地修改上层实现。Codec用于实现平台无关的功能,如寄存器读写接口,音频接口,各widgets的控制接口和DAPM的实现等。原创 2024-04-13 21:41:12 · 739 阅读 · 0 评论 -
Android input输入子系统
Input系统是Android系统中负责处理用户输入操作的核心组件,它负责从各种输入设备(如屏幕、键盘、鼠标等)获取原始的输入事件(如按键、触摸、滑动等),并将其转换为Android应用可以理解和消费的KeyEvent或MotionEvent对象。Input系统对于提供流畅、灵敏和一致的用户交互体验至关重要,它需要在不同的设备、场景和应用中保证输入事件的正确性、及时性和安全性。原创 2024-03-16 18:24:05 · 554 阅读 · 0 评论 -
Android Display显示框架整体流程
Android Display显示框架整体流程图原创 2024-02-03 12:36:09 · 482 阅读 · 0 评论 -
Android 显示系统框架
FrameBuffer中文译名为帧缓冲驱动,它是出现在2.2.xx内核中的一种驱动程序接口。主设备号为29,次设备号递增。Linux抽象出FrameBuffer这个设备来供用户态进程实现直接写屏。FrameBuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过FrameBuffer的读写直接对显存进行操作。用户可以将FrameBuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。原创 2024-03-03 01:10:35 · 1576 阅读 · 0 评论 -
Android MTK HAL算法集成之单帧算法
添加metadata是为了让APP层能够通过metadata传递相应的参数给HAL层。APP层是通过CaptureRequest.Builder.set(@NonNull Key key, T value)来设置参数的。由于我们是自定义的feature,无法复用MTK提供的metadata,因此,我们需要自定义metadata。+ //+}*};...转载 2022-08-31 23:53:26 · 1285 阅读 · 1 评论 -
Android Camera 驱动 读取摄像头ID失败问题、低温下Camera打开花屏或者读不到id、概率性读取不到id
如MTK平台的,它在这个文件里实现:mt6737_65_a_n_mp1\kernel-3.18\drivers\misc\mediatek\imgsensor\src\mt6735\camera_hw\kd_camera_hw.c。前后id的读取顺序和otp的加载顺序不一致,导致概率性读不到id的,高通在点亮gc8034时,也遇到概率性读不到id的情况。standby脚拉高->reset脚拉高->设置mclk为24M->io拉高->avdd拉高->dvdd拉高,下 电时相应的脚没有被拉低!...转载 2022-08-04 23:24:31 · 4876 阅读 · 2 评论 -
Android Camera驱动 花屏、分屏、卡屏,黑屏问题分析
为啥全尺寸3264x2448(800w)输出,这路供电可以固定到1.4V,使用小尺寸1632x1224(200w)输出时,DVDD在1.2V到1.4V直接不停的跳。不同厂家的sensor,对时序的要求不一样,像OV5675对三路上电的时序就没有严格的要求,gc8034相对来说要严格一下。可以看到,在使用小尺寸1632x1224(200w)输出时,DVDD在1.2V到1.4V直接不停的跳,导致供电电压不稳定,如果芯片不是很好,也可能带来莫名其妙的bug,图像异常,黑屏等,存在这样的隐患。...转载 2022-08-04 22:57:20 · 1284 阅读 · 1 评论 -
Android Camera 高通驱动KMD框架
一、概览利用了V4L2可扩展这一特性,高通在相机驱动部分实现了自有的一套KMD框架,该框架通过V4L2标准方法在系统中创建设备节点,将控制接口直接暴露给UMD CSL进行访问,而其内部主要定义了一系列核心模块,包括CRM(Camera Request Manager),用于管理整个KMD的Session/Link的创建销毁以及Request的在子设备间的流转,该模块创建video0设备节点暴露关键接口给UMD,此外还包括了Sync模块,主要负责了UMD/KMD之间的数据同步与传输,创建video1设备节点转载 2022-07-10 23:51:11 · 2076 阅读 · 0 评论 -
Android Camera 驱动 Bringup
参考链接:【高通SDM660平台】(1) --- Camera 驱动 Bringup Guide_CielleeX的博客-CSDN博客dts 文件目录:高通SDM660平台代码中,arm64 与 arm 走的是同一个目录文件,kernel\msm-4.4\arch\arm64\boot\dts\qcom这个目录其实是 \kernel\msm-4.4\arch\arm\boot\dts\qcom的软链接。Camera 相关的 dts 文件:1.1 sdm660.dtsi在该文件中,主要功能如下:转载 2022-07-05 01:20:29 · 1808 阅读 · 0 评论 -
Android Camera - camera provider启动流程
1.camera provider进程介绍:其中的pid是736,说明camera provider进程启动的时机比较早,而且权限组是 cameraserver手机上运行的android.hardware.camera.provider@2.4-service进程是支持camera运行的重要进程。上面这张图比较清楚的表现了camera provider进程在camera架构中位置,作为承上启下的部分,和cameraserver进程和底层的驱动交互,camera provider进原创 2022-05-28 00:05:59 · 1623 阅读 · 0 评论 -
Android Camera - v4l2编程接口ioctl调用流程
1.概念octl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。在文件 I/O 中,ioctl 扮演着重要角色,本文将以驱动开发为侧重点,从用户空间到内核空间纵向分析 ioctl 函数。2.用户空间 ioctl#include <sys/ioctl.h> int ioctl(int fd, int cmd, ...) ;参数原创 2022-05-27 23:20:14 · 931 阅读 · 0 评论 -
Android Camera--hw_get_module获取camx模块接口
我们知道,google为了保护硬件厂商的信息,在Android中添加了一层,也就是大名鼎鼎的HAL层。在看HAL的编写方法的过程中,会发现整个模块貌似没有一个入口。一般说来模块都要有个入口,比如应用程序有main函数,可以为加载器进行加载执行,dll文件有dllmain,而对于我们自己写的动态链接库,我们可以对库中导出的任何符号进行调用。问题来了,Android中的HAL是比较具有通用性的,需要上层的函数对其进行加载调用,Android的HAL加载器是如何实现对不同的Hardware原创 2022-05-17 23:07:21 · 522 阅读 · 1 评论 -
Android Camera Probe 代码分析
1.libmmcamera_imx258.so 代码分析Sensor LIB 库代码位于 /vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor/libs本文以 imx258 为例。先来看下imx258_lib.c,其最核心的函数就是 sensor_open_lib,返回 sensor_lib_ptr 结构体,所有的 Camera 信息,都保存在该结构体中。@ /vendor/原创 2022-05-15 23:30:37 · 1521 阅读 · 0 评论 -
Android Camera V4L2框架的驱动层分析
1.V4L2 框架v4l2驱动框架主要的对象有video_device、v4l2_device、v4l2_subdev、videobuf。video_device:一个字符设备,为用户空间提供设备节点(/dev/videox),提供系统调用的相关操作(open、ioctl…)v4l2_device:嵌入到video_device中,表示一个v4l2设备的实例v4l2_subdev:依附在v4l2_device之下,并表示一个v4l2设备的子设备,一个v4l2_devide下可以有原创 2022-05-15 22:24:23 · 1040 阅读 · 0 评论 -
Android Camera AE(自动曝光)原理与问题
1.自动曝光原理自动曝光就是相机根据光线条件自动确定曝光量。从控制过程上分,可分为光圈优先、快门优先、混合优先、程序控制、预定模式几种。顾名思义,光圈优先就是,先确定使用的光圈,相机根据计算出的曝光量确定合适的快门速度,这种方式适用于需要预定景深或者配合闪光灯调配光比的场合;速度优先就是先确定快门速度,让相机选择合适的光圈大小,适用于拍摄动体;混合优先是弥补单一优先的不足而先确定光圈或快门的范围,再由相机确定曝光组合;程序控制是让相机按照预先编定的控制程序曝光;预定模式,是生产厂家根据几种.原创 2022-05-15 19:11:12 · 8434 阅读 · 0 评论 -
Android Camera 从应用层看V4L2驱动框架
V4L2可用于采集图片、视频和音频数据的通用 API 接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。使用 V4L2 进行视频采集,一般分为 5 个步骤:(1) 打开设备,进行初始化参数设置,通过 V4L2 接口设置视频图像的采集窗口、采集的点阵大小和格式;(2) 申请图像帧缓冲,并进行内存映射,将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取、处理图像数据;(3) 将帧缓冲进行入队操作,启动视频采集;(4) 驱动开始视频数据的采集,应用程序从视频原创 2021-08-24 23:08:48 · 1549 阅读 · 1 评论 -
Android camera 打开失败或不能同时打开多路
camera打开失败:1.没有对应摄像头这个需要检查底层驱动有没有添加对应的camera,如果没有添加是找不到camera ID的,camera id找不到自然是打不开摄像头的。例如可能只有两个摄像头,下标从0开始,Camera.open(2)打开的是第3个摄像头就会出问题 private void openCamera(int cameraFacing) throws RuntimeException { releaseCamera(); Cam原创 2021-10-31 18:23:10 · 396 阅读 · 0 评论 -
Android Camera 相机驱动
高通驱动参考链接:【高通SDM660平台】(1) --- Camera 驱动 Bringup Guide_|~~~热爱生活、努力学习的小伙汁~~~|-CSDN博客_sdm660【高通SDM660平台】(2) --- Camera Kernel 驱动层代码逻辑分析_|~~~热爱生活、努力学习的小伙汁~~~|-CSDN博客【高通SDM660平台】(3) --- Camera V4L2 驱动层分析_|~~~热爱生活、努力学习的小伙汁~~~|-CSDN博客...原创 2021-10-17 23:30:35 · 473 阅读 · 3 评论 -
Android Camera Qcom 架构流程分析
1.打开相机设备/初始化相机设备https://img-blog.csdnimg.cn/20200420210344912.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1RheWxvclBvdHRlcg==,size_16,color_FFFFFF,t_70一旦用户打开相机应用,首先会调用hal层的open函数,映射一个camera..原创 2021-08-29 00:00:41 · 1358 阅读 · 0 评论 -
Android Camera Qcom Camx架构
1.Camx-CHI基本目录结构Camx 代表通用功能性接口的代码集合, chi-cdk 代表可定制化需求的代码实现集合, Camx部分对上作为 HAL3 接口的实现, 对下通过 v4l2 框架与 Kernel 保持通讯, 中间通过互相dlopen so 库并获取对方操作接口的方式保持着与 CHI 的交互。2.Camx/下主要目录:core/: 存放 camx 的核心实现模块, 还包含主要用于实现 hal3 接口的 hal/目录, 以及负责与 CHI 进行交互的 chi/目录转载 2021-08-28 22:09:36 · 1205 阅读 · 3 评论 -
Android Camera MtkCam3架构流程分析
1.HALMTK Camera Hal,目前最新Android Camera Api2下用的都是HAL3的内存,HAL3主要代码在mtkcam3中,有些工具类复用了mtkcam中。vendor/mediatek/proprietary/hardware/mtkcam/vendor/mediatek/proprietary/hardware/mtkcam3/2.Camera HAL3 init上层framework通过ServiceManger得到CameraService服务原创 2021-08-27 23:21:47 · 2529 阅读 · 2 评论 -
Android Camera MTK框架
Camera简介:虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。...原创 2021-06-23 21:16:15 · 3687 阅读 · 0 评论 -
Android Camera 元数据Matada和与3A模式
1.元数据要支持通过 Android 框架保存原始图片文件,需要具有大量有关传感器特性的元数据,包括色彩空间和镜头遮蔽功能等信息。其中大多数信息是相机子系统的静态属性,因此可以在配置任何输出流水线或提交任何请求之前进行查询。新的相机 API 极大地扩展了getCameraInfo()方法提供的信息,以便将此类信息提供给应用。此外,手动控制相机子系统需要各种设备提供的有关其当前状态的反馈,以及在捕获指定帧时使用的实际参数。必须在输出元数据中包含硬件实际使用的控制(曝光时间、帧时..原创 2021-08-27 21:47:41 · 744 阅读 · 0 评论 -
Android Camera 图像出现异常
1.什么是图像异常日常拍照的正常的图片,接近人眼观测,展现物体反射光线的颜色。图像异常:很明显拍出来的图片看出有问题-> 花屏、绿屏、蓝屏、水波纹、黑屏、无图像。-> 图片中间出现红光、蓝光、杂光、漏光等现象。-> 图片中间有常亮点或常黑点、损伤点。解决办法:dump出图片,排查在拍照通路的哪个环节出现问题。2.Dump拍照对应的raw图Non-zsl拍照会让P1node重新出raw图,而拍照会用到这些raw图中的imgo buffer。TG会生原创 2021-09-16 22:06:27 · 1389 阅读 · 0 评论 -
Android Camera 数据通路
1.数据通路概况数据通路并不是单纯软件上的通路,也是硬件上的通路,包括硬件上是怎么流的。PASS1是raw数据,在编码之前都是YUV数据,sersen出帧后过的第一个模块是TG,TG把sersen搜集的每一行数据,打包成一帧,把这一帧送到PASS1,PASS1有3路,一路人脸识别(YUV),一路拍照,一路预览。2.预览通路预览的时候把一帧写入内存,只缓存了一帧内存,这一帧直接送到PASS2,不管是拍照还是预览都要进过Pass2,Pass2主要是由Raw转化成YUV,转化后原创 2021-09-17 18:51:45 · 1040 阅读 · 1 评论 -
Android APP camera2流程
最近在学习有关人脸识别的闸机系统,对用到的知识点进行总结. Android5.0后就弃用了Camera1,而Camera1和Camera2的差别还是很大的,Camera2提供了很多新特性.本文使用Camera2实现了相机预览,拍照等功能. 开发工具:AS 3.4.1 真机:荣耀10 ...转载 2021-11-13 17:24:20 · 900 阅读 · 0 评论 -
Android Camera Hal3 子系统流程通路
1.Camera Hal3数据流程通路2.open流程(黑色箭头线条)CameraManager注册AvailabiltyCallback回调,用于接收相机设备的可用性状态变更的通知。CameraManager通过调用getCameraldList()来获取当前可用的Camera id,通过getCameraCharacteristcs() 函数获取指定相机设备的特性。CameraManager调用openCamera()打开指定相机设备,并返回一个CameraDevice对象.原创 2021-08-27 21:34:06 · 911 阅读 · 0 评论 -
Android Camera HAL1&HAL3的区别
1.HAL 1 概述由于相机 HAL1 已弃用,建议在搭载 Android 9 或更高版本的设备上使用相机 HAL3.相机子系统的第 1 个版本被设计为具有高级控件和以下三种运行模式的黑盒子:预览视频录制静态拍摄三种模式具有略有不同又相互重叠的功能。这样就难以实现介于其中两种运行模式之间的新功能,例如连拍模式由于很多设备仍然依赖相机 HAL1,因此 Android 7.0 继续支持该模块。此外,Android 相机服务还支持同时实现两种 HAL(1 和 3),如果您希望通原创 2021-09-16 22:34:34 · 2078 阅读 · 1 评论 -
Android AIDL接口
AIDL(Android Interface Definition Language)是一种 IDL 语言,用于生成可以在 Android 设备上两个进程之间进行进程间通信(IPC)的代码。通过 AIDL,可以在一个进程中获取另一个进程的数据和调用其暴露出来的方法,从而满足进程间通信的需求。通常,暴露方法给其他应用进行调用的应用称为服务端,调用其他应用的方法的应用称为客户端,客户端通过绑定服务端的 Service 来进行交互。原创 2024-04-20 20:15:55 · 521 阅读 · 0 评论 -
Android HIDL接口添加
HIDL的全称是HAL interface definition language(硬件抽象层接口定义语言),是AndroidFramework 与Android HAL之间的接口。HIDL 旨在用于进程间通信 (IPC),进程之间的通信采用 Binder 机制。原创 2024-05-30 22:22:15 · 521 阅读 · 0 评论 -
Android 之 Binder机制HIDL接口
1.HIDL 介绍HIDL(HAL interface definition language),HAL 接口定义语言是用于指定 HAL 层和其用户之间的接口的一种接口描述语言(IDL)。HIDL 允许指定类型和方法调用。从更广泛的意义上来说,HIDL是用于在独立编程的代码库之间通信的系统。https://source.android.com/devices/architecture/hidl2.实现自己的一个HIDL本文以LED为例在aosp上添加HIDL,以熟悉整个过程。原创 2022-05-24 23:37:37 · 2466 阅读 · 0 评论 -
Android 广播的基本概念
Broadcast是安卓四大组件之一。安卓为了方便进行系统级别的消息通知,引入了一套广播消息机制。打个比方,记得原来在上课的时候,每个班级的教室里都会装有一个喇叭,这些喇叭都是接入到学校的广播室的,一旦有什么重要通知,如上课铃下课铃,学校就会播放一条广播来告知全校的师生。这是一个非常形象容易理解的句子,很好的解释了Broadcast大概的意思,不过,Android中的广播机制更加灵活。为什么会说Android中的广播机制更加灵活呢?原创 2024-02-23 00:02:28 · 633 阅读 · 0 评论 -
Android 系统启动流程
Android系统完整的启动过程,从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段;整体流程概括为:启动BootLoader->加载系统内核->启动Init进程->启动Zygote进程->启动Runtime进程->启动本地服务->启动Home Launcher。当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。被SystemServer启动的AMS会启动Launcher,Launcher启动后会将已安装应用的图标显示在桌面上。启动系统中的各种服务。原创 2024-02-07 17:15:03 · 2072 阅读 · 0 评论 -
Android JNI机制
1.JNI概述JNI,即Java Native Interface,即 "Java本地调用";Java程序中的函数可以调用Native语言写的函数(Native一般指的是C/C++编写的函数);Native程序中的函数可以调用Java层的函数;2.为什么会划分为Native和Java两部分Android系统按语言来划分的话由两个世界组成,分别是Java世界和Native世界。那为什么要这么划分呢?Android系统由Java写不好吗?除了性能的之外,最主要的原因就是在Java诞生之前,就有很多程序和库都是由原创 2022-06-01 23:49:52 · 243 阅读 · 0 评论