我知道definition
字符设备驱动程序是直接向和传输数据的驱动程序 来自用户进程。
但有人可以用更直观的方式解释这一点吗?首先应该有一个设备。上面定义的设备是什么?
如果你说它可以是一个文件,那么我们可以说文件读取并将数据放在控制台上作为字符驱动程序的一个例子吗?
答案 0 :(得分:1)
字符驱动程序究竟是什么?
设备驱动程序是两段代码的集成。第一段代码是如何使驱动程序服务可用于应用程序。(用户空间)
第二段代码是硬件访问部分。在目标硬件上执行物理操作的说明。
基于第一段代码,我们有三个模型。字符模型,块模型,网络模型。我们可以说是字符驱动程序,块驱动程序,网络驱动程序。
第一段代码完全是内核特定的。接口内核提供什么来访问硬件。在Linux上实现第一段代码,其他操作系统上的窗口可能不同。我们应该知道它为应用程序提供服务的界面。
在linux中从用户的角度来看,每个硬件都是一个文件。为什么在启动时意味着检测到所有存在的硬件设备并将其添加到设备树中。基于硬件对应的设备节点在/ dev目录中自动创建。如上所述,如果它是char设备--->字符设备节点。块装置--->块设备节点被创建。
写字符驱动程序。我们在/ dev目录中创建一个设备节点,分配一个主要的no和应用程序,通常在设备文件上执行读/写操作。
我们实现驱动程序操作并将驱动程序操作分配给文件结构(fops)指针。
VFS收到的设备文件请求。 VFS将设备文件操作转换为相应的驱动程序操作。
APP ---> dev file ----> FOPS --->驱动---->设备
开发文件--->应用程序和驱动程序之间的接口。
司机互动---->设备
答案 1 :(得分:1)
据我所知,
设备可以是您自己的私有结构或系统对象。
驱动程序被称为char驱动程序,因为数据读写是在字节范围内
如果您正在编写char驱动程序,可以使用char buffer或kfifo来读取和写入设备。
您可以在procfs中创建设备文件, 并且可以按照您的意愿进行读/写,这可以通过您的char驱动程序来完成
我希望我的回答可以帮助你
答案 2 :(得分:0)
将设备驱动程序视为内核必须处理的各种硬件的抽象。设备驱动程序知道与之通信的硬件的详细信息。因此内核会像处理任何其他文件系统文件一样读写数据。
如果您可以在设备驱动程序上进行一些阅读,您会发现fopen,read,write,fclose的系统调用都映射到驱动程序特定的函数调用。
答案 3 :(得分:0)
有两种类型的驱动程序:块驱动程序和字符驱动程序。不同之处在于,第一个处理数据块,第二个一个接一个地接收/发送数据。
好的,例如你有一个设备,你想和它说话,怎么做?
你有一个驱动程序,只是一些函数,将由内核在正确的时间调用。驱动程序本身无法执行任何操作(既不发送数据也不接收数据),您需要说明您的驱动程序应该做什么。正如您应该知道的那样,您无法与用户空间中的内核进行离散通信。你可以使用一些技巧。你在谈论什么命名为设备文件。您的驱动程序为您的设备生成一个文件,当您从用户空间向该文件写入内容时,会通知驱动程序它是要处理的信息,它会获取此信息并将此数据提供给写入功能,该功能会将数据传输到您的设备(在这种情况下,逐字节)。
希望这是你想知道的。