44

我正在学习从内核模块编程指南编写字符设备驱动程序,并用于mknod创建一个节点/dev来与我的驱动程序对话。

rmnod但是,在检查了联机帮助页并观察到这是一个不存在的命令之后,我找不到任何明显的方法来删除它。

什么是扭转效果的正确方法mknod,并安全地删除创建的节点/dev

4

2 回答 2

48

正确的命令只是rm:)

创建的设备节点mknod只是一个包含设备主要和次要编号的文件。当您第一次访问该文件时,Linux 会寻找一个驱动程序来宣传该主要/次要并加载它。然后,您的驱动程序使用该文件处理所有 I/O。

当您删除一个设备节点时,通常的 Un*x 文件行为适用:Linux 将等到没有更多对该文件的引用,然后将其从磁盘中删除。

你的司机并没有真正注意到这一点。Linux 不会自动卸载模块。您的驱动程序将不再接收对任何操作的请求。但它会在任何人重新创建设备节点的情况下准备就绪。

于 2014-08-10T09:53:21.550 回答
1

您可能正在寻找功能而不是命令。unlink() 就是答案。如果没有进程打开文件,unlink() 将删除文件/特殊文件。如果任何进程打开了该文件,则该文件将一直保留到最后一个引用它的文件描述符关闭为止。在这里阅读更多:http: //man7.org/linux/man-pages/man2/unlink.2.html

于 2017-08-09T18:34:22.727 回答