QQ咨询不加好友发不了信息,咨询前先加好友! → QQ:820896380 ×

Linux驱动 | procfs接口创建


上篇介绍了Linux驱动中sysfs接口的创建,今天介绍procfs接口的创建。

procfs:可实现类似cat /proc/cpuinfo的操作

procfs接口创建

实现效果:

例如, 在/proc下创建一个clk节点,通过cat /proc/clk可查看内容:

Linux驱动 | procfs接口创建

代码实现:

系统 内核版本
Linux 4.9.88

在驱动中添加以下代码:

#include <<a style=\'color:#f60; text-decoration:underline;\' href="https://www.php.cn/zt/15718.html" target="_blank">linux</a>/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>

struct proc_dir_entry *my_proc_entry;

static int proc_clk_show(struct seq_file *m, void *v)
{
    //cat显示的内容
    seq_printf(m,
          "pll0: %u Mhz\\n"
          "pll1: %u Mhz\\n"
          "pll2: %u Mhz\\n",
          100, 200, 300);
   return 0;
}

static int clk_info_open(struct inode *inode, struct file *filp)
{
     return single_open(filp, proc_clk_show, NULL);
}

static struct file_operations myops = 
{
      .owner = THIS_MODULE,
      .open = clk_info_open,
      .read = seq_read,
      .llseek = seq_lseek,
      .release = seq_release,
};

static int __init my_module_init(void)
{
    //注册proc接口
   my_proc_entry = proc_create("clk", 0644, NULL, &myops);

    return 0;
}

static void __exit my_module_exit(void)
{
    //注销proc接口
   proc_remove(my_proc_entry);
}

module_init(my_module_init);
module_exit(my_module_exit);
MODULE_LICENSE("GPL");

给TA打赏
共{{data.count}}人
人已打赏
运维

如何在麒麟操作系统上进行系统快速恢复和重装?

2024-5-2 10:10:14

运维

Linux中PATH环境变量的作用和重要性

2024-5-2 10:24:49

个人中心
购物车
优惠劵
有新私信 私信列表
搜索