自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(194)
  • 问答 (1)
  • 收藏
  • 关注

转载 第27讲 Camera Native FW API1和API2调用HAL3流程介绍

API2中,所有数据流都走BufferQueue,Camera3Device通知Camera3Stream buffer处理完毕后,会直接queueBuffer给BufferQueue,进而Consumer就会被通知到有Buffer上来了。非ZSL且不带AE Prepare Trigger的拍照流程如上图所示,整个拍照过程由CaptureSequencer来驱动,JpegProcessor收到拍照图像后,通知给CaptureSequencer负责回调给App。启动数据流 sensor不停采图。

2024-08-25 20:00:12 3

转载 第26讲 Camera Native FW Device架构介绍

上层使用API1时,Buffer送到Stream后,要么直接送给上层(Preview+Recording Stream),要么送给Processor取出Buffer回调给上层。Camera3Device 和 Camera2Device 都继承自,CameraDeviceBase ,他们的区别对 Camera2ClientBase 是透明的。从两个角度来看Camera Device架构。其实这个设计有点混乱,还有可以优化的地方。

2024-08-25 19:18:22 3

转载 第25讲 Camera Native FW Service和Client架构介绍

与CameraProviderManager交互,通过CameraProviderManager调用到底层HAL的实现(ICameraProvider/ICameraDevice)当调用 (switchToOffline) CameraDeviceClient 就会切换到 CameraOfflineSessionClient。Camera Client可以通过sCameraService静态属性访问回CameraService。实现BnCameraService接口,对外提供服务。

2024-08-25 17:41:27 4

转载 第24讲 Camera Native FW总体架构介绍

VNDK API 作用: 在vendor 分区通过自己的apk去写 camera。android 只支持 hal3。

2024-08-25 16:49:49 2

转载 第23讲 Parcel对象相关的AIDL详解

