我已使用api register_chrdrv()
注册了一个字符驱动程序。
驱动程序在/dev/myfile
中创建一个条目。用户空间应用程序可以通过打开/ dev / myfile来访问我的驱动程序。现在我想制作我的角色驱动程序,这样一次只有一个用户空间应用程序可以访问我的驱动程序;只有当该用户空间应用程序关闭文件时,另一个用户空间程序才能访问我的驱动程序。
这可以在内核级别完成吗?
我无法控制在用户空间中运行的应用程序数量,因此我只能在内核级别进行更改。
答案 0 :(得分:0)
使用内核字符设备,您通常有以下方法。
.open
.read
.write
.release
(struct file_operations fops将在方法register_chrdev(...,& fops)中使用。)
我会以他们开始时打开设备的方式创建您的客户端,并在退出时释放它。像这样,您可以轻松处理/阻碍在此设备上执行读写操作的新(第二)程序。
也可能有其他可能性。
答案 1 :(得分:0)
根据您的问题,您希望同步应用程序,以便一次只有一个进程可以访问它。您可以选择可能对您有帮助的semaphore in kernel
或locking methods in drivers
。您可以参考此http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/kernel/semaphore.c
答案 2 :(得分:0)
在你的驱动程序的open方法中: 使用全局标志来说明设备是否正在使用中。关闭时取消设置(在释放方法中)。 伪代码:
am_open=False
open() method:
if (!am_open)
am_open=True
...proceed...
else
return -EAGAIN; // try again later
-or-
return -EBUSY;
release() method:
am_open=False
话虽如此,司机(通常)应该是100%可重入:)