Hi
我使用的是imx8mp平台。最初,我在设备树上加入了如下节点:
&i2c2 {
clock-frequency = <400000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2>;
status = "okay";
ov5645_0: ov5645_mipi@3c {
compatible = "ovti,ov5645";
reg = <0x3c>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_csi0_pwn>, <&pinctrl_csi0_rst>;
clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>;
clock-names = "xclk";
assigned-clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>;
assigned-clock-parents = <&clk IMX8MP_CLK_24M>;
assigned-clock-rates = <24000000>;
csi_id = <1>;
enable-gpios = <&gpio3 20 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio3 19 GPIO_ACTIVE_LOW>;
clock-frequency = <24000000>;
mclk = <24000000>;
mclk_source = <0>;
mipi_csi;
status = "okay";
port {
ov5645_mipi_1_ep: endpoint {
remote-endpoint = <&mipi_csi1_ep>;
data-lanes = <1 2>;
clock-lanes = <0>;
// link-frequencies = /bits/ 64 <336000000>;
};
};
};
};
&mipi_csi_1 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@1 {
reg = <1>;
mipi_csi1_ep: endpoint {
remote-endpoint = <&ov5645_mipi_1_ep>;
data-lanes = <2>;
csis-hs-settle = <13>;
csis-clk-settle = <2>;
csis-wclk;
};
};
};
系统启动后,没有在/dev/下发现任何mediaX,v4l-subdevX和新的videoX设备(除了video0和video1分别是encoder和decoder)。
查看内核日志时,发现imx8-img-md: subdev_notifier_complete error exit错误。
根据错误信息,找到了imx8-media-dev.c,在其中加入了一些额外打印的调试信息,发现在
目前遇到的问题:
1. 系统启动时,似乎没有自动执行creat link相关的动作,内核日志中,ov5645驱动探测到i2c上的摄像头后,没有出现mx8-img-md打印的任何日志,/dev下也没有任何摄像头相关的设备出现。 我注意到,内核日志中,系统启动时ov5645被探测到的时间出现在imx8_media_dev之后,这是否和问题1有关?完整的日志在附件中。
2. 我可以通过modprobe手动重新加载imx8-media-dev模块,此时出现了预期中的日志信息,同时/dev下出现了media0, v4l-subdev0和v4l-subdev1,但依旧没有对应的video设备。
日志中的+++++表示这是我加入的debug信息。
可能因为我本次构建镜像时,使用了imx-image-core导致缺少部分组件,decoder和encoder对应的videoX信息没能正常被读取?在imx-image-multimedia镜像中是正常的。
3. 请问在imx8mp平台上,是哪段驱动代码在产生摄像头的/dev/videoX设备节点?根据一些搜索到的资料,似乎是在调用video_register_device函数时产生,但有很多处代码都在调用这个函数
已解决! 转到解答。