zoukankan      html  css  js  c++  java
  • /proc/iomem和/proc/ioports对应的fops

    /proc/iomem和/proc/ioports对应的fops
    static int __init ioresources_init(void)
    {
        struct proc_dir_entry *entry;
        entry = create_proc_entry("ioports", 0, NULL);
        if (entry)
            entry->proc_fops = &proc_ioports_operations;
        entry = create_proc_entry("iomem", 0, NULL);
        if (entry)
            entry->proc_fops = &proc_iomem_operations;
        return 0;
    }
    __initcall(ioresources_init);
    static const struct file_operations proc_iomem_operations = {
        .open        = iomem_open,
        .read        = seq_read,
        .llseek        = seq_lseek,
        .release    = seq_release,
    };
    static int iomem_open(struct inode *inode, struct file *file)
    {
        int res = seq_open(file, &resource_op); // seq方法集resource_op
        if (!res) {
            struct seq_file *m = file->private_data;
            m->private = &iomem_resource; // 被操作数据iomem_resource
        }
        return res;
    }
    static const struct file_operations proc_ioports_operations = {
        .open        = ioports_open,
        .read        = seq_read,
        .llseek        = seq_lseek,
        .release    = seq_release,
    };
    static int ioports_open(struct inode *inode, struct file *file)
    {
        int res = seq_open(file, &resource_op); // seq方法集resource_op
        if (!res) {
            struct seq_file *m = file->private_data;
            m->private = &ioport_resource; // 被操作数据ioport_resource
        }
        return res;
    }
    static const struct seq_operations resource_op = {
        .start    = r_start,
        .next    = r_next,
        .stop    = r_stop,
        .show    = r_show,
    };

  • 相关阅读:
    词频统计
    第二周每周例行报告
    事务管理(ACID)
    Redis
    jar包和war包的区别
    CSS实现Loading加载动画
    如何实现“返回顶部”的页面效果
    PHP页面跳转-常见方法
    局域网络调试方式
    Thinkphp 统计数据库字段总值
  • 原文地址:https://www.cnblogs.com/cute/p/4633535.html
Copyright © 2011-2022 走看看