Platform: RK3288
OS: Android 6.0
Kernel: 3.10.92
CameraHal的ION实现主要在文件 CameraHal_Mem.cpp中, 提供了三种实现
#define CAMERA_MEM_PMEM 0
#define CAMERA_MEM_ION 1
#define CAMERA_MEM_IONDMA 2
目前定义的是CAMERA_MEM_IONDMA,也就是用的IonDmaMemManager类, video/preview/jpeg/raw buffer都会调用ion来创建
createVideoEncBuffer
createPreviewBuffer
createRawBuffer
createJpegBuffer
CameraHal::CameraHal() -> CameraHal.cpp
mCamMemManager = new IonDmaMemManager() ->
IonDmaMemManager::IonDmaMemManager -> CameraHal_Mem.cpp
ion_open ->
open("/dev/ion", O_RDWR); ->
ion_open -> ion.c
ion_client_create
BufferProvider::createBuffer -> CameraBuffer.cpp
mCamBuffer->createPreviewBuffer -> //假设是创建preview buffer.
IonDmaMemManager::createPreviewBuffer ->
&nbs
OS: Android 6.0
Kernel: 3.10.92
CameraHal的ION实现主要在文件 CameraHal_Mem.cpp中, 提供了三种实现
#define CAMERA_MEM_PMEM 0
#define CAMERA_MEM_ION 1
#define CAMERA_MEM_IONDMA 2
目前定义的是CAMERA_MEM_IONDMA,也就是用的IonDmaMemManager类, video/preview/jpeg/raw buffer都会调用ion来创建
createVideoEncBuffer
createPreviewBuffer
createRawBuffer
createJpegBuffer
CameraHal::CameraHal() -> CameraHal.cpp
mCamMemManager = new IonDmaMemManager() ->
IonDmaMemManager::IonDmaMemManager -> CameraHal_Mem.cpp
ion_open ->
open("/dev/ion", O_RDWR); ->
ion_open -> ion.c
ion_client_create
BufferProvider::createBuffer -> CameraBuffer.cpp
mCamBuffer->createPreviewBuffer -> //假设是创建preview buffer.
IonDmaMemManager::createPreviewBuffer ->
&nbs

本文详细介绍了在RK3288平台上,运行Android 6.0系统,内核版本为3.10.92时,Camera HAL模块中ION内存管理的实现过程。主要关注于IonDmaMemManager的使用,包括video、preview、jpeg和raw buffer的创建。在创建过程中,涉及ion_open、ion_alloc、ion_ioctl等关键步骤,以及物理内存分配、SG表的建立、DMA缓冲区映射到用户空间的过程。通过IonDmaMemManager的createBuffer方法,结合iommu状态,实现物理内存的有效管理和访问。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



