本文结合项目实际需求作一个关于设备驱动的分析,如何新加一个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所调用。
这么作的缘由是为了更好的实现设备与驱动的分离,驱动只要调接口,随你设备是如何作的。
具体代码不放出来了,不方便透露。