camera調試(高通平臺)

今後會調一些sensor,故轉載過來學習。近來剛接手項目的camera驅動,除了查看平臺文檔和sensor的到規格書,也在網上查看了高手們到經驗。本人對camera還是比較陌生的,奈何公司無人過問,只好按部就班的來吧! 和大部分驅動的調試相差無幾,還是在前人的工作基礎上進行的。項目採用高通7627平臺,sensor採用ov7675。驅動移植1.內核驅動移植sensor信息記錄在android\kernel\arch\arm\mach-msm\board-msm7x27.c文件中,board file中要更改的信息如下:(1)爲sensor添加相應的i2c驅動,加到i2c_devices[]數組中,這裏是使用i2c總線的設備數組。機器啓動時會註冊相應設備。static struct i2c_board_info i2c_devices[] = {#ifdef CONFIG_MT9D112{I2C_BOARD_INFO("mt9d112", 0x60 >> 1),//這是7bit形式,採用硬件I2C,把真實的讀或寫地址右移一位即可},#endif......}(2)msm_camera_sensor_info包含了設備啓動信息。添加一個新的sensor驅動,就必須填寫這樣的一個結構體,包括sensor所使用的GPIO口。結構體中的sensor name將被用作driver id。static struct msm_camera_sensor_info msm_camera_sensor_mt9d112_data = {.sensor_name = "mt9d112", //將被用作driver id.sensor_reset = 1, //sensor reset GPIO.sensor_pwd = 20, //電源開關.vcm_pwd = 0, //用作自動對焦。0表示不使用。.vcm_enable = 0,.pdata = &msm_camera_device_data,.flash_data = &flash_mt9d112};另外還要把sensor註冊成platform_device。(3)修改i2c地址。gpio表修改,使用8線輸入。修改camera_on_gpio_table[]和camera_off_gpio_table[]兩個數組。由於平臺採用的是雙核架構,在功能上有所區分,個別GPIO需要在modem那邊配置成app這邊控制。(4)創建自己的驅動文件。使用YUV sensor則查看android\kernel\drivers\media\video\msm\mt9d112.c,若使用bayer sensor則查看android\kernel\drivers\media\video\msm\mt9t013.c。這裏不作詳細說明。(5)完成上述工作後,修改Kconfig和Makefile文件。2.用戶空間驅動(1)用戶空間驅動主要在vendor目錄下,把自己的sensor加到sensors[]中,以便啓動自己的senor。static sensor_proc_start_t sensors[] = {SENSORS_PROCCESS_START(mt9d112),......};(2)修改sensor相關參數:例如sensor類型,sensor輸出格式,輸出圖像大小等等。\android\vendor\qcom- proprietary\mm-camera\targets\tgtcommon\sensor\mt9d112\mt9d112.c,這些參數必須得到正確的修改,否則sensor將啓動不了。(3)mt9d112_process_start函數中爲VFE具體配置一些參數。(4)mt9d112_video_config函數做了一些IO configuration調研,和內核mt9d112_set_sensor_mode是相關聯的。通過IOCTL調用,相應的寄存器值會通過i2c總線寫入sensor。寫入sensor寄存器的值(mt9d112_set_sensor_mode)必須和vfe_camif配置的值(mt9d112_video_config)相匹配,如果使用YUVsensor,需將每行像素值定義爲預覽模式下 的兩倍。其他重要的部分還包括HAL層的配置vendor/qcom/android-open/libcamera2\QualcommCameraHardware.cpp, android\packages\apps\Camera\res\layout\camera.xml。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章