【发布时间】:2018-02-12 23:48:53
【问题描述】:
我正在努力加快为嵌入式 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()?还是以其他方式访问此驱动程序?
谢谢, -安德烈斯
【问题讨论】:
标签: linux-device-driver embedded-linux v4l2