原创 无设备节点驱动程序

2007-11-27 15:37 3785 7 7 分类: MCU/ 嵌入式
1.设备节点

       设备节点就是/dev目录下面的每个节点。通过open设备节点,获取设备句柄。设备节点是用户程序和内核驱动的纽带。常规的设备都会有个对应的设备节点存在。

2.驱动程序入口

       驱动程序的范围很广,除了设备驱动,还有网络驱动,文件系统驱动,总线驱动等等。并不是每个驱动程序都会注册一个设备号,对应一组设备节点。

根据驱动程序的功能,初步分析如下:

2.1 底层设备支持驱动

      此类驱动为了满足同类设备驱动开发方便,提供系统底层接口,规范数据结构。最大特点是导出很多通用的符号。应用程序不能直接对话。常见的例如fbmem.c和i2c-core.c。他们是驱动程序,但不需要任何设备节点。

2.2总线设备驱动

    此类驱动多是给系统扩展出外设总线,提供总线数据传输接口。最大特点是只有行为,没有目的针对性。应用程序通常不直接对话。对应总线上的设备驱动必然要调用总线驱动提供的接口。他们是总线驱动,通常不需要设备节点。

     总线设备调用总线接口的方法很多,例如总线探测,导出符号等。

2.3单输入通道设备

     此类驱动对应的设备只有输入,没有输出。常见的有温度传感器。应用程序访问驱动时,只读取数据,没有其他任何操作。这类设备可以使用Misc框架,有个缺点:仍然占用比较多的系统资源。

    目前,常用的方法是把输入的数据存放到proc文件系统,供应用程序使用。这样可以不用使用设备节点访问,速度快,效率高。

2.4普通设备

    普通的设备通常要有设备节点存在。在特殊场合下,比如加密等等。我们不希望设备节点暴露在/dev目录。因此,没有设备节点还要求提供用户程序访问驱动的入口,最佳方案:增加系统调用(syscall)。

    syscall衔接在内核和用户空间,双向访问畅通无阻。增加用户自定义syscall,很少使用。

3总结

通过分析,设备节点的存在是否必要,完全考虑具体应用。本文是作者在解读驱动中,发现有些设备驱动没有注册设备节点,最终总结的心得。请大家指正。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条