1. 程式人生 > >高通平臺手機開發之Camera

高通平臺手機開發之Camera

4.3. Camera
參考文件:
1) 80-NA157-22_PRESENTATION- MSM8974-APQ8074-MSM8X26-APQ8084 LINUX CAMERA OVERVIEW.pdf

2) 80-NE717-1_MSM8974-APQ8074-MSM8X26 LINUX CAMERA SOFTWARE DESIGN DOCUMENT.pdf

3) 80-NU323-2_Multimedia Driver Development and Bringup Guide - Camera.pdf

4) 80-NL239-33_LINUX CAMERA DEBUGGING GUIDE.pdf

4.3.1. Camera軟體架構
這裡寫圖片描述
4.3.2. Kernel驅動
1) 增加dts配置
qcom,[email protected] {//back camera
compatible = “samsung,s5k3m2”;
reg = <0x5a>;
qcom,slave-id = <0x5a 0x0000 0x30d2>;
qcom,csiphy-sd-index = <0>;
qcom,csid-sd-index = <0>;
qcom,mount-angle = <90>;
qcom,sensor-name = “s5k3m2_f13s01k”;
qcom,actuator-src = <&actuator0>;
qcom,led-flash-src = <&led_flash0>;
cam_vdig-supply = <&pm8941_l3>;
cam_vana-supply = <&pm8941_l17>;
cam_vio-supply = <&pm8941_lvs2>;
cam_vaf-supply = <&pm8941_l23>;
qcom,cam-vreg-name = “cam_vdig”, “cam_vio”, “cam_vana”,
“cam_vaf”;
qcom,cam-vreg-type = <0 1 0 0>;
qcom,cam-vreg-min-voltage = <1225000 0 2850000 3000000>;
qcom,cam-vreg-max-voltage = <1225000 0 2850000 3000000>;
qcom,cam-vreg-op-mode = <105000 0 80000 100000>;
qcom,gpio-no-mux = <0>;
gpios = <&msmgpio 15 0>,
<&msmgpio 90 0>;
qcom,gpio-reset = <1>;
qcom,gpio-req-tbl-num = <0 1>;
qcom,gpio-req-tbl-flags = <1 0>;
qcom,gpio-req-tbl-label = “CAMIF_MCLK”,
“CAM_RESET1”;
qcom,gpio-set-tbl-num = <1 1>;
qcom,gpio-set-tbl-flags = <0 2>;
qcom,gpio-set-tbl-delay = <1 1000>;
qcom,csi-lane-assign = <0x4320>;
qcom,csi-lane-mask = <0x1F>;
qcom,sensor-position = <0>;
qcom,sensor-mode = <0>;
qcom,cci-master = <0>;
};
2) 增加驅動檔案
kernel/drivers/media/platform/msm/camera_v2/sensor
複製一個原有camera的驅動檔案並改名,比如ov8865.c改為s5k3l2.c。開啟s5k3l2.c,把裡面的ov8865改成s5k3l2, OV8865改為S5K3L2。
在Makefile里加上obj-$(CONFIG_S5K3L2) += s5k3l2.o
s5k3l2.c裡需要改動的是上電序列,需要根據原理圖來配置
static struct msm_sensor_power_setting s5k3l2_power_setting[] = {
{
.seq_type = SENSOR_VREG,
.seq_val = CAM_VIO,
.config_val = 0,
.delay = 1,
},
{
.seq_type = SENSOR_VREG,
.seq_val = CAM_VANA,
.config_val = 0,
.delay = 1,
},
{
.seq_type = SENSOR_VREG,
.seq_val = CAM_VDIG,
.config_val = 0,
.delay = 1,
},
{
.seq_type = SENSOR_VREG,
.seq_val = CAM_VAF,
.config_val = 0,
.delay = 5,
},
{
.seq_type = SENSOR_GPIO,
.seq_val = SENSOR_GPIO_STANDBY,
.config_val = GPIO_OUT_LOW,
.delay = 1,
},
{
.seq_type = SENSOR_GPIO,
.seq_val = SENSOR_GPIO_RESET,
.config_val = GPIO_OUT_LOW,
.delay = 5,
},
{
.seq_type = SENSOR_GPIO,
.seq_val = SENSOR_GPIO_AF_PWDM,
.config_val = GPIO_OUT_LOW,
.delay = 5,
},
{
.seq_type = SENSOR_GPIO,
.seq_val = SENSOR_GPIO_STANDBY,
.config_val = GPIO_OUT_HIGH,
.delay = 5,
},
{
.seq_type = SENSOR_GPIO,
.seq_val = SENSOR_GPIO_RESET,
.config_val = GPIO_OUT_HIGH,
.delay = 10,
},
{
.seq_type = SENSOR_GPIO,
.seq_val = SENSOR_GPIO_AF_PWDM,
.config_val = GPIO_OUT_HIGH,
.delay = 5,
},
{
.seq_type = SENSOR_CLK,
.seq_val = SENSOR_CAM_MCLK,
.config_val = 24000000,
.delay = 10,
},
{
.seq_type = SENSOR_I2C_MUX,
.seq_val = 0,
.config_val = 0,
.delay = 0,
},
};
3) 除錯
在檔案:kernel/drivers/media/platform/msm/camera_v2/sensor/msm_sensor.c
開啟這個巨集:#define CONFIG_MSMB_CAMERA_DEBUG
檢查開機時kernel log
CDBG(“%s: read id: %x expected id %x:\n”, func

, chipid,
slave_info->sensor_id);
看與camera的i2c通訊是否成功。
4.3.3. user space驅動
1) 增加程式碼
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs/ 裡增加一個驅動資料夾s5k3l2,裡面有兩個檔案:Android.mk和s5k3l2_lib.c
一般來說高通會提供驅動,模組廠也會提供相應的驅動。
把驅動加入進去,編譯成so,然後push到手機裡。或者整個編譯成system.img,刷入手機。

