1. 程式人生 > >rk3288 android6.0 camera子系統

rk3288 android6.0 camera子系統

    1. 概述

camera kernel驅動是基於Linux的v4l2驅動,裝置名/dev/videox。camera系統採用Client/Service構架,通過Binder IPC來通訊,最終Client通過呼叫Service介面實現各個具體功能。Service程序負責和kernel驅動互動,並將資料給到其它模組,比如顯示系統。

  • Java層:

應用:com.android.camera.Camera

框架:android.hardware.Camera

程式碼路徑:packages/apps/Camera2

frameworks/base/core/java/android/hardware/camera2

  • JNI API層:

介面庫:libandroid_runtime

介面實現:frameworks/base/core/jni/android_hardware_Camera.cpp

  • C框架層:

Camera 本地模組

程式碼路徑:frameworks/av/camera

生成libcamera_client.so

此連結庫按Binder框架實現,用來與service通訊。

Camera Service端

程式碼路徑:frameworks/av/services/camera/libcameraservice

生成libcameraserivce.so

其中CameraService::Client類通過呼叫Camera HAL實現具體功能。

CameraService被註冊在media模組的mediaserver中。

Camera HAL

HAL介面定義:

frameworks/av/services/camera/libcameraservice/device1/CameraHardwareInterface.h

RK3288 android系統實際使用中,camera sensor 暫存器是放在hardware/rockchip/camera/

中。 目錄說明如下:

hardware:

rockchip/camera/

├── Android.mk

├── CameraHal              Hal的實現

├── Config            sensor引數設定

└── SiliconImage    ISP庫,包括所有支援模組的驅動原始碼

Kernel:

drivers/media/video:

|___ rk30_camera_oneframe.c      VIP/CIF Driver,vip/cif 控制器單幀模式

|___ rk30_camera_pingpong.c

|___ generic_sensor.c generic_sensor.h  rockchip Sensor 通用驅動

|___ ov2655.c ov5642.c ov2659.c ov5640.c       OV 公司sensor 驅動

|___ mt9p111.c mt9d112.c mt9m112.c        Micron(Aptina)公司 sensor 驅動

|___ s5k6aa.c s5k5ca.c Samsung 公司 sensor 驅動

|___ gc0307.c gc0308.c 格科微公司 sensor 驅動

|___ v4l2-xxxxx.c v4l2        裝置驅動

|___ rk30_camera.c       RK30 camera IO 以及設備註冊相關程式碼

drivers/media/platform/soc_camera:

|___ soc_camera.c soc_camera.h   soc_camera 裝置驅動

drivers/media/v4l2-core:

|___ v4l2-xxxxx.c v4l2 裝置驅動

arch/arm/mach-rockchip:

|___ rk_camera.c    IO 操作程式碼

|___ rk_camera.h    RK camera 共用定義標頭檔案

|___ rk_camera_sensor_info.h  RK camera 具體型號的巨集定義檔案

|___ include/mach/include/rk30_camera.h 各晶片平臺 camera 模組標頭檔案

arch/arm/boot/dts:

|___rk3288-cif-sensor.dtsi rk3288 板級配置 sensor 檔案