一、相关文件:

/drivers/switch/switch_gpio.c

/drivers/switch/switch_class.c

二、节点创建流程:

1、在/sys/class/目录下创建“switch”类,创建完成后出现/sys/class/switch,具体实现如下:

struct class *switch_class;

switch_class = class_create(THIS_MODULE, "switch");

2、在/sys/class/switch目录下创建某个具体设备(比如“h2w”),创建完成后出现/sys/class/switch/h2w,具体实现如下:

struct switch_dev *sdev;

sdev->dev = device_create(switch_class, NULL,

MKDEV(0, sdev->index), NULL, sdev->name); // 其中sdev->name赋值为“h2w”

3、在/sys/class/switch/h2w目录下创建设备的属性文件(比如“name”和“state”),创建完成后出现/sys/class/switch/h2w/name和/sys/class/switch/h2w/state,具体实现如下:

static DEVICE_ATTR(state, S_IRUGO | S_IWUSR, state_show, NULL); // state_show实现对state属性文件读操作

static DEVICE_ATTR(name, S_IRUGO | S_IWUSR, name_show, NULL);//name_show实现对name属性文件读操作

int ret;

ret = device_create_file(sdev->dev, &dev_attr_name);

ret = device_create_file(sdev->dev, &dev_attr_state);

三、节点创建关键函数:

1、class_create

该函数用于创建一个class;

2、device_create

/**

* device_create - 创建一个设备并将它注册到sysfs文件系统里

* @class: 指向class_create函数创建的class

* @parent: pointer to the parent struct device of this new device, if any

* @devt: the dev_t for the char device to be added

* @drvdata: the data to be added to the device for callbacks

* @fmt: 设备名称

*/

struct device *device_create(struct class *class, struct device *parent,

dev_t devt, void *drvdata, const char *fmt, ...);

3、device_create_file

/**  * device_create_file - 创建设备的属性文件  * @dev: 指定具体为哪个设备创建属性文件  * @attr: 该设备对应的属性描述  */ int device_create_file(struct device *dev,       const struct device_attribute *attr);

android hdmi拔插广播,Android drivers/switch驱动详解(用于通过GPIO状态检测耳机、HDMI等的插拔状态)...相关推荐

  1. Android 基础知识4-3.6 ToggleButton(开关按钮)Switch(开关)详解

    一.ToggleButton(开关按钮) 1.1.简介 ToggleButton 类似开关有开和关两种状态,不同的状态下可以有不同的文本.         public class ToggleBut ...

  2. android系统休眠发广播,Android - BroadcastReceiver

    BroadcastReceiver BroadcastReceiver,广播接收者,用来接收系统和应用的广播,并做出相应的处理,如电量过低时提示用户充电等: BroadcastReceiver 是 A ...

  3. Android 系统(214)---Android 7.1.1时间更新NITZ和NTP详解

    Android 7.1.1时间更新NITZ和NTP详解 1.NTP和NITZ简介 最近在项目中遇到手机首次插上移动卡时不能自动更新时间的问题,就特意跟了下Android系统中手机时间更新有两种方式NT ...

  4. Android M新特性Doze and App Standby模式详解

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/52312122 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  5. Android异步处理三:Handler+Looper+MessageQueue深入详解

    本博文地址:http://blog.csdn.net/mylzc/article/details/6771331 转载请注明出处 Android异步处理系列文章索引 Android异步处理一:使用Th ...

  6. Android VCard联系人备份恢复(导入/导出)详解

    原文地址为: Android VCard联系人备份恢复(导入/导出)详解 首先我们简单的看下在Android中联系人的存储结构. 工作环境:android 2.3.3 联系人的主要数据存放在raw_c ...

  7. Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash

    Android基础入门教程--8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash 标签(空格分隔): Android基础入门教程 本节引言: 在Canva ...

  8. Android基础入门教程——2.5.3 AlertDialog(对话框)详解

    Android基础入门教程--2.5.3 AlertDialog(对话框)详解 标签(空格分隔): Android基础入门教程 本节引言: 本节继续给大家带来是显示提示信息的第三个控件AlertDia ...

  9. android setinputtype光标,Android屏蔽软键盘并且显示光标的实例详解

    Android屏蔽软键盘并且显示光标的实例详解 如果是android4.0以下,那么 editText.setInputType(InputType.TYPE_NULL); 就够了,android4. ...

最新文章

  1. 【神经网络】(11) 轻量化网络MobileNetV1代码复现、解析,附Tensorflow完整代码
  2. 深入理解Eureka之源码解析
  3. 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)
  4. 13.PHP中循环结构之foreach循环语句(任务一)
  5. 数据库怎么看是什么编码_离婚了怎么发朋友圈?看你喜欢什么类型
  6. 【Divided Two】cpp
  7. 常见makefile写法
  8. LDA话题模型与推荐系统
  9. 第十篇 requests模块
  10. 中国裁判文书网爬虫分析(2019年7月版)
  11. 今天我们来聊聊递归喝汽水问题
  12. 终于交作业了,View Design 的设计资源上线啦,免费哦
  13. 规格说明书:吉林市一日游
  14. emule最新服务器地址,emule 国内服务器(最新emule服务器)
  15. 分享137个ASP源码,总有一款适合您
  16. 阿里云ECS云服务器资源购买决策
  17. CString 使用详解
  18. go concurrent map writes map并发问题
  19. 字符串的几种常见的反转
  20. 安装【银河麒麟V10】linux系统

热门文章

  1. 如何花钱做引流?如何推广付费引流?付费引流有哪些?
  2. 网站导航应该怎么设计?
  3. 图像分割之(四)OpenCV的GrabCut函数使用和源码解读
  4. opencv分别显示彩色图片各通道图片
  5. SpringMVC 学谈 (第四章)
  6. 基于深度搜索的树路径求解_基于深度学习的自动验证码求解器
  7. Redux的工作流程
  8. ppm调制matlab程序,求助:谁能帮我编写一个4ppm的解调程序 谢谢了
  9. 耳机基本知识及评判指标
  10. 禾赛40M如何成功在rviz中显示点云数据