Linux驱动 | procfs接口创建

上篇介绍了Linux驱动中sysfs接口的创建,今天介绍pr%ignore_a_1%cfs接口的创建。

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

procfs接口创建

实现效果:

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

Linux驱动 | procfs接口创建

代码实现:

系统 内核版本

Linux4.9.88

在驱动中添加以下代码:

#include #include #include #include #include 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/cpuinfo、cat /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_read、seq_lseek和seq_release。

proc新接口

注意,在较新版本的内核中,procfs的函数接口有所变化。

系统 内核版本

Linux5.10.111

在驱动中添加以下代码:

#include #include #include #include #include struct proc_dir_entry *my_proc_entry;static int proc_clk_show(struct seq_file *m, void *v){ seq_printf(m,    "pll0: %lu Mhzn"    "pll1: %lu Mhzn"    "pll2: %lu 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 const struct proc_ops clk_stat_proc_fops = { .proc_open = clk_info_open, .proc_read =  seq_read, .proc_lseek = seq_lseek, .proc_release = seq_release,};static int __init my_module_init(void){   my_proc_entry = proc_create("clk", 0, NULL, &clk_stat_proc_fops);    return 0;}static void __exit my_module_exit(void){   proc_remove(my_proc_entry);}module_init(my_module_init);module_exit(my_module_exit);MODULE_LICENSE("GPL");

新的proc接口中,将原来的struct file_operations换成了struct proc_ops,其中成员函数也添加了对应的前缀proc,但本质还是一样的,只是换了名字,更加规范了一些。

以上就是Linux驱动 | procfs接口创建的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/110153.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Sublime怎么切换项目?多项目管理的便捷操作指南
上一篇 2025年11月23日 06:49:27
电脑如何创建存储空间的详细方法
下一篇 2025年11月23日 06:51:29

