Linux kernel 如何向linux内核添加ADV7282-m

Linux kernel 如何向linux内核添加ADV7282-m,linux-kernel,linux-device-driver,kernel-module,device-tree,Linux Kernel,Linux Device Driver,Kernel Module,Device Tree,我正在尝试使用Yocto将ADV7282-m支持添加到linux内核构建中。然而,我似乎无法让它发挥作用。我已经得到了加载和检测芯片的模块。 驱动程序完全通过探测,但没有创建v4l设备 我试着让它在一块板上运行,它有一个IMX6CPU。我手动将ADV7282-m(通过谷歌提供的示例)添加到设备树中,但我不确定这是否正确,因为我不太熟悉设备树的: 。。。 v4l2\u cap\u 0{ compatible=“fsl,imx6q-v4l2-capture”; ipu_id=; csi_id=; m

我正在尝试使用Yocto将ADV7282-m支持添加到linux内核构建中。然而,我似乎无法让它发挥作用。我已经得到了加载和检测芯片的模块。 驱动程序完全通过
探测
,但没有创建v4l设备

我试着让它在一块板上运行,它有一个IMX6CPU。我手动将ADV7282-m(通过谷歌提供的示例)添加到设备树中,但我不确定这是否正确,因为我不太熟悉设备树的:

。。。
v4l2\u cap\u 0{
compatible=“fsl,imx6q-v4l2-capture”;
ipu_id=;
csi_id=;
mclk_源=;
mipi_摄像机=;
status=“好”;
};
...
adv7182:adv7182@20 {
compatible=“adi,adv7282-m”;
pinctrl names=“默认”;
reg=;
时钟=;
时钟名称=“csi_mclk”;
csi_id=;
cvbs=;
mipi_摄像机=;
mclk=;
mclk_源=;
ipu_id=;
status=“好”;
};
...
&mipi_csi{
status=“好”;
ipu_id=;
csi_id=;
v_通道=;
车道=;
};
...
查看电路板的数据表,以及ADV的物理连接方式,似乎还可以

然后,我在尝试为ADV7282-m启用内核模块时遇到了几个问题。当我启用
自动选择辅助驱动程序时
该模块不包含在构建中。查看文档,它是由
STA2X11_VIP
选择的,但是我无法启用它,因为它依赖于
VIRT_TO_总线
,该总线似乎已被弃用(或我的平台不支持)

当我禁用自动选择辅助驱动器时,我可以手动启用ADV7180模块(支持ADV7282-m)。但是在编译内核之后,当加载模块时,它缺少V4L符号,我找不到V4L配置设置缺少什么

我最终做的是将编译后的模块复制到本地系统,用
Autoselect辅助驱动程序重新编译内核,然后将
ADV7180
驱动程序复制回加载

执行此操作时,模块将正确加载并打印:

adv7180 0-0020: chip found @ 0x20 (21a0000.i2c)
也就是说,不会创建v4l设备,也不会显示更多错误。为了进行检查,我在模块代码中添加了一些额外的打印,但它在最终返回时没有出现问题

目前我正在寻找解决方案,有人能给我指出正确的方向吗?或者甚至可能在我的配置中看到错误

如果需要更多信息,请随时询问


提前谢谢。

我让ADV工作了。显然我完全误解了ADV7180司机的意思。它只创建V4L子设备,然后网桥驱动程序可以使用它来获取/dev/video0设备。我使用了本文中给出的驱动程序,并使其在我的linux内核版本中工作。完成此操作后,所有操作都按预期进行。

这可能是一个愚蠢的问题,但是……您是否正确启用了内核的v4l2功能?我现在正确加载了驱动程序,我认为我的工作树是脏的,或者在启用模块的情况下重新编译时复制了错误的内核uImage。但是,行为保持不变,没有创建V4L设备,也没有错误。