在AIDL的客户端和服务端通信的过程中,除了方法调用外,我们还需要传递一些数据,这些数据的类型都必须是parcelable的(需要实现。

2024-08-25 15:58:35 2

转载 第22讲 ICameraDeviceCallbacks.aidl详解

ICameraDeviceCallbacks是ICameraDeviceUser的回调类,通知AppCamera Device的状态每一个Capture Request的状态以及回调CaptureResult。

2024-08-24 21:44:45 1

转载 第21讲 ICameraDeviceUser.aidl详解

Camera app执行open camera后,Camera Java FW调用ICameraService的connectDevice方法获取到一个ICameraDeviceUser对象ICameraDeviceUser代表的就是一颗CameraDevice,后续的Camera操作流程就是基于ICameraDeviceUser对象。ICameraDeviceUser 就是下图中CameraDevice的一个抽象。

2024-08-24 21:30:32 1

转载 第20讲 ICameraServiceListener.aidl详解

需要注意的是,在客户端调用带有 oneway 修饰符的方法时,无法得知方法是否返回成功或失败,因为该方法会立即返回,而不会等待服务端响应。在 Android AIDL中,oneway 是一种修饰符,用于声明一个方法是单向的(one-way)。这种方式适用于客户端和服务端之间不需要进行同步通信的情况,例如通知服务端某项任务已经完成。因此,建议将 oneway 修饰符仅用于不需要接收服务端响应的方法。,而是立即返回并在后台运行,因此不需要等待方法执行完成。使用 oneway 修饰符声明的方法。

2024-08-24 20:56:45 3

转载 第19讲 ICameraService.aidl详解 - Android Camera Native Framework

ICameraService.Stub.asInterface 负责 通过 binder 建立与BnCameraService 的proxy。proxy 的构造方法,copy 了一份 BnCameraService的binder , 然后实现一些功能(通过 transact)三个模块: BnCameraService、BpCameraService、ICameraService。从ServiceManager获取到的binder是BnCameraService的实例。

2024-08-24 20:06:32 3

转载 第18讲 Camera Java Framework AIDL概述 - Android Camera Native Framework

Android 13 ICameraService.aidl代码如下。APP 可以调用java的接口也可以通过ndk 调研c++的接口。两个进程之间的 binder通信对于我们编程人员来说是透明的。

2024-08-24 17:08:07 7

转载 第17讲 初始化VendorTags, Flashlight和PerfClass - Android Camera Native Framework

VendorTagDescriptorCache是一个Manager,管理不同Provider里面的Vendor Tag Descriptor,VendorTagDescriptor维护管理所有Vendor Tags的Section、Name、Type,ID之间的关系。vendor tag discripter 的生成, 将vendor tag 转花为discripter。针对主后置和主前置,过滤掉<1080p的JPEG尺寸。针对主后置和主前置,过滤掉<1080p的JPEG尺寸。

2024-08-24 16:32:48 4

转载 第16讲 AIDL CameraProvider和CameraDevice初始化 - Android Camera Native Framework

与HIDL CameraDevice初始化逻辑一样,请参考第10-14讲的内容。

2024-08-21 00:45:22 13

转载 第15讲 cameraserver进程启动之与CameraID和CameraDevice相关变量梳理 - Android Camera Native Framework

【代码】第15讲 cameraserver进程启动之与CameraID和CameraDevice相关变量梳理 - Android Camera Native Framework。

2024-08-20 00:13:31 14

转载 第14讲 cameraserver进程启动之LogicalDeviceStatusChange详解 - Android Camera Native Framework

本讲我们介绍Logical CameraDevice的Status Callback是逻辑。新添加一个camera。

2024-08-18 20:22:20 13

转载 第13讲 cameraserver进程启动之PhysicalCameraDeviceStatusChange详解 - Android Camera Native Framework

在CameraServer初始化Provider过程中,HAL通知发生了physicalCameraDeviceStatusChange 或 cameraDeviceStatusChange。对于每个cachedstatus, 获取camera id,创建cached status, 通知camera service。什么时候会有Cache Status?

2024-08-18 19:50:13 18

转载 第12讲 cameraserver进程启动之CameraDeviceStatus概述

camera app 通过 camera service listener 接收 camera service 的消息。Case2: App能看到4颗Camera,实际有3颗物理Camera,Physical 2对App不单独可见。代码定义在:/hardware/interfaces/camera/common/1.0/types.hal。camera provider 通过callback 接收 camera HAL的的消息。Case1: App能看到5颗Camera,实际只有3颗物理Camera。

2024-08-18 18:18:56 11

转载 第11讲 cameraserver进程启动之HIDL CameraDevice初始化 修正CameraCharacteristics - Android Camera Native Framework

如果HAL不支持ANDROID_CONTROL_ZOOM_RATIO_RANGE,则通过ANDROID_SCALER_AVAILABLE_MAX_DIGITAL_ZOOM来构造一个Zoom Ratio Range,更新到ANDROID_CONTROL_ZOOM_RATIO_RANGE。如果ANDROID_SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE没有填,则获取ANDROID_SENSOR_INFO_ACTIVE_ARRAY_SIZE的值填进去。

2024-08-18 17:51:32 15

转载 第10讲 cameraserver进程启动之HIDL CameraDevice初始化addDevice流程

startDeviceInterface 调用provider的getCameraDeviceInterface_V3_x 获取interface的实例。第四步和第五步 主要是为了,vendor HAL是老版本system framwork 是新版本的情况。先判断是否为空、如果不为空直接返接口,否则 startDeviceInterface。

2024-08-18 16:40:32 27

转载 第9讲 cameraserver进程启动之HIDL CameraProvider初始化

调用ICameraProvider的getCameraldList方法获取到当前Proyider支持的Camera Device,解析出 Camera ID存放在mProviderPublicCameralds(解析规则解读)调用notifyDeviceStateChange通知Camera HAL进程,该功能在 Provider 2.5及之后的版本才有。原因: 有些API是新的版本才支持的,如果没有支持,调用起来就会crash。创建新的结构体变量,记录provider的信息。监听provider的通知。

2024-08-10 21:49:29 20

转载 第8讲 cameraserver进程启动之enumerateProviders概述

Android Camera HAL接口分成HIDL和AIDL两种,谷歌之后会强推AIDL。ICameraProvider管理多个ICameraDeviceICameraDevice管理和维护某一颗CameraDevice通过ICameraProvider获取到ICameraDevice通过ICameraDevice获取到ICameraDeviceSession初始化时,ICameraProvider和ICameraDevice的实例就会被创建起来,

2024-08-10 18:57:50 19

转载 第7讲 cameraserver进程启动流程概述

在TCP通信中,当通信的双方中的一方close一个连接时,若另一方接着发数据,根据TCP协议的规定,会收到一个RST响应报文,若再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不能再写入数据。new SERVICE 的时候 会创建一个binder对象并返回其指针 ,onFirstRef机制通过检查强引用计数来判断对象是否是第一次被调用。该信号的缺省行为是终止进程,因此进程必须捕获它以免不情愿的被终止。可以通过ps 命令查看有几个线程。查看服务是否注册成功。

2024-08-04 18:27:49 25

转载 第6讲 cameraserver manifest详解(下)

示例:/frameworks/av/drm/mediadrm/plugins/clearkey/aidl/android.hardware.drm-service.clearkey.xml。示例:/device/generic/goldfish/manifest.camera.xml。manifest.hal.version 用于指定使用的HAL版本,决定使用哪个版本的接口。格式: @MAJOR.MINOR::INTERFACE/INSTANCE。hal 接口的前缀 = 包名 + 接口名 + 实例名。

2024-08-04 16:59:14 21

原创 第六章 安全业务设计高级【44】Gatekeeper的介绍

CA 发送带加密的明文到TEETEE 对明文(data)加密得道密文(signature),密文填充到 password_handleTEE 返回 password_handle (含密文)给caca 将 password_handle(含密文) 保存。

2024-07-28 16:05:44 857

转载 第5讲 cameraserver manifest详解(上)

Android Vintf Manifest是用于描述Vendor(HAL) Interface对象的清单文件Vintf Manifest文件语法详解hl=zh-cnsystem 和 vendor 相互独立,Vintf Manifest 用来描述两个模块的通信方式

2024-07-14 21:10:41 35

转载 第4讲 cameraserver.rc详解(下)

使得一个task看起来像一个“大”任务,使CPU运行在高性能状态,加速任务的处理(尽量往频率高的CPU上调度),提升系统的性能表现。cpu.uclamp.min/cpu.uclamp.max 取值范围 0.00 – 100.00,Cgroup是用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘、输入输出等)。使其看起来像一个“小”任务,使CPU运行在高能效状态,以节省系统的功耗。对于一些后台任务,通过将cpu.uclamp.max设置为较小值,将cpu.uclamp.min设置为一个较大值,

2024-07-14 19:26:22 33

转载 第3讲 cameraserver.rc详解(上)

https://deepinout.com/android-camera-native-framework/cameraserver-process-rc-in-details-part1.html/system/core/init/README.md在线中文版:https://deepinout.com/android-system-analysis/android-bootloader/android-init-language.html以行为单位,空格分隔标记,通过反斜杠转义(或双引号)插入空格

2024-07-14 17:41:29 26

转载 第2讲 初识cameraserver进程

LSHAL 是一种设备端工具,可以列出向 hwservicemanager 注册的所有 HIDL HAL。Manifest文件用于定义Vendor Interface接口,供ServiceManager使用。rc(run command/run configure) 是进程启动时的配置文件。AIDL HAL可以通过dumpsys -l 或service list查看。方法1 查看bin文件属性。方法2 通过查看smaps。

2024-07-14 15:29:08 36

转载 第1讲 课程组织安排

基于Android 13持续更新讲解Android新版本的新功能。课程尽量覆盖到libcameraservice每一行Code。HwServiceHost 是华为自研的算法后处理进程。主要是讲解下图的 CameraServer。

2024-07-13 19:34:59 15

原创 第五章 安全应用开发基础【32】TEE环境:编写一个CA和TA程序

修改一下 optee_dir ,编译完成之后自动将ca/ta程序 复制到 optee打包文件夹下。添加目录,将 helloworld程序复制到 optee文件夹。进入源码目录,修改编译脚本。clone 脚本有点复杂。

