proc虚拟文件系统也可以创建虚拟文件节点,实现用户空间与内核空间的交互。在驱动中创建节点,可以实现对硬件的控制。proc_create函数原型(在kernel-3.10/include/linux/proc_fs.h文件)如下所示:

static inline struct proc_dir_entry *proc_create(
const char *name, umode_t mode, struct proc_dir_entry *parent,const struct file_operations *proc_fops)
{return proc_create_data(name, mode, parent, proc_fops, NULL);
}

name:表示你要创建的设备节点的名称,可随意命名即可;
mode:表示节点的权限,一般赋值0644;
parent:表示父节点,如果直接在proc目录创建节点,直接赋值NULL即可;
proc_fops:表示与节点相关联的file_operations;

如下代码是我实现的一个test程序,可供参考学习proc_create的使用:

#include <linux/init.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/ioctl.h>
#include <linux/uaccess.h>
#include <linux/delay.h>
#include <linux/string.h>
#include <linux/wait.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/pinctrl/consumer.h>
#include <linux/of_gpio.h>
#include <linux/delay.h>
#include <linux/types.h>
#include <linux/proc_fs.h>#define BUFSIZE  1024 static char *buf;
static unsigned int len;/************************ file_operations->open* 无操作***********************/static int test_proc_open(struct inode *inode, struct file *file)
{return 0;
}/************************* file_operations->read* 可以在adb工具进入机器的pro目录,执行adb shell && cd proc && cat tets_rw,* 即可读出节点test_rw的内容是12345************************/static ssize_t test_proc_read(struct file *file,char __user *buffer,size_t count, loff_t *f_pos)
{if(*f_pos > 0)return 0;printk("---start read---\n");printk("the  string is >>>>> %s\n", buf);if(copy_to_user(buffer, buf, len))return -EFAULT;*f_pos = *f_pos + len;return len;
}/************************* file_operations->write* 可以在adb工具进入机器的pro目录,* 执行adb shell && cd proc && echo 12345 > tets_rw,即可把12345写入节点test_rw************************/static ssize_t test_proc_write(struct file *file, const char __user *buffer,size_t count, loff_t *f_pos)
{if(count <= 0)return -EFAULT;printk("---start write---\n");len = count > BUFSIZE ? BUFSIZE : count;// kfree memory by kmalloc beforeif(buf != NULL)kfree(buf);buf = (char*)kmalloc(len+1, GFP_KERNEL);if(buf == NULL){printk("test_proc_create kmalloc fail!\n");return -EFAULT;}//memset(buf, 0, sizeof(buf));memset(buf, 0, len+1);if(copy_from_user(buf, buffer, len))return -EFAULT;printk("test_proc_write writing :%s",buf);return len;
}static struct file_operations test_fops = {.owner = THIS_MODULE,.open    = test_proc_open,
//  .release = single_release,.read    = test_proc_read,
//  .llseek = seq_lseek,.write     = test_proc_write,
};static int __init test_init(void)
{struct proc_dir_entry* file;//创建proc文件并关联file_operationsfile = proc_create("test_rw", 0644, NULL, &test_fops);if (!file)return -ENOMEM;printk("test_rw init success!\n");return 0;
}static void __exit test_exit(void)
{remove_proc_entry("test_rw", NULL);printk("test_exit\n");}module_init(test_init);
module_exit(test_exit);MODULE_AUTHOR("caizd");
MODULE_DESCRIPTION("Proc_create Test Driver");
MODULE_LICENSE("GPL");

代码编进kernel之后,可以在adb工具验证是否可行。

C:\Users\asus>adb shell
root@inwatch_portal:/ # cd proc
cd proc
root@inwatch_portal:/proc # echo 12345 > test_rw
echo 12345 > test_rw
root@inwatch_portal:/proc # cat test_rw
cat test_rw
12345
root@inwatch_portal:/proc #

---------- 爱生活,爱安卓,爱Linux ----------