有的時候,我們發現系統裡找不到camera應用的圖示。這是由於系統第一次啟動時,後攝的kernel驅動沒有準備好。
如何解決:
➢ Kernel驅動除錯好後,重新刷userdata.img。讓系統重新初始化。
➢ adb shell am start -n com.android.camera/com.android.camera.Camera package和activity的名字需要和手機裡的應用匹配,不一定是上面這個名字。
➢ 安裝其它的camera應用。

2) 除錯
開啟camera應用,看看影象預覽是否成功。如果不成功,需要除錯。
➢ 在程式碼裡開啟除錯開關
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensors/sensor.c
#define SLOW SERR
SLOW(“lib_name %s”, lib_name); 可以看到是否正確庫被呼叫。
➢ Lane配置
qcom,csi-lane-assign = <0x4320>; 這是8974平臺的值,其它平臺不一樣
qcom,csi-lane-mask = <0x1F>; 0x1F for 4lane, 0x7 for 2 lane, 0x3 for 1 lane
這個配置每個平臺不一樣。
大部分情況下,到這裡基本就調通了,可以預覽了。如果一直調不調,有可能是模組硬體有問題,需要和模組廠一起跳。

3) 從頭建立lib.c檔案
在某些情況下,如果不能得到驅動檔案,需要根據晶片廠商的資料手冊和高通的文件來自己寫lib.c
4.3.4. 閃光燈
這是系統圖自帶閃光燈的配置
qcom,[email protected] {
status = “okay”;
pm8941_flash0: qcom,flash_0 {
qcom,max-current = <1000>;
qcom,default-state = “off”;
qcom,headroom = <3>;
qcom,duration = <1280>;
qcom,clamp-curr = <200>;
qcom,startup-dly = <3>;
qcom,safety-timer;
label = “flash”;
linux,default-trigger =
“flash0_trigger”;
qcom,id = <1>;
linux,name = “led:flash_0”;
qcom,current = <625>;
};
使用時做camera的配置檔案里加上就行。
qcom,led-flash-src = <&led_flash0>;
4.3.5. 對焦馬達
Kernel裡面的驅動都是一樣的,主要的改動在user space
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/actuator_libs
vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/actuators
4.3.6. Tuning
馬達,閃光燈,拍照效果都是要Tuning的。但是需要實驗室環境來做。
注意:在馬達的核心驅動里加上過多log,可能導致馬達不能正常對焦。

相關推薦

平臺手機開發Camera

4.3. Camera 參考文件: 1) 80-NA157-22_PRESENTATION- MSM8974-APQ8074-MSM8X26-APQ8084 LINUX CAMERA OVERVIEW.pdf 2) 80-NE717-1_MSM8

平臺手機開發Sensor

4.6. Sensor 高通文件 1) 80-N7635-1_E_Snapdragon_Sensors_Core_New_Sensor_Driver_Integration_LA.pdf 2) 80-NA157-92_C_MSM8974_Snap

平臺手機開發Bring-up

手機Bring-up 3.1. Linux 部分編譯 高通的程式碼分兩部分:一部分是開源的,可以從codeaurora.org上下載,還有一部分是高通產權的,需要從高通的網站上下載。 將高通產權的程式碼放到:vendor/qcom/proprieta

平臺手機開發充電