相关推荐

  • 处理大文件(超 10MB)时的卡顿优化方案

    处理大文件(超 10MB)时的卡顿优化方案处理大文件(超 10MB)时的卡顿优化方案处理大文件(超 10MB)时的卡顿优化方案处理大文件(超 10MB)时的卡顿优化方案

    处理大文件卡顿时,核心解决方案是分片读取、异步处理和使用流式api。1. 分片读取:按行或按块(如几kb到几mb)逐步加载文件内容,避免内存过载;2. 异步处理:将耗时操作移至后台线程或进程,防止阻塞主线程,保持界面流畅;3. 使用流式api:借助node.js的stream、python的io等模…

    2026年10月2日 • 用户投稿
    100
  • 隐形王牌:揭秘研祥智能TRW-8271为何是轨交系统的智慧中枢

    隐形王牌:揭秘研祥智能TRW-8271为何是轨交系统的智慧中枢隐形王牌:揭秘研祥智能TRW-8271为何是轨交系统的智慧中枢隐形王牌:揭秘研祥智能TRW-8271为何是轨交系统的智慧中枢隐形王牌:揭秘研祥智能TRW-8271为何是轨交系统的智慧中枢

    想象一下,在城市地底穿梭不息的地铁与高速飞驰的列车深处,隐藏着一颗冷静而智慧的“大脑”。它从不喧哗,却始终维系着千万人出行的安全节奏。 这颗大脑,正是研祥智能专为轨道交通量身打造的车载%ignore_a_1%上架型整机——TRW-8271。一款将极致可靠性深植血脉的“隐形王牌”。 极致可靠,是一种「…

    2026年10月2日 • 用户投稿
    200
  • 插件更新后导致 Sublime Text 崩溃的回滚方法

    插件更新后导致 Sublime Text 崩溃的回滚方法插件更新后导致 Sublime Text 崩溃的回滚方法插件更新后导致 Sublime Text 崩溃的回滚方法插件更新后导致 Sublime Text 崩溃的回滚方法

    sublime text因插件更新崩溃的解决方法是:先以安全模式启动定位问题插件,再通过逐个启用排查并降级或卸载问题插件。1. 以安全模式启动(按住shift/option键),若正常则问题由插件引起;2. 逐个启用插件测试,锁定导致崩溃的具体插件;3. 对问题插件选择降级安装旧版或彻底卸载;4. …

    2026年10月2日 • 用户投稿
    000
  • Linux系统下如何搭建Java开发环境

    首先安装JDK,推荐OpenJDK并使用包管理器安装;接着配置JAVA_HOME和PATH环境变量;然后验证java与javac命令及编译运行测试程序;最后可选安装IntelliJ、Eclipse或VS Code等开发工具。 在Linux系统下搭建Java开发环境,核心步骤是安装JDK、配置环境变量…

    2026年10月2日
    100
  • 如何在Linux中限制用户命令执行?

    答案:通过sudo、受限shell、配置文件和隔离技术限制Linux用户命令执行。1. 配置/etc/sudoers使用户仅能运行指定命令,如alice只能重启Nginx或查看日志;2. 使用rbash禁用切换目录、修改环境变量等操作,并限制PATH指向安全路径;3. 通过.bashrc设置别名和只…

    2026年10月2日
    200
  • 如何使用Linux进行网络服务配置和优化

    如何使用linux进行网络服务配置和优化 引言:在如今的互联网时代,网络服务配置和优化是提高系统性能和安全性的重要环节之一。Linux作为一种流行的操作系统,拥有丰富的网络服务工具和功能,可以帮助我们实现高效的网络服务配置和优化。本文将介绍一些常用的Linux网络服务配置和优化技巧,并提供相应的代码…

    2026年10月2日
    000
  • 项目文件夹配置与多文件管理技巧

    项目文件夹配置与多文件管理技巧项目文件夹配置与多文件管理技巧项目文件夹配置与多文件管理技巧项目文件夹配置与多文件管理技巧

    高效的项目文件夹结构应具备清晰、一致、可扩展的特点。1. 顶层目录通常包括src(源代码)、data(数据)、docs(文档)、assets(资源)、lib(依赖库)、build(构建输出)、tests(测试)等;2. 每个目录下按模块或功能进一步细分,如src下分components、pages、…

    2026年10月2日 • 用户投稿
    100
  • 如何使用Linux进行CPU利用率优化

    如何使用linux进行cpu利用率优化 摘要:在Linux系统中,优化CPU利用率可以提高系统性能和资源利用效率。本文将介绍一些常见的CPU利用率优化技巧,并给出相应的代码示例。 一、使用进程调度算法 修改进程调度策略:Linux系统默认使用完全公平调度(CFS)算法,可以根据实际需求修改调度策略。…

    2026年10月2日
    000
  • 如何使用Linux进行软件包安装和更新

    如何使用linux进行软件包安装和更新 一、引言Linux是一种常见的操作系统,它以其高度灵活、安全且稳定的特点而闻名于世。在Linux中,软件包的安装和更新是一项非常重要的任务。本文将介绍如何使用Linux进行软件包的安装和更新,并提供一些代码示例以供参考。 二、软件包管理器在Linux系统中,常…

    2026年10月2日
    000
  • java代码怎样实现文件的复制与移动 java代码文件操作的进阶教程​

    java代码怎样实现文件的复制与移动 java代码文件操作的进阶教程​java代码怎样实现文件的复制与移动 java代码文件操作的进阶教程​java代码怎样实现文件的复制与移动 java代码文件操作的进阶教程​java代码怎样实现文件的复制与移动 java代码文件操作的进阶教程​

    java中实现文件复制与移动最推荐的方式是使用java.nio.file包下的files类,因其提供简洁、高效且功能丰富的api,支持权限、原子性及符号链接处理。2. 核心方法为files.copy()和files.move(),均接受源路径和目标路径的path对象,并可选standardcopyo…

    2026年10月2日 • 用户投稿
    200
  • 常用的Linux 系统备份、恢复命令

    删库跑路的事常常听说,不过,这只能是个调侃的话题,真正的工作中可不能这么干,否则,库是删了,路怕是跑不了了。 所以,备份很重要!!!!! tar 命令 副本(本机备份整个系统,以后还原还是还原到本机) 注意根目录下要有充足的可用空间用于备份。 cd /#tar.gz格式tar cvpzf syste…

    2026年10月2日
    000
  • 面试官常考的 21 条 Linux 命令

    正文 find /var/mail/ -size +50M -exec rm {} \; 四、文件的权限  使用 “+” 设置权限,使用 “-” 用于取消 9. chmod 命令 ls -lh 显示权限 chmod ugo+rwx directory1…

    2026年10月2日
    000
  • 6 个“吓人”的 Linux 命令

    6 个“吓人”的 Linux 命令6 个“吓人”的 Linux 命令6 个“吓人”的 Linux 命令6 个“吓人”的 Linux 命令

    正文 $ mcrypt xEnter the passphrase (maximum of 512 characters)Please use a combination of upper and lower case letters and numbers.Enter passphrase:Ent…

    2026年10月2日 • 用户投稿
    000
  • Sublime Text 主题更换后显示异常的解决方法

    Sublime Text 主题更换后显示异常的解决方法Sublime Text 主题更换后显示异常的解决方法Sublime Text 主题更换后显示异常的解决方法Sublime Text 主题更换后显示异常的解决方法

    更换sublime text主题后显示异常,通常由兼容性、配置或缓存问题导致。1. 检查主题是否兼容当前sublime text版本;2. 清理缓存文件夹;3. 确保package control正常工作并尝试重新安装;4. 手动下载主题并安装至packages目录;5. 检查主题文档并完成必要配置…

    2026年10月2日 • 用户投稿
    100
  • 为什么建议大家使用 Linux 开发?

    正文 Linux 能用吗?我身边还有些朋友对 linux 的印象似乎还停留在黑乎乎的命令行界面上。当我告诉他或者建议他使用 linux 时,会一脸惊讶的问我,那个怎么用(来开发或者日常使用)?这是我使用了近两年的“国产”操作系统 deepin ,界面美不美观我不知道,能用是肯定的。首先 Vim/Em…

    用户投稿 2026年10月2日
    000
  • 如何在Sublime Text中安装并切换不同的主题与配色方案?

    如何在Sublime Text中安装并切换不同的主题与配色方案?如何在Sublime Text中安装并切换不同的主题与配色方案?如何在Sublime Text中安装并切换不同的主题与配色方案?如何在Sublime Text中安装并切换不同的主题与配色方案?

    在sublime text中安装和切换主题与配色方案的步骤如下:1. 安装package control:通过控制台运行代码安装包管理器;2. 使用package control安装主题(如material theme)和配色方案(如monokai pro);3. 在preferences >…

    2026年10月2日 • 用户投稿
    100
  • Sublime怎么卸载插件?彻底删除插件的正确操作步骤

    Sublime怎么卸载插件?彻底删除插件的正确操作步骤Sublime怎么卸载插件?彻底删除插件的正确操作步骤Sublime怎么卸载插件?彻底删除插件的正确操作步骤Sublime怎么卸载插件?彻底删除插件的正确操作步骤

    一、通过 package control 卸载插件是最常用方式,打开命令面板输入 remove package 选择插件删除;二、手动删除插件文件夹更彻底,前往 packages 和 data 路径下清除残留配置文件;三、插件重装或冲突时可删除缓存文件并重启 sublime。文章介绍了三种卸载 su…

    2026年10月2日 • 用户投稿
    100
  • 红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广

    红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广红旗 Linux 桌面操作系统11来了:支持国产自主CPU,全新UI风格设计,兼容面广

    正文 红旗Linux桌面操作系统11将于1月10日开放预览版的下载,新版本具有良好的硬件兼容,支持多款国产自主CPU品牌,同时还具有丰富的外设支持及海量的易用生态软件,打造全新的UI设计风格,带来更灵动的视觉效果和便捷的操作体验。 预览版将在2021年1月10日开放下载,大家可以关注一下: http…

    2026年10月2日 • 用户投稿
    100
  • Sublime如何折叠代码?代码块折叠展开的快捷键大全

    Sublime如何折叠代码?代码块折叠展开的快捷键大全Sublime如何折叠代码?代码块折叠展开的快捷键大全Sublime如何折叠代码?代码块折叠展开的快捷键大全Sublime如何折叠代码?代码块折叠展开的快捷键大全

    sublime text 的代码折叠功能可通过多种快捷键提升编辑效率。折叠当前代码块用 ctrl + shift + [,可收起光标所在或选中的代码区域;展开用 ctrl + shift + ];折叠所有代码块用 ctrl + k, ctrl + 0;展开所有用 ctrl + k, ctrl + j…

    2026年10月2日 • 用户投稿
    400
  • Sublime怎么新建文件?新建文件的4种快捷操作方式

    Sublime怎么新建文件?新建文件的4种快捷操作方式Sublime怎么新建文件?新建文件的4种快捷操作方式Sublime怎么新建文件?新建文件的4种快捷操作方式Sublime怎么新建文件?新建文件的4种快捷操作方式

    在sublime text中新建文件有四种主要方法,适合不同使用场景。① 使用快捷键 ctrl + n(windows/linux)或 cmd + n(mac)可快速在当前窗口打开未命名新文件,适合临时编写内容;② 通过菜单栏点击 “file → new file” 实现相同功能,适合新手熟悉界面;…

    2026年10月2日 • 用户投稿
    100

发表回复

登录后才能评论
关注微信