linux内核字符驱动程序

时间:2014-05-02 20:57:08

标签: linux-kernel driver

我已使用api register_chrdrv()注册了一个字符驱动程序。

驱动程序在/dev/myfile中创建一个条目。用户空间应用程序可以通过打开/ dev / myfile来访问我的驱动程序。现在我想制作我的角色驱动程序,这样一次只有一个用户空间应用程序可以访问我的驱动程序;只有当该用户空间应用程序关闭文件时,另一个用户空间程序才能访问我的驱动程序。

这可以在内核级别完成吗?

我无法控制在用户空间中运行的应用程序数量,因此我只能在内核级别进行更改。

3 个答案:

答案 0 :(得分:0)

使用内核字符设备,您通常有以下方法。

.open
.read
.write
.release

(struct file_operations fops将在方法register_chrdev(...,& fops)中使用。)

我会以他们开始时打开设备的方式创建您的客户端,并在退出时释放它。像这样,您可以轻松处理/阻碍在此设备上执行读写操作的新(第二)程序。

也可能有其他可能性。

答案 1 :(得分:0)

根据您的问题,您希望同步应用程序,以便一次只有一个进程可以访问它。您可以选择可能对您有帮助的semaphore in kernellocking 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%可重入:)