4.4. 充電 高通文件 1) 80-NL239-4_F_PMIC_SW_Driver_Overview_MSM8916.pdf 在手機能夠充電以後,需要把向電池廠商要電池曲線,然後整合到dts裡。 qcom,battery-data {

平臺手機的power概覽

Power消耗相關 下面的東西總結性居多,沒有涉及到具體的方法,操作性不強,只是作為一個全域性概覽。 1.Power相關測試的KPI選項 靜態:手機閒置時的功耗 suspend:當手機明確不使用時,特別是按了power鍵滅屏告訴手機我要休息的時候,此時手機會主動發起susp

平臺android開發總結 MSM平臺上的AMSS

1、高通平臺android開發總結 1.1 搭建高通平臺環境開發環境 在高通開發板上燒錄檔案系統 建立高通平臺開發環境 高通平臺,android和 modem 編譯流程分析 高通平臺 7620 啟動流程分析 qc

linux驅動由淺入深系列:camera驅動二(基於平臺的V4L2結構及程式碼分析)

在上一篇文章中介紹了camera的基礎知識和相關概念,我們一起來了解一下驅動相關的程式碼結構。本文以高通+android平臺為示例,首先看一下整體框圖:這張圖是從整體上來看的1,圖中最下面的是kernel層的驅動,其中按照V4L2架構實現了camera sensor等驅動,向

Android平臺硬體除錯Camera

Camera工作流程圖Camera的成像原理可以簡單概括如下:景物(SCENE)通過鏡頭(LENS)生成的光學影象投射到影象感測器(Sensor)表面上,然後轉為電訊號,經過A/D(模數轉換)轉換後變為數字影象訊號,再送到數字訊號處理晶片(DSP)中加工處理,再通過IO介面傳輸到CPU中處理,通過DISPLA

平臺新增或者移植一個完整的camera

OV8865 1、kernel部分: A、kernel_driver: 把驅動檔案ov8865_qtech_f8865ac.c 放到kernel/drivers/media/platform/msm/camera_v2/sensor/目錄下 B、kernel_dt

平臺Camera錄影過程-- 資料流淺析

             Camera錄影的時候,採用了MediaRecorder,這裡是對Camera錄製過程中資料的流向做一個簡單的程式碼跟讀和分析,這邊是基於高通平臺,Android4.4原始碼:   &n

平臺Camera框架部分淺談--Camera C/S 的init流程

       瞭解的不夠深入,應用功能實現後,再回頭細看Camera框架時,還是有些地方沒能連通,在網上也找了一些文章結合程式碼來分析,不過能力有限,甚是痛苦。而且由於平臺不同,程式碼的具體流程還是有區別。       下

平臺msm8953 Linux DTS(Device Tree Source)裝置樹詳解二(DTS裝置樹匹配過程)

本系列導航:有上一篇文章,我們瞭解了dts的背景知識和相關基礎,這次我們對應實際裝置進行一下相關分析。DTS裝置樹的匹配過程一個dts檔案確定一個專案,多個專案可以包含同一個dtsi檔案。找到該專案對應的dts檔案即找到了該裝置樹的根節點。kernel\arch\arm\bo

平臺開發環境搭建、編譯、燒錄(android5.1以上系統)

1. 安裝Ubuntu(12.04LTS以上穩定版本)     安裝過程中必須以根使用者登入或使用sudo獲取root許可權。     1.1按照http://releases.ubuntu.com中的說明,建立安裝光碟,將其安裝到計算機上。     1.2. 安裝完成後,通過下列選項之一來更新軟體:    

平臺 Camera基礎

1. 設定攝像頭方向 2. 開啟執行緒與預覽執行緒  3. 設定引數 4. Camera外設按鍵 5. 自動對焦

德地圖JS開發入門

1.高德地圖JavaScript API引入: 方式1:頁面直接引入 <script type="text/javascript"src="http://webapi.amap.com/maps?v=1.3&key=您申請的key值"></script&g

基於Android7.1 8953 平臺下零死角玩轉裝置樹DTS

【基於Android7.1 8953 高通平臺下零死角玩轉裝置樹DTS】 更新內容:  【創科之龍_安卓開發】第01課_為什麼引用linux裝置樹和對比優勢  【創科之龍_安卓開發】第02課_如何在Linux-3.x核心

平臺啟動log概述(PBL log、sbl1 log、kernel log)【轉】

本文轉自:https://blog.csdn.net/RadianceBlau/article/details/78416776?utm_source=blogxgwz9 高通平臺啟動log概述(PBL log、sbl1 log、kernel log)在嵌入式linux的除錯過程中log有著至關重要的地位,

平臺讀寫nv總結【轉】

本文轉載自:https://blog.csdn.net/suofeng12345/article/details/52713993 一,引言      1. 什麼是NV      &nbs

平臺 ramdump-parser 簡介

ramdump 是什麼?簡單來說就是把系統memory中的某一個時間點的的資料資訊通過一定手段取出來儲存起來的記憶體崩潰檔案,屬於ELF檔案格式。 當系統發生致命錯誤無法恢復的時候,主動觸發抓取ramdump把異常現場保留下來供離線分析定位問題是一種非常重要的高階除錯手段。 高

通過平臺簡單總結的許可權問題

 android 5.x開始,引入了非常嚴格的selinux許可權管理機制,我們經常會遇到因為selinux許可權問題造成的各種avc denied困擾。有時候我們在添加了一些驅動或應用的時候,發現不能用,但是程式本身查不出問題來,那就要抓log看一下了,很多時候就是因為沒有新增許可權,下