在内核模块中写入proc,该模块也使用字符设备

时间:2017-10-20 22:43:16

标签: c linux timer linux-kernel

我有一个实现计时器的内核模块,它可以工作。同时我能够创建一个新的内核模块来从proc写入和读取。我不明白的是如何在同一个内核模块中组合这两个操作。

我的应用程序以这种方式工作。用户程序向内核模块写入数字n,该数字用于创建将在n毫秒内到期的计时器。为此,我实现了writeread函数,并将它们链接到我在struct file_operations函数中使用的init来注册我的角色设备(计时器)。

现在对于proc文件,我需要声明一个writeread函数,它应该处理来自用户程序的请求。这让我感到困惑,我无法理解如何将所有东西结合在一起。

1 个答案:

答案 0 :(得分:1)

正如Tsyvarev所提到的那样使用不同的file_operations

static struct proc_dir_entry *procfs;

static const struct file_operations proc_fops = {
 .owner = THIS_MODULE,
 .open  = open_proc_fn,
 .read  = read_proc_fn,
};

static const struct file_operations char_fops = {
 .owner = THIS_MODULE,
 .open  = open_char_fn,
 .read  = read_char_fn,
 .write = write_char_fn, 
};


int __init init_mod (void) {
   procfs = proc_create("filename", 0, NULL, &proc_fops);
   if(!proc)
       return -1;
   <Register char device with &char_fops >
   return 0;
}