怎样在Linux驱动中创建proc节点(示例)
一、定义proc节点的读、写函数
static int tp_switch_writeproc(struct file *file,const char *buffer,
unsigned long count,void *data)
{
sscanf(buffer,"%d", &tp_dbg);
printk("tpd: proc-->tp_dbg = %d\n", tp_dbg);
return count;
}
static int tp_switch_readproc(char *page, char **start, off_t off,
int count,int *eof, void *data)
{
int len;
unsigned char tmp =tp_dbg&0x0F;
len = sprintf(page,"%c\n", tmp);
return 2;
}
二、驱动加载时创建proc节点的入口
#include <linux/proc_fs.h>
static struct proc_dir_entry *tp_root;
static struct proc_dir_entry *debug_entry;
#define USER_ROOT_DIR "tp_debug"
#define USER_ENTRY1 "debug_switch"
staticint goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
… …
init_debug_port(); //创建proc调试节点
… …
}
static int init_debug_port(void)
{
pt_root =proc_mkdir(USER_ROOT_DIR, NULL);
if (NULL==pt_root)
{
printk(KERN_ALERT"Create dir /proc/%s error!\n", USER_ROOT_DIR);
return -1;
}
printk(KERN_INFO"Create dir /proc/%s\n", USER_ROOT_DIR);
// Create a test entryunder USER_ROOT_DIR
pt_entry1 =create_proc_entry(USER_ENTRY1, 0666, pt_root);
if (NULL ==pt_entry1)
{
printk(KERN_ALERT"Create entry %s under /proc/%s error!\n",
USER_ENTRY1,USER_ROOT_DIR);
goto err_out;
}
pt_entry1->write_proc= tp_switch_writeproc;
pt_entry1->read_proc =tp_switch_readproc;
printk(KERN_INFO"Create /proc/%s/%s\n",
USER_ROOT_DIR,USER_ENTRY1);
return 0;
err_out:
pt_entry1->read_proc =NULL;
pt_entry1->write_proc= NULL;
remove_proc_entry(USER_ROOT_DIR,pt_root);
return -1;
}
三、卸载驱动时删除proc节点
static void remove_debug_port(void)
{
remove_proc_entry(USER_ENTRY1,pt_root);
remove_proc_entry(USER_ROOT_DIR,NULL);
}
static int goodix_ts_remove(struct i2c_client *client)
{
… …
remove_debug_port();
… …
}
怎样在Linux驱动中创建proc节点(示例)相关推荐
- linux中创建gpio节点
转自:http://blog.chinaunix.net/uid-29165999-id-4296162.html #define GPIO_MAJOR 230 // major device NO. ...
- Linux文件系统中的inode节点详细介绍
一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...
- Linux设备驱动开发-linux驱动中的阻塞访问方式
阻塞与非阻塞是设备访问的两种不同的模式.什么是阻塞操作呢?其是指在执行设备操作的时候,如果不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.而非阻塞操作则是在进程不能进行设备操作时,并不挂起到 ...
- 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解
Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...
- linux probe函数调用,【整理】Linux驱动中,probe函数何时被调用
[整理]Linux驱动中,probe函数何时被调用 用SourceInsight跟踪: 从driver_register看起,此处我的这里是: int driver_register(struct d ...
- Linux/Windows中创建共享文件夹
Linux/Windows中创建共享文件夹 一.虚拟机访问主机的文件夹 1.设置虚拟机共享主机的路径 2.设置主机目录为共享文件夹[Windows之间共享目录] 2.1 设置共享文件夹 2.2 访问共 ...
- linux如何生成tar文件内容,在Linux系统中创建tar.gz文件的方法及实例讲解
本文介绍在Linux系统中创建tar.gz文件的方法,及实例讲解. 介绍 tar存档是一个文件,用于存储其他文件的集合,包括有关它们的信息,例如所有权.权限和时间戳. 在Linux操作系统中,可以使用 ...
- linux内核创建节点,Linux内核驱动自动创建设备节点文件
Linux下生成驱动设备节点文件的方法有3个:1.手动mknod:2.利用devfs:3.利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上L ...
- Linux模块(2) - 创建设备节点
今天计划将之前写的模块Linux模块(1) - 加载与卸载填充一下,达到设备节点创建的功能. 1. 全局数据 模块中有许多数据结构是要动态申请和释放的,就少不了一些全局数据来标记这些信息,这里通过宏M ...
最新文章
- String,StringBuffer与StringBuilder的区别??
- 10个优秀的 Web UI库/框架 详细出处参考:http://www.jb51.net/web/22251.html
- 学计算机学体育生闺女,数学老师转行教体育 他有4个特别的“女儿”
- Android属性动画 XML
- elasticjob已下线_elastic-job详解(二):作业的调度
- Super-palindrome(思维)
- (todo)数组名 有存储空间吗?
- 十大经典算法 - 转载
- leetcode —— 面试题60. n个骰子的点数
- win10热点手机显示IP配置错误连不上和电脑连上网线没网络
- 软件类大学生求职就业攻略(四)——求职面试
- html 过滤引号,用js正则表达式过滤双引号的解决办法
- 使用ASProfile分析可变剪切事件
- 浅谈学术论文rebuttal
- 福慧双修探险 BZOJ4398BZOJ2407
- 收到索尼4亿美元豪华大礼包 B站离百亿美元目标更进一步?
- k8s中文件描述符与线程限制
- 一、shell编程之shell简介
- 合工大 程序设计艺术 实验三 房间最短路径
- 2012微软暑期实习笔试
热门文章
- [译]不要在UI主线程中进行耗时的操作
- InputStream 、 InputStreamReader和BufferedReader
- PagerAdapter学习
- Flask爱家租房--发布新房源(保存房屋图片)
- 无锡计算机硬件培训,无锡锡山办公软件电脑基础培训随到随学 学会为止
- flink整合java,Flink使用SideOutPut替换Split实现分流
- python compare excel_python简单操作excle的方法
- 快速傅里叶变换python_FFT快速傅里叶变换的python实现过程解析
- hive遍历_从Hive中的stored as file_foramt看hive调优
- linux c程序中内核态与用户态内存存储问题