rk3288 android6.0 camera子系統
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 檔案