Navigation

    VEYE IMAGING Forum

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Recent
    • Popular
    • Users
    • WIKI
    • veye.cc

    SOLVED 移植imx462摄像头驱动到rk3588时出现了以下的问题,不知道怎么解决,内核版本是5.10

    VEYE MIPI camera
    2
    29
    3025
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      aike last edited by

      刚刚dts文件没有传上去,我用txt再传输一边imx219摄像头的dts
      tl3588-evm-imx219.txt

      veye_xumm 1 Reply Last reply Reply Quote 0
      • veye_xumm
        veye_xumm @aike last edited by

        @aike 你现在i2c是通的,能识别到摄像头型号,对吗?

        1 Reply Last reply Reply Quote 0
        • A
          aike last edited by

          对的,像这样i2c能识别到摄像头型号504a0002-d5f8-4806-801c-ae53792f926e-image.png

          veye_xumm 1 Reply Last reply Reply Quote 0
          • veye_xumm
            veye_xumm @aike last edited by

            @aike 试试这个

            // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
            /*
             * Copyright (c) 2022 www.veye.cc
             *
             */
            #include "tl3588-evm.dts"
            
            &i2c1 {
                    status = "okay";
                    // pinctrl-names = "default";
                    // pinctrl-0 = <&i2c1m2_xfer>;
            
                    veyecam2m: veyecam2m@3b{
                           compatible = "veye,veyecam2m";
                           reg = <0x3b>;
            	      	   clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;
            	           clock-names = "xvclk";
                           status = "okay";
            
                        //    pinctrl-names = "default";
            			//    pinctrl-0 = <&mipim1_camera1_clk>;
                           //power-domains = <&power RK3588_PD_VI>;
                           //power-gpios = <&gpio4 RK_PB5 GPIO_ACTIVE_LOW>;
                           reset-gpios = <&gpio2 RK_PC3 GPIO_ACTIVE_LOW>;
            			   //pwdn-gpios = <&gpio2 RK_PC3 GPIO_ACTIVE_LOW>;
                           //avdd-supply = <&vcc_mipidcphy1>;
                           //firefly,clkout-enabled-index = <0>;
                           rockchip,camera-module-index = <0>;
                           rockchip,camera-module-facing = "back";
                           rockchip,camera-module-name = "NC";
                           rockchip,camera-module-lens-name = "NC";
                           port {
                                    veyecam2m_out0: endpoint {
                                           remote-endpoint = <&mipi_dphy1_in_ucam0>;
                                           data-lanes = <1 2>;
                                   };
                           };
                   };
            
            };
            &csi2_dphy0_hw {
            	status = "okay";
            };
            
            &csi2_dphy1 {
            	status = "okay";
            
            	ports {
            		#address-cells = <1>;
            		#size-cells = <0>;
            		port@0 {
            			reg = <0>;
            			#address-cells = <1>;
            			#size-cells = <0>;
            
            			mipi_dphy1_in_ucam0: endpoint@1 {
            				reg = <1>;
            				remote-endpoint = <&veyecam2m_out0>;
            				data-lanes = <1 2>;
            			};
            		};
            		port@1 {
            			reg = <1>;
            			#address-cells = <1>;
            			#size-cells = <0>;
            
            			csidphy1_out: endpoint@0 {
            				reg = <0>;
            				remote-endpoint = <&mipi2_csi2_input>;
            			};
            		};
            	};
            };
            
            &mipi2_csi2_hw {
                    status = "okay";
            };
            
            &mipi2_csi2 {
            	status = "okay";
            
            	ports {
            		#address-cells = <1>;
            		#size-cells = <0>;
            
            		port@0 {
            			reg = <0>;
            			#address-cells = <1>;
            			#size-cells = <0>;
            
            			mipi2_csi2_input: endpoint@1 {
            				reg = <1>;
            				remote-endpoint = <&csi_dphy1_out>;
            			};
            		};
            
            		port@1 {
            			reg = <1>;
            			#address-cells = <1>;
            			#size-cells = <0>;
            
            			mipi2_csi2_output: endpoint@0 {
            				reg = <0>;
            				remote-endpoint = <&cif_mipi2_in0>;
            			};
            		};
            	};
            };
            
            &rkcif_mipi_lvds2 {
            	status = "okay";
            	firefly,yuv_camera;
            
            	port {
            		cif_mipi2_in0: endpoint {
            			remote-endpoint = <&mipi2_csi2_output>;
            		};
            	};
            };
            
            &rkcif_mipi_lvds2_sditf {
            	status = "disabled";
            
            	port {
            		mipi_lvds2_sditf: endpoint {
            			remote-endpoint = <&isp0_vir2>;
            		};
            	};
            };
            
            &rkisp0_vir2 {
            	status = "disabled";
            
            	port {
            		#address-cells = <1>;
            		#size-cells = <0>;
            
            		isp0_vir2: endpoint@0 {
            			reg = <0>;
            			remote-endpoint = <&mipi_lvds2_sditf>;
            		};
            	};
            };
            &gpio2 {
                    pinctrl-names = "default";
                    pinctrl-0 = <&mipidphy0_pwr>;
            
                    camera3-pwdn-set {
                            gpio-hog;
                            gpios = <19 GPIO_ACTIVE_HIGH>;
                            output-high;
                    };
            };
            
            &pinctrl {
            	cam {
            		mipidphy0_pwr: mipidphy1-pwr {
            			rockchip,pins =
            				/* camera power en */
            				<2 RK_PC3 RK_FUNC_GPIO &pcfg_pull_up>;
            		};
            	};
            };
            
            &rkcif {
            	status = "okay";
            //	memory-region = <&cif_reserved>;
            };
            
            &rkcif_mmu {
            	status = "okay";
            };
            
            &rkisp0 {
            	status = "disabled";
            };
            
            &isp0_mmu {
            	status = "disabled";
            };
            
            
            
            
            1 Reply Last reply Reply Quote 0
            • A
              aike last edited by

              上面的代码编译出错,我把这里连接之后在和设备树一起编译内核,再把veyecam2m编译成veyecam2m.ko模块移植进去之后还是有问题1021e000-13cd-4e9b-8e82-18e42f513c5e-image.png
              这个是错误截图551af68b-55f8-4e5e-a977-a3ff01b3b24d-image.png

              veye_xumm 1 Reply Last reply Reply Quote 0
              • veye_xumm
                veye_xumm @aike last edited by

                @aike 我觉得dts没问题,你可以试试把veyecam2m直接编译到内核里面,而不是独立ko的形式试试。
                关于dts的逻辑关系,你可以参考这篇文章。
                https://www.cnblogs.com/armsom/articles/17449250.html

                1 Reply Last reply Reply Quote 0
                • A
                  aike last edited by

                  直接整合到内核之后没有看到update sensor info failed 的报错信息,但是没有看到isp的设备文件和拓扑接口a1a38816-046e-4c1c-af51-cbf7a6ae82fb-image.png
                  摄像头拓扑结构图
                  摄像头拓扑结构图.txt
                  抓取图片也有问题
                  5e11fa89-ed17-4569-8bdd-428dfbdcfe33-image.png
                  ce6d7b4c-e192-4560-bef5-fb3b2757d1e8-image.png

                  1 Reply Last reply Reply Quote 0
                  • A
                    aike last edited by

                    应该是又更近了一步,现在无论是自己基于v4l2写的程序或者是gstreamer获取信息显示的画面都是绿色的v4l2_capture.jpg gstreamer.png
                    这是什么情况呢

                    veye_xumm 1 Reply Last reply Reply Quote 0
                    • veye_xumm
                      veye_xumm @aike last edited by

                      @aike 首先,我们这个模组是带有isp的,因此在dts中,isp部分都给bypass掉了。
                      其次,你可以先试试我们wiki上的gstreamer例子,看看能不能预览。

                      1 Reply Last reply Reply Quote 0
                      • A
                        aike last edited by

                        我用gitee上面的gstreamer测试工具测试的时候出现了这些问题62fb8af1-4847-4e61-84f2-64eeecded9d8-image.png
                        同时串口会打印这些
                        fd3b438f-ce10-493b-9539-e7a9677d5040-image.png
                        请问这个问题怎么解决

                        veye_xumm 1 Reply Last reply Reply Quote 0
                        • veye_xumm
                          veye_xumm @aike last edited by

                          @aike 这个我们在其他的板卡上没有遇到过。你的板子本身没有带gstreamer吗? 或者问问板卡厂家。

                          1 Reply Last reply Reply Quote 0
                          • A
                            aike last edited by

                            板卡是自带gstreamer的,一直在这里卡住了,会不会是摄像头模组硬件的原因呢

                            veye_xumm 1 Reply Last reply Reply Quote 0
                            • veye_xumm
                              veye_xumm @aike last edited by

                              @aike 可能性很小。你试试用这个脚本抓一下图:

                              v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap --stream-count=100 --stream-to=nv12-1920x1080.yuv
                              ``
                              1 Reply Last reply Reply Quote 0
                              • A
                                aike last edited by

                                我输入了v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat='NV12' --stream-mmap --stream-count=100 --stream-to=nv12-1920x1080.yuv命令之后报这个错误
                                662610c3-2a77-4fee-acd9-6e7d06bb782a-image.png

                                1 Reply Last reply Reply Quote 0
                                • A
                                  aike last edited by

                                  nv12-1920x1080.yuv里面是空的

                                  veye_xumm 1 Reply Last reply Reply Quote 0
                                  • veye_xumm
                                    veye_xumm @aike last edited by

                                    @aike
                                    你试一下将驱动中下面这个函数改成如下:

                                    static int veyecam2m_enum_frame_sizes(struct v4l2_subdev *sd,
                                    				    struct v4l2_subdev_pad_config *cfg,
                                    				   struct v4l2_subdev_frame_size_enum *fse)
                                    {
                                        VEYE_TRACE
                                    	if (fse->index >= ARRAY_SIZE(supported_modes))
                                    		return -EINVAL;
                                    
                                    	//if (fse->code != VEYECAM2M_MEDIA_BUS_FMT/*MEDIA_BUS_FMT_UYVY8_2X8*/)
                                    	//	return -EINVAL;
                                    
                                    	fse->min_width  = supported_modes[fse->index].width;
                                    	fse->max_width  = supported_modes[fse->index].width;
                                    	fse->max_height = supported_modes[fse->index].height;
                                    	fse->min_height = supported_modes[fse->index].height;
                                    	return 0;
                                    }
                                    
                                    

                                    然后重新编译一下再测测。

                                    1 Reply Last reply Reply Quote 0
                                    • A
                                      aike last edited by

                                      还是一样的错误
                                      951b5ba0-22d5-4e9d-8124-1f2b68c6eb66-image.png

                                      veye_xumm 1 Reply Last reply Reply Quote 0
                                      • veye_xumm
                                        veye_xumm @aike last edited by

                                        @aike 我们对接rk平台的经验中,只有一个厂家的板子遇到了给你这个完全一样的问题,就是用上次帖子中的方法解决的。该问题原因是此板厂提供的linux内核,调用veyecam2m_enum_frame_sizes时没有正确的传入fse->code参数,导致参数验证失败。

                                        如果你这个方法解决不了问题,建议打开驱动中的DEBUG_PRINTK宏定义,查找一下哪个函数返回报错了。
                                        如果只是打开这个宏定义不够,需要你手动在这些函数返回错误的地方增加打印信息,进行查找报错处。

                                        1 Reply Last reply Reply Quote 0
                                        • First post
                                          Last post