c-Linux内核中的字符设备出现问题



我的内核模块有问题,我正在编写一个允许来自不同进程的线程交换消息的模块,我正在生成不同的CHRDriver来实现它。我编写了我需要的函数的框架,但我注意到,使驱动程序具有相同的file_operations,它们还共享变量值?我该如何使它们具有相同的逻辑变量,但地址不同?让我举一个例子来解释:

#include "group_message_manager.h"
#include <linux/kernel.h>
int open_value = 0;
int gmm_open(struct inode *inode, struct file *filp){
printk(KERN_ALERT "open value %dn", open_value++);
return 0;
}
ssize_t gmm_read(struct file * file, char * buffer, size_t lenght, loff_t * offset){
return 0;
}
ssize_t gmm_write(struct file * file, const char __user * buffer, size_t lenght, loff_t * offset ){
return 0;
}
struct file_operations file_ops_gmm_origin = {
open: gmm_open,
read: gmm_read,
write: gmm_write,
// unlocked_ioctl: mydev_ioctl,
// compat_ioctl: mydev_ioctl,
// release: mydev_release
};
// EXPORT_SYMBOL(file_ops_gmm_origin);  

上面的.c文件,.h文件是下一个

#pragma once
#include <linux/fs.h>

int gmm_open(struct inode *inode, struct file *filp);
ssize_t gmm_read(struct file * file, char * buffer, size_t lenght, loff_t * offset);
ssize_t gmm_write(struct file * file, const char __user * buffer, size_t lenght, loff_t * offset );
extern struct file_operations file_ops_gmm_origin; 

如何使任何驱动程序从0开始成为自己的open_value变量?因为此时,如果有人打开一个文件,然后打开另一个,则变量设置为2,而我希望将两个变量设置为1。

更新:

你的答案很有用,但我需要一种机制,允许每次调用open()时,都会找到相同的private_data,因此是特定的字符文件数据,而不是特定于open()的单个调用。我该怎么做?提前感谢

最后,我使用哈希表数据结构解决了问题,其中键是索引节点标识符,值是指向结构的指针,该结构包含我管理所需的值

最新更新