全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

Linux驱动中procfs接口的创建

时间:2023-09-27 11:24

人气:

作者:admin

标签: 驱动  接口 

导读:procfs接口创建 实现效果: 例如, 在 /proc 下创建一个clk节点,通过 cat /proc/clk 可查看内容: 在驱动中添加以下代码: # include # include # include # include # include struct proc_dir_entry * my_proc_entry...

procfs接口创建

实现效果:

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

图片

在驱动中添加以下代码:

#include < linux/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 Mhzn"
          "pll1: %u Mhzn"
          "pll2: %u Mhzn",
          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");

procfs接口的创建,主要是实现struct file_operations结构体,然后通过proc_create函数进行注册,通过proc_remove函数进行注销。

procfs通常是用来获取CPU、内存、进程等各种信息,例如cat /proc/cpuinfocat /proc/meminfo,所以我们只需要实现.open成员函数。当使用cat命令查看/proc下的信息时,会调用到.open对应的实现函数。

这里我们使用了seq_file接口,需要记住的是, procfs通常会和seq_file接口一起使用 。seq_file是一个序列文件接口, 当我们创建的proc数据内容由一系列数据顺序组合而成或者是比较大的proc文件系统时,都建议使用seq_file接口 ,例如cat /proc/meminfo就会显示很多内容。

seq_file接口主要就是解决proc接口编程存在的问题, 推荐在proc接口编程时使用seq_file接口 ,另外.read、.llseek、.release成员函数也可以直接用seq_readseq_lseekseq_release

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信