本文結合項目實際需求作一個關於設備驅動的分析,如何新加一個Camera設備數組
這個項目使用了一個並口攝像頭信號到MCU。具體原理框圖以下函數
Camera數據流向是 sensor -->913串行器----->914解串器------>並口數據--->imx6qspa
在設備樹上的配置以下:code
&i2c2{ #address-cells = <1>; #size-cells = <0>; status = "okay"; ds914desilizer:ds914desilizer@0x60{ compatible = "ds914dseilizer,TI"; ipu=<1>; csi=<1>; reg=<0x60>; pinctrl-names = "default"; pinctrl-0 = <&pinctl_ipu_ds914>; width = <1280>; height = <720>; denominator = <25>; numerator =<1>; }; };
由於是一個i2c設備,因而掛載在i2c這個設備樹下,而且使能這個i2c,在裏面使能複用並口數據IO,設置分辨率等。blog
那麼看設備驅動作了什麼。接口
內核有一個OV5640的例子,因而對其改改就成咱們本身的了。ip
國際慣例,是一個i2c驅動,註冊一個i2c_driver .io
設備驅動probe作的主要事情就是填充一個sensor_data 結構體並將其放入 v4l2_int_device 的 私有數據裏。這個私有數據之後被master 所用 ,也就是mxc_v4l2_capture.c的 cam_data ast
這個v4l2_int_device 是一個從類型設備(表明具體的sensor)class
而後 調用註冊函數 將其註冊,就是放入我第二篇說的那個鏈表中,用來與具體的master匹配,匹配成功後調用attach函數。
可見,寫一個設備驅動的話,最主要的就是生成一個v4l2_int_device 和 sensor_data 。
還有
v4l2_int_ioctl_desc 這個 數組裏面的函數,在必定狀況時會被mxc_v4l2_capture.c所調用。
這麼作的緣由是爲了更好的實現設備與驅動的分離,驅動只要調接口,隨你設備是如何作的。
具體代碼不放出來了,不方便透露。