Android内核sysfs中switch类使用实例

  最终在这个周末,能够干点自己想要干的事了。

由我这个二流的内核驱动开发人员来解析一下sysfs中的switch类。先猜測一下来历,在普通的嵌入式Linux平台上。通常是各自为战,全然不须要遵循什么规则。在Android中Google定义了一些潜移默化的规范,你能够全然不遵守。

可是依照规则总归是好的。

先从直观的来看一下/sys/class/switch类中都有些什么吧。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

首先能够看到实质是链接到了/sys/device/virtual/switch/文件夹,来看真面目:

这里包括了4个bl是背光;h2w是耳机;hdmi是hdmi;mic是麦克风 基本都属于外接式的设备,当然也能够不是比方bl。每一个都包括了name/power/state/subsystem/uevent。

都能够顾名思义。当中state通常是驱动中提供给用户空间的状态值。

  那就以LDD3中的最简单的Hello World样例来做一个switch样例:

加入不足20行代码就已经实现了最简的switch了,效果例如以下所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2FuZ2Vhcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

驱动中能够直接调用switch_set_state来设置不同的状态值。相应地,应用层读取这个就能够实现状态获取。

本文没有具体去说明switch实现细节,以有用的角度给出了一个完整的样例。

当然假设对实现细节须要有了解的,能够看《switch_class》《android switch模块》。对于“驱动”想要告知用户空间状态的实现就能够採用这个了。

顺便提一个编译LDD3中驱动样例的小技巧: make KERNELDIR=~/4.2.2_r1/kernel/后边这个是Android内核源代码路径。当然路径中的kernel是要是编译过的。

什么都不须要更改就能够顺利编译了。

附 完整简单样例代码:

/*
* $Id: hello.c,v 1.5 2004/10/26 03:32:21 corbet Exp $
*/
#include <linux/init.h>
#include <linux/module.h>
#include <linux/switch.h>
MODULE_LICENSE("Dual BSD/GPL"); struct switch_dev sdev; static int hello_switch()
{
int state, ret;
sdev.name = "hello";
ret = switch_dev_register(&sdev);
if (ret < 0)
return ret;
state = 0;
switch_set_state(&sdev,state);
return 0;
} static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
if(hello_switch())
{
printk(KERN_ERR "failed to create hello switch\n");
return -ENODEV;
}
return 0;
} static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
} module_init(hello_init);
module_exit(hello_exit);

Android内核sysfs中switch类使用实例的更多相关文章

  1. python中的类和实例

    今天花了两个多小时后搜索相关博客看了看python中有关类和实例的介绍,差不多大概明白了. python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后, ...

  2. java_字段初始化的规律、静态方法中访问类的实例成员、查询创建对象的个数

    字段初始化规律: 当执行如下代码时 class InitializeBlockClass{ public int field=100; { field=200; } public Initialize ...

  3. 在java的静态方法中访问类的实例成员

    直接来看代码: public class Example { int x = 3;//类的实例变量,初始化值为3 static int y = 4;//类的静态变量,初始化值为4 public sta ...

  4. 在Android Native层中创建Java虚拟机实例

    前言 Android应用中JNI代码,是作为本地方法运行的.而大部分情况下,这些JNI方法均需要传递Dalvik虚拟机实例作为第一个参数.例如,你需要用虚拟机实例来创建jstring和其他的Java对 ...

  5. Python面试题之Python中的类和实例

    0x00 前言 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规范,从这个角度来看,在以后我们学习设计模式的时候, ...

  6. Java 中判断类和实例之间的关系

    判断类与实例的关系有以下三种方式 1.instanceof关键字,用来判断对象是否是类的实例 (对象 => 类 )   2.isAssignableFrom,用来判断类型间是否存在派生关系 (类 ...

  7. java如何在静态方法中访问类的实例成员

    类的静态方法是不能直接访问实例的成员的,它只能访问同类的静态成员.访问实例的成员的话,可以参考一下这个方法,那就是把静态方法的参数设置为类的实例,这样通过参数传递的方式就可以访问实例的成员了,例子如下 ...

  8. 静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?

    package test.two; public class jingtaihanshu { int x = 3; static int  y = 4; public static void Meth ...

  9. ES6中的类

    前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...

随机推荐

  1. ABP框架个人开发实战(1)_环境搭建

    前言 之前关注ABP框架有一阵子了,一直没有潜下心来实际研究一下.最近想自己建站,以后有自己的功能开发项目,可以在自己的站点上开发,并一步步的完善,所以找个比较好用的框架迫在眉睫,选来选去,决定用AB ...

  2. javaMybatis映射属性,高级映射

    映射文件的sql属性: id:标识符(一般都是dao层方法名) resultType:sql返回类型 resultMap:放回的映射类型 parameterType:参数类型 useGenerated ...

  3. express的学习,与使用

    最近在学习vue的一个实战项目,碰到一个express,当时很萌,就随便看了看................ expres是基于node 的一个web框架, 首先可以找到它的官网照着学习 这里只讲一 ...

  4. HttpClient发送Post请求,get请求

    // 创建默认的httpclient实例 CloseableHttpClient httpclient = getHttpClient(); CloseableHttpResponse respons ...

  5. 利用C#来做ASP.NET的登陆页面

    一.新建一个数据库 新建一个access数据user.mdb. 新建一个user表,添加:UserId(文本类型)及Password(文本类型)两个字段.二.新建一个default.aspx文件. 在 ...

  6. org.springframework.web.filter.DelegatingFilterProxy的作用

    一.类结构 DelegatingFilterProxy类继承GenericFilterBean,间接实现了Filter,故而该类属于一个过滤器.那么就会有实现Filter中init.doFilter. ...

  7. [转载] Netty

    转载自http://lippeng.iteye.com/blog/1907279 Netty是什么? 本质:JBoss做的一个Jar包 目的:快速开发高性能.高可靠性的网络服务器和客户端程序 优点:提 ...

  8. Git文件状态描述

    检查当前文件状态 [root@typhoeus79 ice_test_m git_test]# git status # On branch master nothing to commit (wor ...

  9. Python字符串之StringIO和struct

    StringIO: 提供类文件接口的字符串缓冲区,可选用性能更好的cStringIO版本: http://docs.python.org/2.7/library/stringio.html#modul ...

  10. 使用MongoVUE

    mongoDB版本号为3.4.10 在终端操作一顿后想看看它在可视化工具里面什么样子,于是就找了一个可视化工具,MongoVUE这个看起来还不错,因为我是windows系统所以就没有太多的挑选选择.在 ...