2024-07-08 00:48:30 324

原创 1. Android手机大厂入职培训课介绍

2.2 对c/c++语言可以基本达到可以看懂即可,可以使用简单ubuntu命令。3.2 阅读分析源码不能要求自己每句都读懂,要先找整体轮廓主线走通。2.1 拥有Android应用开发经验,熟悉java语言。下与 native、Android Runtime交互。3.1 多思考应用层面的方法或者类,带着问题去学习框架。1.1 电脑安装Ubuntu16.04系统。1.2 电脑内存建议最少在16G。3.Framework自学建议。为什么要学Framework。1.3 硬盘200G以上。然后再重要地方抠细节。

2024-07-07 18:11:08 106

原创 第四章 软件架构(高级)【29】其它(内存管理/PSCI...)

Software Delegated Exception Interface (SDEI),即软件委托异常接口,是ARM架构中定义的一种机制,用于在非安全世界(Non-secure world)与安全世界(Secure world)之间进行系统事件的通知和处理。SDEI允许固件(通常是运行在安全世界的固件)在检测到系统级事件时,向非安全世界中的操作系统或应用软件提供通知,以便后者可以执行相应的错误处理或响应操作。通过sdei注册中断处理程序,中断在el3 secure 接收,non-secure处理。

2024-07-02 23:30:52 258

原创 Optee 快速学习

安全增强 tee_driver 通过 ffa 交换信息。

2024-06-16 17:48:30 319

原创 ATF 快速学习

ATF( ARM Trusted Firmware) 一开始是专门为Armv-A 处理器开发的固件。分为 TF-A (Trusted Firmware-A) 、TF-M (Trusted Firmware-M)以前 不同的TEE 跑不同的 secure payload dispatcher,后来都同一跑spmd。bl1.bin、bl2.bin 为启动程序 (一些厂家使用自己的bootrom,不使用官方的)。带虚拟化的情况,SPM是一个轻量级的 hypervisor。ATF系统对应 多个bin程序。

2024-06-16 16:47:40 234

原创 armv7-trustzone

Armv7 安全模式和非安全模式使用两套寄存器,双系统切换无需使用 switch_cpu_context,不需要。user + privilege mode 一共6种模式。

2024-06-16 14:27:21 196

原创 Trustzone ARMv8/ARMv9

SCR 寄存器, 0 表示 安全,1表示非安全AXI总线, AWPROT [1] , ARPROT[1] , 0 表示安全,1表示非安全ARMv8el3 一定是secureNS=0 , EL0、EL1、EL2 是sercureNS=1 , EL0、EL1、EL2 是non-sercureARMv900 secure01 non-secureel3 root, 只有el3能操作SCR寄存器调用 switch cpu_contex一个core 有一个物理的mmu软件视角,mmu可

2024-06-02 20:03:24 238

原创 armv8&armv9基础概念

汇编指令 svc、hvc、smc (同步异常)触发异常,在各个执行状态来回切换。32和64也可以相互切换。4个安全等级来回切换。

2024-06-02 16:54:45 208

原创 ARM和SOC的架构简介

2017 年引入动态大小核技术。

2024-06-02 16:19:24 251

原创 周贺贺 TEE系统安全开发速成班

https://edu.csdn.net/course/detail/37882

2024-06-02 15:22:49 137

原创 4.13 Linux堆内存管理(3) 内存申请释放示例

跟踪系统调用情况。

2024-05-19 19:11:47 153

原创 4.12 Linux堆内存管理(2) 堆内存申请与释放

Linux堆内存管理(2) 堆内存申请与释放1. 学习的必要性加深对堆内存的理解系统设置与优化2. chunk通过malloc申请的内存都使用一个malloc_chunk的结构体表示Glibc/malloc/malloc.c2.1 已分配的chunk标志位:A: =0 表示从主分配区分配内存;= 1 从非主分配区分配内存M: =0 表示从Heap分配内存;=1表示从MMAP映射区分配内存P: =0 表示前一个chunk空闲2.2 空闲的chunk使用free释放掉的内存块

2024-05-19 18:48:58 661

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除