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/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。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
接口
+关注
关注
33文章
9600浏览量
157620 -
驱动
+关注
关注
12文章
1991浏览量
88704 -
Linux
+关注
关注
88文章
11817浏览量
219543
发布评论请先 登录
相关推荐
热点推荐
简析Linux proc文件系统
linux 操作系统把虚拟地址分为用户空间和内核空间,内核空间可以通过procfs把内核的数据呈现给用户空间,用户空间也可以把数据写入到内核从而更改内核的行为,这在驱动中很常见,最终目
发表于 06-16 10:32
•1349次阅读
LiteOS-A内核中的procfs文件系统分析
。procfs文件系统是LiteOS-A内核文件系统的一个案例,通过了解procfs文件系统,能够熟悉LiteOS-A的文件系统框架,并很好地将内核信息通过文件系统反馈给使用者。Linux系统
发表于 12-08 11:31
手把手教你创建Linux设备驱动和应用程序
其实我们创建的myLed IP相对于Linux操作系统可以是它的一个底层设备,因为PS总线为myLed IP分配了寻址地址,这样我们就可以创建myLed IP模块的硬件驱动,然后搭建应
发表于 11-10 14:49
•4843次阅读
linux系统中如何创建文本菜单
当使用Linux系统时,最常见的Shell脚本交互类型是应用菜单(文本菜单),文本菜单的核心是case命令。 H. L.使用case命令完成菜单交互。 让我们在下面创建一个简单的脚本。 在Linux系统
发表于 09-25 15:45
•1517次阅读
如何在 Vitis 中使用 UIO 驱动框架创建简单的 Linux 用户应用
Linux嵌入式设计中最基本的任务之一是创建用户应用程序。 在本篇博文中,我们将探讨如何在 Vitis 中使用 UIO 驱动框架创建简单的 Linu
LiteOS-A内核中的procfs文件系统分析
文件系统,不存在硬盘当中,而是系统启动时动态生成的文件系统,储存在内存中。procfs文件系统通常挂载在/proc目录下。 LiteOS-
Linux驱动-spidev驱动使用方法
Linux内核集成了spidev驱动,提供了SPI设备的用户空间API,支持用于半双工通信的read()和write()访问接口以及用于全双工通信和I/O配置的ioctl()接口;使用
Linux中如何如何为现有用户创建主目录?
在Linux系统中,每个用户都有一个主目录,通常称为home目录,用于存储用户的个人文件和配置信息。然而,有时候我们会创建一个新的用户,但是忘记或者没有选择为其创建一个主目录。在这种情
Linux驱动proc新接口介绍
proc新接口 注意,在较新版本的内核中, procfs 的函数接口有所变化。 系统 内核版本 Linux 5.10.111 在
linux中创建group的命令
在Linux中,创建用户组的命令是 groupadd 。 以下是一个例子: groupadd groupName 这个命令将创建一个新的用户组,名称为groupName。 在
Linux中的用户与创建
Linux中的用户与创建 用户的类型 超级管理用户: 权限最高的用户(uid:0) #uid:是用户的身份证号,Linux系统只认uid 普通用户: 权限受限的用户(uid:1000-
Linux驱动中procfs接口的创建
评论