创建虚拟文件系统设备文件节点_使用proc_create实例分析相关推荐

  1. linux 创建 虚拟文件系统设备 文件节点 使用 proc_create 实例 简介

    proc虚拟文件系统也可以创建虚拟文件节点,实现用户空间与内核空间的交互.在驱动中创建节点,可以实现对硬件的控制.proc_create函数原型(在kernel-3.10/include/linux/ ...

  2. Linux创建虚拟块设备并格式化为文件系统

    环境 为了方便学习文件系统的原理和原始数据的分析,需要创建虚拟块设备并格式化为ext4文件系统: Linux创建虚拟块设备 losetup命令     -a 显示所有已经使用的回环设备状态     - ...

  3. linux mdev 命令,linux设备驱动----利用mdev(udev)自动创建设备文件节点

    1.mdev的使用方法和原理: mdev是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合.其具有使用简单的特点.它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程 ...

  4. 网络与IO知识扫盲(一):Linux虚拟文件系统,文件描述符,IO重定向

    系统IO原理 在 Linux 中: VFS(Virtual Filesystem Switch):虚拟文件系统,是一个目录树.树上不同的节点可以映射到物理的文件地址,可以挂载. 相当于一个解耦层,在具 ...

  5. Linux虚拟文件系统、文件描述符、管道

    在Linux中,所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录(Windows下称为文件夹)是文件,硬件设备(键盘.监视器.硬盘.打印机等)都是文件,就连套接字(socket ...

  6. 50.逻辑卷管理5,文件系统相关操作,创建挂载文件系统,扩容文件

    文件系统相关操作 创建文件系统 格式化 逻辑卷textlv创建好之后,就可以在上面创建文件系统,以ext4文件系统为例,应该注意的是逻辑卷的引用需要逻辑卷的设备文件,逻辑卷的设备文件有两种书写方式 以 ...

  7. python xml 创建多个同名子节点_果粉有福了!5分钟学会用Python统计自己最爱听的音乐...

    作为一个最狂热的果粉,喜欢用苹果来播放自己最爱的音乐,随时让音乐充满自己的生活.想统计自己哪些音乐才是自己最爱吗?想知道哪些音乐是自己第一次听见就相伴终身吗?下面用Python来完成您的心愿. 下面的 ...

  8. 怎么linux中创建虚拟路径,linux服务器创建虚拟路径解决文件上传路径隔离问题...

    需求环境 图片上传最简单的就是上传web项目下,这样图片与项目不可分离会产生很多不必要的影响.例如:重新部署项目需要把所有上传的图片再copy一份等. 图片与项目分离有好几种方式: 方式一.在linu ...

  9. 字符设备驱动高级篇4——设备类(自动创建和删除设备文件)相关代码分析

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 主要涉及class_create和device_create函数. 1.sys文件系统简介 (1)sys文件系统的 ...

  10. labview创建.netdll设置多个输出_手把手以实例教你学LabVIEW编程,条件结构编程方法...

    LabVIEW又称为G语言,简单易学.形象直观,采用图形化的编程方式,是专为测试.测量和控制应用而设计的系统工程软件. 在上篇文章(请参考:顺序结构编程)中已经讲了顺序结构的编程方法,下面通过具体例子 ...

最新文章

  1. 浅析防御僵尸网络基于应用层的DDOS攻击
  2. ASP组件AspJpeg(加水印)
  3. c语言flash里能存文件吗,STM32内部FLASH打包读写
  4. 深度学习:让电脑像人一样看世界
  5. EJB3与Spring的集成
  6. Scala比较器:Ordered与Ordering
  7. Zigbee音频, 6LowPAN, IEEE 802
  8. 线上问题随笔记录数据库连接池问题
  9. UDK编辑器 49条小提示(转)
  10. ext2删除文件恢复笔记
  11. 蓝桥杯 ALGO-73 算法训练 统计字符次数
  12. 0-5v转0-20ma和0-5v转4-20ma
  13. 数据结构与与算法之希尔排序
  14. UVAlive3662 Another Minimum Spanning Tree 莫队算法
  15. (2015省赛系列--团体热身赛第二场)
  16. 《2021中国数据智能产业图谱3.0升级版》重磅发布
  17. CC2530天线发射功率与接收灵敏度——玩转ZigBee的高端操作(Zstack框架)
  18. JZOJ1728. Antimonotonicity
  19. elastic search配置ik分词及pinyin分词使搜索同时支持中文和拼音搜索
  20. 赤子城科技三年两变:音视频社交成主力军,营收结构稳定性存疑

热门文章

  1. 51Nod 1117 - 聪明的木匠(贪心)
  2. mysql-关联查询
  3. 【设计模式】Template Method模式
  4. System.IO.Ports.SerialPort串口通信接收完整数据
  5. 【WPF】对Frame控件的Content属性做绑定时出现的一个小问题
  6. ICLR'22 | cosFormer:重新思考注意力机制中的Softmax
  7. 百篇论文分类整理看数据增广最新研究进展
  8. 知深行远:关于图神经网络层数加深的探索
  9. 【ACL2020】DeeBERT:衡量性能与效率的 BERT 推理方法
  10. 机器学习十大经典算法——线性回归