创建虚拟文件系统设备文件节点_使用proc_create实例分析
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实例分析相关推荐
- linux 创建 虚拟文件系统设备 文件节点 使用 proc_create 实例 简介
proc虚拟文件系统也可以创建虚拟文件节点,实现用户空间与内核空间的交互.在驱动中创建节点,可以实现对硬件的控制.proc_create函数原型(在kernel-3.10/include/linux/ ...
- Linux创建虚拟块设备并格式化为文件系统
环境 为了方便学习文件系统的原理和原始数据的分析,需要创建虚拟块设备并格式化为ext4文件系统: Linux创建虚拟块设备 losetup命令 -a 显示所有已经使用的回环设备状态 - ...
- linux mdev 命令,linux设备驱动----利用mdev(udev)自动创建设备文件节点
1.mdev的使用方法和原理: mdev是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合.其具有使用简单的特点.它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程 ...
- 网络与IO知识扫盲(一):Linux虚拟文件系统,文件描述符,IO重定向
系统IO原理 在 Linux 中: VFS(Virtual Filesystem Switch):虚拟文件系统,是一个目录树.树上不同的节点可以映射到物理的文件地址,可以挂载. 相当于一个解耦层,在具 ...
- Linux虚拟文件系统、文件描述符、管道
在Linux中,所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录(Windows下称为文件夹)是文件,硬件设备(键盘.监视器.硬盘.打印机等)都是文件,就连套接字(socket ...
- 50.逻辑卷管理5,文件系统相关操作,创建挂载文件系统,扩容文件
文件系统相关操作 创建文件系统 格式化 逻辑卷textlv创建好之后,就可以在上面创建文件系统,以ext4文件系统为例,应该注意的是逻辑卷的引用需要逻辑卷的设备文件,逻辑卷的设备文件有两种书写方式 以 ...
- python xml 创建多个同名子节点_果粉有福了!5分钟学会用Python统计自己最爱听的音乐...
作为一个最狂热的果粉,喜欢用苹果来播放自己最爱的音乐,随时让音乐充满自己的生活.想统计自己哪些音乐才是自己最爱吗?想知道哪些音乐是自己第一次听见就相伴终身吗?下面用Python来完成您的心愿. 下面的 ...
- 怎么linux中创建虚拟路径,linux服务器创建虚拟路径解决文件上传路径隔离问题...
需求环境 图片上传最简单的就是上传web项目下,这样图片与项目不可分离会产生很多不必要的影响.例如:重新部署项目需要把所有上传的图片再copy一份等. 图片与项目分离有好几种方式: 方式一.在linu ...
- 字符设备驱动高级篇4——设备类(自动创建和删除设备文件)相关代码分析
以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 主要涉及class_create和device_create函数. 1.sys文件系统简介 (1)sys文件系统的 ...
- labview创建.netdll设置多个输出_手把手以实例教你学LabVIEW编程,条件结构编程方法...
LabVIEW又称为G语言,简单易学.形象直观,采用图形化的编程方式,是专为测试.测量和控制应用而设计的系统工程软件. 在上篇文章(请参考:顺序结构编程)中已经讲了顺序结构的编程方法,下面通过具体例子 ...
最新文章
- 浅析防御僵尸网络基于应用层的DDOS攻击
- ASP组件AspJpeg(加水印)
- c语言flash里能存文件吗,STM32内部FLASH打包读写
- 深度学习:让电脑像人一样看世界
- EJB3与Spring的集成
- Scala比较器:Ordered与Ordering
- Zigbee音频, 6LowPAN, IEEE 802
- 线上问题随笔记录数据库连接池问题
- UDK编辑器 49条小提示(转)
- ext2删除文件恢复笔记
- 蓝桥杯 ALGO-73 算法训练 统计字符次数
- 0-5v转0-20ma和0-5v转4-20ma
- 数据结构与与算法之希尔排序
- UVAlive3662 Another Minimum Spanning Tree 莫队算法
- (2015省赛系列--团体热身赛第二场)
- 《2021中国数据智能产业图谱3.0升级版》重磅发布
- CC2530天线发射功率与接收灵敏度——玩转ZigBee的高端操作(Zstack框架)
- JZOJ1728. Antimonotonicity
- elastic search配置ik分词及pinyin分词使搜索同时支持中文和拼音搜索
- 赤子城科技三年两变:音视频社交成主力军,营收结构稳定性存疑