一、定义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节点(示例)相关推荐

  1. linux中创建gpio节点

    转自:http://blog.chinaunix.net/uid-29165999-id-4296162.html #define GPIO_MAJOR 230 // major device NO. ...

  2. Linux文件系统中的inode节点详细介绍

    一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...

  3. Linux设备驱动开发-linux驱动中的阻塞访问方式

    阻塞与非阻塞是设备访问的两种不同的模式.什么是阻塞操作呢?其是指在执行设备操作的时候,如果不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.而非阻塞操作则是在进程不能进行设备操作时,并不挂起到 ...

  4. 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解

    Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...

  5. linux probe函数调用,【整理】Linux驱动中,probe函数何时被调用

    [整理]Linux驱动中,probe函数何时被调用 用SourceInsight跟踪: 从driver_register看起,此处我的这里是: int driver_register(struct d ...

  6. Linux/Windows中创建共享文件夹

    Linux/Windows中创建共享文件夹 一.虚拟机访问主机的文件夹 1.设置虚拟机共享主机的路径 2.设置主机目录为共享文件夹[Windows之间共享目录] 2.1 设置共享文件夹 2.2 访问共 ...

  7. linux如何生成tar文件内容,在Linux系统中创建tar.gz文件的方法及实例讲解

    本文介绍在Linux系统中创建tar.gz文件的方法,及实例讲解. 介绍 tar存档是一个文件,用于存储其他文件的集合,包括有关它们的信息,例如所有权.权限和时间戳. 在Linux操作系统中,可以使用 ...

  8. linux内核创建节点,Linux内核驱动自动创建设备节点文件

    Linux下生成驱动设备节点文件的方法有3个:1.手动mknod:2.利用devfs:3.利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上L ...

  9. Linux模块(2) - 创建设备节点

    今天计划将之前写的模块Linux模块(1) - 加载与卸载填充一下,达到设备节点创建的功能. 1. 全局数据 模块中有许多数据结构是要动态申请和释放的,就少不了一些全局数据来标记这些信息,这里通过宏M ...

最新文章

  1. String,StringBuffer与StringBuilder的区别??
  2. 10个优秀的 Web UI库/框架 详细出处参考:http://www.jb51.net/web/22251.html
  3. 学计算机学体育生闺女,数学老师转行教体育 他有4个特别的“女儿”
  4. Android属性动画 XML
  5. elasticjob已下线_elastic-job详解(二):作业的调度
  6. Super-palindrome(思维)
  7. (todo)数组名 有存储空间吗?
  8. 十大经典算法 - 转载
  9. leetcode —— 面试题60. n个骰子的点数
  10. win10热点手机显示IP配置错误连不上和电脑连上网线没网络
  11. 软件类大学生求职就业攻略(四)——求职面试
  12. html 过滤引号,用js正则表达式过滤双引号的解决办法
  13. 使用ASProfile分析可变剪切事件
  14. 浅谈学术论文rebuttal
  15. 福慧双修探险 BZOJ4398BZOJ2407
  16. 收到索尼4亿美元豪华大礼包 B站离百亿美元目标更进一步?
  17. k8s中文件描述符与线程限制
  18. 一、shell编程之shell简介
  19. 合工大 程序设计艺术 实验三 房间最短路径
  20. 2012微软暑期实习笔试

热门文章

  1. [译]不要在UI主线程中进行耗时的操作
  2. InputStream 、 InputStreamReader和BufferedReader
  3. PagerAdapter学习
  4. Flask爱家租房--发布新房源(保存房屋图片)
  5. 无锡计算机硬件培训,无锡锡山办公软件电脑基础培训随到随学 学会为止
  6. flink整合java,Flink使用SideOutPut替换Split实现分流
  7. python compare excel_python简单操作excle的方法
  8. 快速傅里叶变换python_FFT快速傅里叶变换的python实现过程解析
  9. hive遍历_从Hive中的stored as file_foramt看hive调优
  10. linux c程序中内核态与用户态内存存储问题