第十四章:sensor驅動源碼解析與實戰

       海思的sensor驅動大部分工作在應用層,即應用層驅動(非ko形式存在),這樣一來在對sensor改動時,就不需要重新編譯內核了。

       缺點是,不穩定,效率會比較低。純應用層驅動是沒辦法操作硬件的,所以需要調用底層i2c驅動。

1、驅動源碼路徑

       Hi3518E_SDK_V1.0.3.0\package\mpp\mpp\component\isp\sensor目錄下。

2、sensor驅動調用

       sensor驅動編譯完之後會生成xxx.a和xxx.so兩個庫,一個是靜態鏈接用的,一個是動態鏈接用的。

       這兩個文件會被放到Hi3518E_SDK_V1.0.3.0\package\mpp\mpp\lib目錄下。

3、sensor驅動文件命名規則

       xxxx_cmos.c中定義回調和上層函數。

       xxxx_sensor_ctl.c中定義底層硬件相關的寄存器值配置函數。

4、sensor驅動在哪被調用

       從之前的sample_venc開始看,在第三部分step 3: start vi dev & chn to capture

       SAMPLE_COMM_VI_StartVi()

           SAMPLE_COMM_VI_StartIspAndVi()

                   SAMPLE_COMM_ISP_Init()

                           sensor_register_callback()

       sensor_register_callback這個函數就在sensor驅動裏面,這裏會調用到kernel內的i2c驅動對sensor進行硬件操作。


5、sensor_register_callback

       這個函數就是對整個sensor初始化,內部封裝了操作sensor所需要的函數,(ISP、AE(自動曝光)、AWB(白平衡))

       其中的cmos_init_sensor_exp_function函數將sensor操作時所需要的函數一一掛接起來,例如初始化調用的sensor_init。

6、sensor_init

       初始化sensor,初始化的方式就是調用i2c函數接口來實現操作sensor內部寄存器。
                    

7、黑電平

       黑電平(Black Level Correction)也就是黑色的最低點,以8bit數據來說,指在經過一定校準的顯示裝置上,沒有一行光亮輸出的視頻信號電平。定義圖像數據爲0時對應的信號電平。

       sensor中的黑電平是可以調節的,就相當於標準值,就像零攝氏度這種概念。

8、sensor驅動編譯實戰

       (1)修改驅動源碼

       以AR0130爲例,修改mpp\component\isp\sensor\ar0130目錄下的應用驅動源碼。

       如果是調整黑電平,就修改ar0130目錄下的ar0130_coms.c文件裏面的cmos_get_isp_black_level函數中的au16BlackLevel數組。
                

       (2)清除,並重新編譯

       首次編譯需要在mpp\component\isp目錄下將整個isp進行編譯。

       執行make clean指令。

       再執行make

       (3)確認mpp中lib目錄下的libsnsxxx.a/so已經被更新。

       (4)重新編譯sample並運行查看效果。

9、AR0130sensor寄存器

       參考AR0130_RR_C.pdf文檔的Register Behavior寄存器章節,瞭解各寄存器用途。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章