怎样在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();

        … …

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之二叉树:二叉查找树的先序、中序、后序、层序遍历,Python代码实现——10(续)

数据结构之二叉查找树的代码实现 本节继续对上一节BST的功能实现 在实现之前&#xff0c;先对要实现的功能进行一下简单的介绍 BST的几种常见遍历方式 以一个简化的树为例&#xff0c;一棵树包含根(父)结点和其左子树及右子树&#xff1a; 遍历顺序的先后是指根(父)结点被遍…

OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔

1 图像缩放 缩放是对图像的大小进行调整&#xff0c;即使图像放大或缩小。 API cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)参数&#xff1a; src : 输入图像 dsize: 绝对尺寸&#xff0c;直接指定调整后图像的大小 fx,fy: 相对尺寸&#xff0c;将dsize设…

Direct2D教程(九)渲染位图

概述 这篇的标题更确切的说应该叫位图画刷&#xff0c;这样才好和前几篇对应起来。在Direct2D中&#xff0c;位图的渲染也是通过画刷来实现的。 Direct2D中并没有直接操作位图的接口&#xff0c;而是借助WIC&#xff08;Windows Image Component&#xff09;来完成的。今天我们…

OpenCV_05 形态学操作:连通性+腐蚀和膨胀+开闭运算+礼帽和黑帽

1 连通性 在图像中&#xff0c;最小的单位是像素&#xff0c;每个像素周围有8个邻接像素&#xff0c;常见的邻接关系有3种&#xff1a;4邻接、8邻接和D邻接。分别如下图所示&#xff1a; 4邻接&#xff1a;像素p(x,y)的4邻域是&#xff1a;(x1,y)&#xff1b;(x-1,y)&#xff…

数据结构之二叉树:折纸问题——11

数据结构之二叉树&#xff1a;Python代码解决折纸问题 折纸问题 要求&#xff1a;请把一段纸条竖着放在桌子上&#xff0c;然后从纸条的下边向上方对折1次&#xff0c;压出折痕后展开。此时折痕是凹下去的&#xff0c;即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方…

OpenCV_06 图像平滑:图像噪声+图像平滑+滤波

1 图像噪声 由于图像采集、处理、传输等过程不可避免的会受到噪声的污染&#xff0c;妨碍人们对图像理解及分析处理。常见的图像噪声有高斯噪声、椒盐噪声等。 1.1 椒盐噪声 椒盐噪声也称为脉冲噪声&#xff0c;是图像中经常见到的一种噪声&#xff0c;它是一种随机出现的白…

Android kernel Crash后,定位出错点的方法

1. 将/prebuild/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/arm-linux-androideabi-gdb 拷贝到/usr/local/bin下 2. 进入out/target/product/工程名xxx/obj/KERNEL_OBJ 目录,找到文件vmlinux

Vuejs 写法实例

原文地址&#xff1a;http://www.jianshu.com/p/293387d240b2 Hello World <div id"app">{{ message }}<button v-on:click"clickMe()">点击</button> <button v-on:click"clickMe">无参数的简写</button> </d…

数据结构之堆:堆的介绍与python实现——12

堆的简单实现与代码实现 堆的定义 在定义堆&#xff08;heap&#xff09;之前&#xff0c;先回顾一下完全二叉树的定义&#xff1a; 完全二叉树&#xff1a;除了最后一层的结点有可能没有达到最大值外&#xff0c;其它层的结点值都达到最大值&#xff0c;此外最后一层的叶子…

OpenCV_07 直方图:灰度直方图+直方图均衡化

1 灰度直方图 1.1 原理 直方图是对数据进行统计的一种方法&#xff0c;并且将统计值组织到一系列实现定义好的 bin 当中。其中&#xff0c; bin 为直方图中经常用到的一个概念&#xff0c;可以译为 “直条” 或 “组距”&#xff0c;其数值是从数据中计算出的特征统计量&…

OpenCV_08 边缘检测:Sobel检测算子+Laplacian算子+Canny边缘检测

1 原理 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。边缘的表现形式如下图所示&#xff1a; 图像边缘检测大幅度地减少了数据量&#xff0c;并且剔除了可以…

linux module_init

就像你写C程序需要包含C库的头文件那样&#xff0c;Linux内核编程也需要包含Kernel头文件&#xff0c;大多的Linux驱动程序需要包含下面三个头文件&#xff1a; #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> 其中&#xff…

数据结构之堆:堆的排序,Python代码实现——13

堆的排序&#xff0c;使用Python代码实现 上一节对堆进行了简单的实现&#xff0c;但是实现的堆只是部分有序&#xff08;父结点大于子结点&#xff0c;子结点之间无序&#xff09; 接下来我们实现对堆的所有元素进行升序排序 排序过程 实现步骤: 构造堆;得到堆顶元素,这个…

Anaconda 镜像源操作(查看配置删除)

一、Anaconda查看镜像配置 conda config --show channelschannels: https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/defaults二、添加清华大学镜像 conda config --add channels https://mirrors.tuna.t…

multi-line comment In file

写注释引起的编译问题&#xff1a; //s3c_gpio_cfgpin(pin, GTP_INT_CFG); \//s3c_gpio_cfgpin(pin, GTP_INT_CFG); \ 如果向上面那样写注释的话&#xff0c;就会引起问题&#xff0c;GCC&#xff0c;警告&#xff0c;有可能编译不通过&#xff0c;我遇到的问题就是编译不通过…

资治通鉴

本书于2017年1月15日开始看并于2017年1月17日看完&#xff0c;基本上只是culver看了一遍&#xff0c;只了解了故事而并没有分析&#xff0c;故事中每个人的思想和可能的想法&#xff0c;而且司马光对于宋朝以前的历史是截取了很多的片段记载的&#xff0c;并不能完整的了解历史…

【完美解决方案】module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘

一、问题描述 在学习openCV的过程中使用了SIFT的时候&#xff0c;发现书上的代码用不了&#xff0c;报错&#xff1a; module cv2.cv2 has no attribute xfeatures2d 二、问题原因 算法被申请了专利&#xff0c;将opencv版本退到3.4.2即可解决&#xff0c;必须小于等于Python…

数据结构之优先队列:优先队列的介绍与基础操作实现,Python代码实现——14

优先队列(Priority queue)的介绍 优先队列是计算机中一种抽象的数据结构类&#xff0c;它有着一个类似和队列或者堆的结构&#xff0c;但是其中每个元素额外有一个优先级别在一个优先队列中&#xff0c;一个高优先顺序的元素会先执行与低优先顺序的元素。在它的执行过程中&…

初识--百年孤独

转载于:https://www.cnblogs.com/xmyun/articles/6306290.html

OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测

1 模板匹配 1.1 原理 所谓的模板匹配&#xff0c;就是在给定的图片中查找和模板最相似的区域&#xff0c;该算法的输入包括模板和图片&#xff0c;整个任务的思路就是按照滑窗的思路不断的移动模板图片&#xff0c;计算其与图像中对应区域的匹配度&#xff0c;最终将匹配度最…