如何在procfs中执行顺序读取?

时间:2014-04-21 07:41:08

标签: c linux linux-kernel linux-device-driver procfs

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/proc_fs.h>
#include <linux/jiffies.h>
#include <linux/seq_file.h>

//extern uint64_t interrupt_time;

static struct proc_dir_entry *test_dir;

static int my_proc_show(struct seq_file *m, void *v)
{
    seq_printf(m, "%lu\n", jiffies);
    //seq_printf(m, "%lu", interrupt_time);
    return 0;
}

static int my_proc_open(struct inode *inode, struct file *file)
{
    return single_open(file, my_proc_show, NULL);
}

static const struct file_operations tst_fops = {
    .open       = my_proc_open,
    .read       = seq_read,
    .llseek     = seq_lseek,
    .release    = single_release,
};

static int __init test_init(void)
{
    test_dir = proc_mkdir("myproc", NULL);

    if (test_dir)
            proc_create("jiffies", 0, test_dir, &tst_fops);

    return 0;
}
static void __exit test_exit(void)
{
    remove_proc_entry ("jiffies", test_dir);
    proc_remove (test_dir);
}
module_init(test_init);
module_exit(test_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Test");

以上代码适用于procfs驱动程序,其中上面的代码包含init函数,exit函数,文件操作函数,但是如何从内核到用户创建seq_read()函数。那是什么API?

这是我在/linuxversion/net/core/dev.c

中修改的代码
int netif_rx(struct sk_buff *skb) 
{
  skb->tstamp = ktime_get_real();   //this will give a timestamp and it will be stored in //skb buffer
  //I am calculating a timestamp here. because whenever kernel receive the data then the kernel is 
  //interrupted and start executing the newly arrived task but I have to read the time when the 
 //interrupt  occurs and get the value of it.
} 

我的问题是:如何将此时间戳复制到procfs

1 个答案:

答案 0 :(得分:0)

我不确定您的问题是如何创建和填充/proc中的条目或如何从现有条目中读取。关于后者:

  

如何将其读取到用户应用程序

从用户程序打开/proc/foo/bar并从中读取,从任何其他文件开始。