misc驱动程序和char驱动程序之间的区别是什么?

misc驱动程序和char驱动程序之间的区别是什么?,c,linux,linux-device-driver,C,Linux,Linux Device Driver,我正在阅读Linux中的misc驱动程序,我对它们和char驱动程序之间的区别感到有点困惑。一位消息来源写道: Alessandro告诉我们如何注册需要单个 杂项驱动程序的入口点。有时人们需要编写 “小型”设备驱动程序,支持定制的硬件或 软件的。为此,以及接待一些真正的司机 Linux内核导出一个接口,允许模块注册它们的 拥有小型司机。misc驱动程序就是为此而设计的 好的,从这里我得到了一个简单的驱动程序(在本例中只有一个入口点),这是一个misc驱动程序。另一个来源,基本Linux设备驱动程

我正在阅读Linux中的misc驱动程序,我对它们和char驱动程序之间的区别感到有点困惑。一位消息来源写道:

Alessandro告诉我们如何注册需要单个 杂项驱动程序的入口点。

有时人们需要编写 “小型”设备驱动程序,支持定制的硬件或 软件的。为此,以及接待一些真正的司机 Linux内核导出一个接口,允许模块注册它们的 拥有小型司机。misc驱动程序就是为此而设计的

好的,从这里我得到了一个简单的驱动程序(在本例中只有一个入口点),这是一个misc驱动程序。另一个来源,基本Linux设备驱动程序,声明:

Misc(或miscellaneous)驱动程序是共享 某些共同特征。因为杂项驱动程序是字符驱动程序, 前面关于char驱动程序入口点的讨论适用于misc 司机也是

现在看来,misc驱动程序只是字符驱动程序,但可能是函数的子集,字符驱动程序可以有多个入口点(例如
ioctl()
open()
read()
调用)


那么,在LinuxC编码术语中,char和misc设备驱动程序之间的区别是什么?(除了所有杂项驾驶员的明显主要编号分配(10)之外)。支持的入口点是否存在差异?我的假设正确吗,misc设备驱动程序只有完整字符设备驱动程序的一部分?编辑:我原以为你说的是
驱动程序/misc
驱动程序,但我看到你使用
misc\u寄存器
引用字符驱动程序(以及
驱动程序/char/misc.c
中的所有API). 你应该在问题中详细说明这一点

在这种情况下,
misc
API似乎使您在编写小字符驱动程序时的生活更加轻松,例如,您不希望只为使用一个小字符而分配一个新的大字符数。它简化了操作,但使用
struct miscdevice
fops
成员,所有文件操作仍然可用。基本区别在于,每个
misc
设备只能获得一个次要数字

我以前的,不相关的回答是,记录在案:

快速查看:您不会在那里找到任何“
misc
core”。这意味着:
misc
不是设备类;这只是一群不属于任何其他类别的司机。气压计、DAC、测试套件和其他奇怪的东西

查看
驱动程序/misc/Kconfig的顶部:

#
# Misc strange devices
#

menu "Misc devices"
此Kconfig中的所有项目不依赖于任何“
misc
core”,而是依赖于其他core(
i2c
pci
tty
等)。通常,当驱动程序真正使用驱动程序核心时,您将在其Kconfig中看到它。例如,几乎所有的
led
驱动程序(
drivers/led
)都依赖于
led
类核心,并且在它们的

也许
misc
驱动程序都是字符驱动程序(我没有全部检查),但是其他一些驱动程序仍然可以在那里工作,尽管它可能位于错误的位置。我相信现在很多的
misc
司机都可以搬到更好的地方。。。一位经验丰富的内核黑客可以证实这一点

因此,为了回答您的问题:
misc
驱动程序不必是字符驱动程序,因此这两个类别完全不相关。
misc
驱动程序只带来字符驱动程序,因为
misc
驱动程序同样没有什么特殊之处

更新:这是一个很好的例子。它小而直接

它使用I²C与实际罗盘进行通信。该设备不会显示为字符设备,因此,请忘记主数字10。然而,它将出现在Sysfs的某个地方,在
/sys/bus/i2c/devices
下,就像所有的I²C设备一样。您将看到它添加到其组中的Sysfs属性,如
heading0\u input
,读取时将显示当前指南针方向

这就是:一个不是字符驱动程序的
misc
驱动程序

现在看来,misc驱动程序只是char驱动程序,但可能是函数的子集,char驱动程序可以有多个入口点(例如ioctl()或open()或read()调用)

是的,它只是字符驱动程序,Misc驱动程序也有多个入口点read()、write()、ioctl()(因为在miscdevice的结构中已经有filefile_操作结构)


据我所知,当我们需要编写一个小驱动程序(只有一个或更多的入口点(2,3,…入口点)时,我在原始答案的misc API中添加了一个小提示(必须经过同行评审)。您介意在之后去掉历史部分(“编辑:”和原始答案)吗?
depends on LEDS_CLASS