Android内核sysfs中switch类使用实例
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类使用实例的更多相关文章
- python中的类和实例
今天花了两个多小时后搜索相关博客看了看python中有关类和实例的介绍,差不多大概明白了. python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后, ...
- java_字段初始化的规律、静态方法中访问类的实例成员、查询创建对象的个数
字段初始化规律: 当执行如下代码时 class InitializeBlockClass{ public int field=100; { field=200; } public Initialize ...
- 在java的静态方法中访问类的实例成员
直接来看代码: public class Example { int x = 3;//类的实例变量,初始化值为3 static int y = 4;//类的静态变量,初始化值为4 public sta ...
- 在Android Native层中创建Java虚拟机实例
前言 Android应用中JNI代码,是作为本地方法运行的.而大部分情况下,这些JNI方法均需要传递Dalvik虚拟机实例作为第一个参数.例如,你需要用虚拟机实例来创建jstring和其他的Java对 ...
- Python面试题之Python中的类和实例
0x00 前言 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规范,从这个角度来看,在以后我们学习设计模式的时候, ...
- Java 中判断类和实例之间的关系
判断类与实例的关系有以下三种方式 1.instanceof关键字,用来判断对象是否是类的实例 (对象 => 类 ) 2.isAssignableFrom,用来判断类型间是否存在派生关系 (类 ...
- java如何在静态方法中访问类的实例成员
类的静态方法是不能直接访问实例的成员的,它只能访问同类的静态成员.访问实例的成员的话,可以参考一下这个方法,那就是把静态方法的参数设置为类的实例,这样通过参数传递的方式就可以访问实例的成员了,例子如下 ...
- 静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
package test.two; public class jingtaihanshu { int x = 3; static int y = 4; public static void Meth ...
- ES6中的类
前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...
随机推荐
- linux中安装Python3.x
首先了解几句Linux命令是必须的.例如 ls, vi, wget, rm, mv, cd, su, sudo, chmod, tar等等一些常用的语句命令是有必要知道它的用法的. 安装Python3 ...
- MarkdownPad2使用高亮插件
MarkdownPad 2有插入代码块的功能,但样式却不尽人意,但又不想换个编辑器,找了挺多相关资料,最后在MarkdownPad 2集成prettify高亮插件. 如下相关资料: [HTML] Pr ...
- Python之多进程篇
Process 创建子进程执行指定的函数 >>> from multiprocessing import Process,current_process >>> & ...
- SQL Server 基本操作之三种增加法
前言: 数据库操作避免不了对数据的操作,操作方法大同小异,万变不离其宗,今就写一下各种花式操作的根本增删改查四种操作,今天我们就来说一下增加操作的三种方法 正文: 增加操作是对数据库进行数据行的添加, ...
- linux环境
vim命令 http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html 安装YouCompleteMe 按照百度搜索的 ...
- Mac下Kali虚拟机与宿主机共享文件夹
宿主机: 1.创建文件夹.测试文件 ZhangSan-MacBook-Air:~ zhangsan$ mkdir kalishare && cd kalishare/ ZhangSan ...
- [拓扑排序]Ordering Tasks UVA - 10305
拓扑排序模版题型: John has n tasks to do.Unfortunately, the tasks are not independent and the execution of o ...
- EXTtreeGrid分页
这个东西整了两天,关键在于要两个stroe,之所以要两个因为treestroe在分页的时候接受不了返回的总行数,不过有个问题就是第二页分页后显示在没有根节点的行层级显示不是那木明显: -------- ...
- 安卓自定义控件(四)实现自定义Layout
本来我是不准备写这篇文章的,我实在想不出有什么样奇怪的理由,会去继承ViewGroup然后自定义一个布局,大概是我的项目经验还不够吧,想了好久,想到了这样一个需求: 需求 如图:在项目中经常有一个这样 ...
- css为超过一定宽度的文本内容自动加上省略号
当在html中某个地方添加文本内容的时候如果内容过长我们会希望他超过一定宽度之后,其余的可以被截断,后面补充为省略号: 实现方式: 1.设置css样式为文本不换行: 2.位包裹文本的标签指定宽度: 3 ...