簡體   English   中英

是什么導致v4l2中的“資源暫時不可用”

[英]What causes “resource temporarily unavailable” in v4l2

我已經在這里編譯了adv7180驅動程序

我正在卸載ov5642 cameradriver(在我的情況下是內置的)並加載adv7180_tvin模塊,並在加載mxcv4l2_capture模塊之后,該模塊在/ dev /中創建video0。 (dmesg命令說:“ IPU2_CSI1上的mxc攝像機注冊為video0”)

但是,當我嘗試使用v4l2-ctl訪問video0時,出現消息“資源暫時不可用”,或者當我使用gstreamer時,出現消息“無法打開/ dev / video0”(但設備確實已創建)。

這是設備樹設置中的問題,還是由其他原因引起的? 我應該使用哪些工具找出導致此問題的原因?

我的設備樹設置如下所示:

&i2c3{
adv7180: adv7180@20{
compatible = "adv,adv7180";
reg = <0x20>;
clocks = <&clks IMX6QDL_CLK_CKO2>;
clock-names = "csi_mclk";
pwn-gpios = <&gpio3 10 GPIO_ACTIVE_LOW>;
ipu_id = <1>;
csi_id = <1>;
mclk = <24000000>;
mclk_source = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hummingboard2_parallel>;

cvbs = <1>;

};
};

我需要補充一點,在adv7180之前,我為ov5642相機使用了以上設置(不包括cvbs設置),並且一切正常。

編輯:

好吧,我有一個線索。

當我在dmesg中加載模塊時,顯示消息“ mxc_v4l2_master_attach:ipu(0:1)/ csi(1:1)/ mipi(0:0)不匹配 ”。 但是僅在v4l2_cap設備樹設置和adv7180設置中的ipu_id = <1 >時才會發生。 當我在v4l2設置中將ipu_id更改為ipu_id = <0>且adv7180 dmesg現在顯示“ 與IPU1 CSI1並行連接 ”時,我可以使用v4l2-ctl工具成功訪問/ dev / video0

但就我而言,只有一種可能使用IPU2_CSI1

成功將ov5642使用IPU2時,為什么不能將其設置為adv7180?

據我所知, i.MX6有兩個IPU。 我認為默認情況下,在板文件中未啟用IPU1並行接口。 因此,您需要檢查IPU / CSI1的IOMUXC_GPR1寄存器設置(位19和20),並在相機驅動程序中傳遞csi_id IPU到CSI的連接

當您使用並行接口時,請同時在設備樹中檢查引腳復用設置。 (串行接口不需要。)

編輯:有兩種方法可用來從內核空間(板文件或照相機驅動程序)本身更新寄存器設置:

1.從董事會文件中:

struct regmap *gpr
gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
regmap_update_bits(gpr, IOMUXC_GPR1, 1 << 20, 1 << 20);

2.從boardfile或相機驅動程序

void __iomem *va_ipu2_address;
u32 reg_val;
va_ipu2_address = ioremap(0x20e0004,0xe0004);
reg_val = readl(va_ipu2_address);
/* Enable parallel interface to IPU2 CSI1.  */
writel(reg_val | 1 << 20, va_ipu2_address);

感謝您的回答。 我的拼音看起來像這樣:

 &iomuxc{
 hummingboard2{
  pinctrl_hummingboard2_parallel: hummingboard2_parallel{
 fsl,pins = <
 MX6QDL_PAD_EIM_A24__IPU2_CSI1_DATA19 0x0b0b1
 MX6QDL_PAD_EIM_A23__IPU2_CSI1_DATA18 0x0b0b1
 MX6QDL_PAD_EIM_A22__IPU2_CSI1_DATA17 0x0b0b1
 MX6QDL_PAD_EIM_A21__IPU2_CSI1_DATA16 0x0b0b1
 MX6QDL_PAD_EIM_A20__IPU2_CSI1_DATA15 0x0b0b1
 MX6QDL_PAD_EIM_A19__IPU2_CSI1_DATA14 0x0b0b1
 MX6QDL_PAD_EIM_A18__IPU2_CSI1_DATA13 0x0b0b1
 MX6QDL_PAD_EIM_A17__IPU2_CSI1_DATA12 0x0b0b1
 MX6QDL_PAD_EIM_DA11__IPU2_CSI1_HSYNC 0x0b0b1
 MX6QDL_PAD_EIM_DA12__IPU2_CSI1_VSYNC 0x0b0b1
 MX6QDL_PAD_EIM_A16__IPU2_CSI1_PIXCLK 0x0b0b1

 MX6QDL_PAD_EIM_DA10__GPIO3_IO10 0x400130b1    
 >;
 };
 };
 };

並且它已經成功地與ov5642相機一起使用。 不,我沒有看到adv7180驅動程序沒有將ipu_id作為設備樹的參數,因此我認為它正在使用默認的IPU(我認為是IPU1)。

我一直在玩如何更改IOMUXC_GPR1中的設置。 需要設置位20(“啟用到IPU2 CSI1的並行接口)。但是在設備樹中沒有更多的想法。

好。 我找到了 !

我無法使用mach-imx6q.c文件將IOMUXC_GPR1寄存器中的第20位設置為1,所以我這樣做是這樣的:

在控制台中:

sudo devmem2 0x20e0004 

並讀取現有值(在我的情況下為0x48643005)。 然后,將位20設置為1(“ 1”),這樣我得到0x48743005並將此值放入寄存器:

sudo devmem2 0x20e0004 w 0x48743005

接下來,我加載了adv7180_tvin和mxc_v4l2_capture模塊,並使用gsreamer捕獲了幀:

gst-launch-1.0 imxv4l2videosrc device=/dev/video0 ! imxipuvideotransform ! autovideosink deinterlace=true

一切正常! 感謝幫助 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM