zoukankan      html  css  js  c++  java
  • switch_class

    1. switch_class简介

      实现:drivers/switch/switch_class.c
      典型应用:drivers/switch/switch_gpio.c

    switch_class用于在/sys/class/switch提供name和state两个属性文件,在state改变时通过uevent上报KONJECT_CHANGE事件来通知应用程序state的状态更新了。

    通常用于简单的GPIO类事件的驱动何通知,有点类似于输入子系统(但是需要uevent的支持)。

    使用例子:如s5p_tvout_hpd.c中用于监听HDMI的hpd引脚并向App上报state改变的事件。

    2.驱动的使用方法

    (1) 定义核心结构:
    struct switch_dev sdev;
    
    (2) 注册
    sdev.name = "XXX";
    /*
     * 这两个函数回调可设可不设,cat name和state文件时若这两个
     * 函数存在则会分别调用若没有就使用默认的打印函数,也就是
     * 说作用就是控制打印格式的等。
     */
    sdev.print_state
    sdev.print_name
    switch_dev_register(struct switch_dev *sdev);
    
    (3)设置state的状态
    /*
     * 当驱动中检测到state的状态改变时,使用下面函数将
     * state设置到sdev->state中,这个函数里面会向App上
     * 报一个uevent事件。
     */
    switch_set_state(struct switch_dev *sdev, int state);
    
    根据体的使用见源码。

    4. App的使用方法

      当监听到对应的uevent事件后去读取/sys/class/switch/$(name)/state文件获取新的状态然后进行对应的处理。

    5.总结

    (1) kobject_uevent_env(&(hpd_misc_device.this_device->kobj), KOBJ_CHANGE, envp); 可以使用这个上报更多的项。

    (2) 有多种方法向用户空间上报数据:sysfs、procfs、debugfs、设备节点、uevent。

    用户空间配置内核USB:configfs

    可以使用uevent+sysfs属性文件的形式向App提供数据,其中uevent提供阻塞式监听机制,sysfs提供数据,此时不需要/dev下的设备节点。

    (3) 设备节点创建过程

    switch_dev_register(struct switch_dev *sdev)
        switch_class = class_create(THIS_MODULE, "switch");
        /*device_create并不会触发/dev/下的设备节点的创建*/
        sdev->dev = device_create(switch_class, NULL, MKDEV(0, sdev->index), NULL, sdev->name);
        
        device_create_file(sdev->dev, &dev_attr_state);
        device_create_file(sdev->dev, &dev_attr_name);

    注意:
      device_create并不会触发/dev/下的设备节点的创建,而是在/sys/class/switch下创建一个设备,可以根据这个设备在/sysfs目录下添加属性文件。在/dev/下创建设备节点的操作应该是device_add()函数触发的,因为其内部使用kobject_uevent_add("ADD");向用户空间发送数据,ueventd根据这个信号来创建设备节点。

    (4) led_class类也是只有/sys属性文件,没有/dev/下的设备节点。

  • 相关阅读:
    args4 1.4.12 编写一个程序,有序打印给定的两个有序数组(含有N 个int 值)中的所有公共元素,程序在最坏情况下所需的运行时间应该和N 成正比。
    优化斐波那契数列递归的计算
    Java中BO、DAO、DO、DTO、PO、POJO、VO的概念
    并查集算法Union-Find的思想、实现以及应用
    计算机网络中一些比较重要的概念
    [转]架构初探之架构的几种设计模式
    常见排序算法的思想以及稳定性分析
    数据库基础知识整理与复习总结
    Java面试之Java集合相关问题答案口述整理
    Java面试之Java基础问题答案口述整理
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10899050.html
Copyright © 2011-2022 走看看