我正在努力为嵌入式Linux编写设备驱动程序,特别是用于视频接口的V4L2媒体控制器驱动程序。
我可以使用典型的V4L2模型为非内置驱动程序编写设备驱动程序,即由modprobe控制的模块。加载模块时,将调用此驱动程序的__init函数,然后在/ dev目录中创建一个显示为/ dev / video0的节点。然后我可以编写用户端程序,这些程序首先打开/ dev / video0,然后我可以运行我编写的所有驱动程序代码。我理解这个模型,所以我有一个很好的开发环境,我可以修改驱动程序代码,重新加载.ko驱动程序,修改我的用户端测试代码,并基本上运用我的所有驱动程序功能。
但是,在为驱动程序使用Media Controller和platform_device模型时,我仍然对内置驱动程序感到困惑。 (这些没有特定的__init例程,并且没有动态加载)。我可以配置我的内核来构建我的驱动程序作为内置的基于媒体控制器的驱动程序。我有所有Kconfig文件都正确,所以我现在可以在内核版本中包含我的新驱动程序。我知道我的驱动程序是正确构建的,因为当我的内核启动时,我可以在/ sys / bus / platform / drivers目录中看到我的驱动程序。该目录有3个只写节点,用于bind,uevent和unbind。
这是我的困惑:如何从用户端代码打开此内置设备驱动程序,以便我可以运用我的驱动程序界面?
由于驱动程序是基于内置媒体控制器的驱动程序,因此在内核启动时不会在/ dev中创建新的设备节点,或者至少,我不知道要打开什么设备,就像我为基于模块的那样打开驱动程序。
我是否必须编写一些udev规则以使内核在/ dev目录中创建设备节点,以便我可以使用用户端open()?或者以不同的方式访问此驱动程序?
谢谢, -Andres
答案 0 :(得分:1)
如果您的驱动程序基于媒体控制器框架,那么您的驱动程序中应该有一个管道(refer),请参考media controller api。即使您的驱动程序是内置的并且基于媒体控制器框架,它仍然应该创建/ dev / video0。我可以认为没有创建video0节点的原因是缺少subdev驱动程序。