DEVICE_ATTR实例分析
在内核中, sysfs 属性一般是由 __ATTR 系列的宏来声明的,如对设备的使用 DEVICE_ATTR ,对总线使用 BUS_ATTR ,对驱动使用 DRIVER_ATTR ,对类别(class)使用 CLASS_ATTR, 这四个高级的宏来自于 <include/linux/device.h>, 都是以更低层的来自
<include/linux/sysfs.h> 中的 __ATTR/__ATRR_RO 宏实现。
在adb shell 终端查看到接口,当我们将数据 echo 到接口中时,在上层实际上完成了一次 write 操作,对应到 kernel ,调用了驱动中的 “store”。同理,当我们cat 一个 接口时则会调用 “show” 。到这里,只是简单的建立了 android 层到 kernel 的桥梁,真正实现对硬件操作的,还是在 "show" 和 "store" 中完成的。
实现办法,例一:
#include <linux/platform_device.h>
1)
static ssize_t rohm_proximity_show_debug(struct device* cd,struct device_attribute *attr, char* buf)
{
ssize_t ret = 0;
sprintf(buf, "ROHM Debug %d\n",debug_level);//将格式数据写到缓冲里面,此处为buf
ret = strlen(buf) + 1;
return ret;
}
static ssize_t rohm_proximity_store_debug(struct device* cd, struct device_attribute *attr,
const char* buf, size_t len)
{
unsigned long on_off = simple_strtoul(buf, NULL, 10);//,10,16 进制数字 ,返回值是解析的数字,endp 指向字符串起始处,base
:进制
debug_level = on_off;
printk("%s: debug_level=%d\n",__func__, debug_level);
return len;
}
2)
static DEVICE_ATTR(debug, S_IRUGO | S_IWUSR, rohm_proximity_show_debug, rohm_proximity_store_debug);
3)
static int rohm_proximity_create_sysfs(struct platform_device *client)
{
struct device *dev = &(client->dev);
int err = 0;
PS_DBG("%s\n", __func__);
if ((err = device_create_file(dev, &dev_attr_control)))
goto err_out;
if ((err = device_create_file(dev, &dev_attr_debug)))
goto err_out;
return 0;
err_out:
return err;
}
4)
static int rohm_proximity_probe(struct platform_device *pdev)
{
rohm_proximity_create_sysfs(pdev);
}
实现办法,例二:
1)
static ssize_t mc32x0_threshold_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
#ifdef MC32X0_DEBUG
printk("mcube %s\n",__FUNCTION__);
#endif
return sprintf(buf, "%d\n", mc32x0_get_threshold(dev));
}
static ssize_t mc32x0_threshold_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
unsigned long threshold;
#ifdef MC32X0_DEBUG
printk("mcube %s\n",__FUNCTION__);
#endif
threshold = simple_strtoul(buf, NULL,10);
if (threshold >= 0 && threshold <= ABSMAX_8G) {
mc32x0_set_threshold(dev, threshold);
}
return count;
}
2)
static DEVICE_ATTR(threshold, 0666, mc32x0_threshold_show, mc32x0_threshold_store);
static struct attribute *mc32x0_attributes[] = {
// &dev_attr_enable.attr,
// &dev_attr_delay.attr,
// &dev_attr_position.attr,
&dev_attr_threshold.attr,
};
3)
static struct attribute_group mc32x0_attribute_group = {
.attrs = mc32x0_attributes
};
4)
static int mc32x0_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
err = sysfs_create_group(&mc32x0->input->dev.kobj, &mc32x0_attribute_group);//.probe中生成
if (err < 0) {
goto error_2;
}
//sysfs_remove_group(&mc32x0->input->dev.kobj, &mc32x0_attribute_group);//.remove中移除
}
adb下输入:(以下节点为DEVICE_ATTR(debug,,)同为,位置在/sys/devices/platform/rohm_proximity/,在要/目录下find . -name "debug"查找)
#cat debug //此端口下会输出"ROHM Debug XX",XX为此处值。注:另一adb端口cat /proc/kmsg不会显示此字符
#echo 01>debug //在另外一个adb端口下cat /proc/kmsg会显示"rohm_proximity_store_debug: debug_level=1"。
注:echo 01>debug值为1,echo 1>debug值为0,echo 0>debug无效.
此时已给此端口写1,再#cat debug,端口下会输出"ROHM Debug 1"
参考文档:http://blog.chinaunix.net/uid-26413351-id-3180609.html
DEVICE_ATTR实例分析的更多相关文章
- RPC原理及RPC实例分析
在学校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 1 2 3 4 5 6 public class ...
- java基础学习05(面向对象基础01--类实例分析)
面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...
- (转)实例分析:MySQL优化经验
[IT专家网独家]同时在线访问量继续增大,对于1G内存的服务器明显感觉到吃力,严重时甚至每天都会死机,或者时不时的服务器卡一下,这个问题曾经困扰了我半个多月.MySQL使用是很具伸缩性的算法,因此你通 ...
- sql注入实例分析
什么是SQL注入攻击?引用百度百科的解释: sql注入_百度百科: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具 ...
- 实例分析ELF文件静态链接
参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第4章 静态链接 开发平台: [thm@tanghuimin static_link]$ uname ...
- 用实例分析H264 RTP payload
用实例分析H264 RTP payload H264的RTP中有三种不同的基本负载(Single NAL,Non-interleaved,Interleaved) 应用程序可以使用第一个字节来识别. ...
- nodejs的模块系统(实例分析exprots和module.exprots)
前言:工欲善其事,必先利其器.模块系统是nodejs组织管理代码的利器也是调用第三方代码的途径,本文将详细讲解nodejs的模块系统.在文章最后实例分析一下exprots和module.exprots ...
- Android Touch事件原理加实例分析
Android中有各种各样的事件,以响应用户的操作.这些事件可以分为按键事件和触屏事件.而Touch事件是触屏事件的基础事件,在进行Android开发时经常会用到,所以非常有必要深入理解它的原理机制. ...
- Camera图像处理原理及实例分析-重要图像概念
Camera图像处理原理及实例分析 作者:刘旭晖 colorant@163.com 转载请注明出处 BLOG:http://blog.csdn.net/colorant/ 主页:http://rg ...
随机推荐
- defaultdict的威力
>>> from collections import defaultdict >>> s='mmississippi' >>> d=defaul ...
- Java异常处理-----自定义异常
自定义异常 问题:现实中会出现新的病,就需要新的描述. 分析: java的面向对象思想将程序中出现的特有问题进行封装. 案例: 定义功能模拟凌波登录.(例如:lb(String ip))需要接收ip地 ...
- linux下的环境变量
环境变量有时候要查找,但是经常忘记有哪些文件,现在做一个总结: /etc/profile 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/e ...
- 看见的力量 – (I) 解题的思维
本文转自台湾李智桦老师的博客,原文地址 这篇文章:已经梗了我三个多星期了.这期间飞了二次大陆做演讲.往返几个大城市做教授敏捷开发运用在精实创业的课程.教材内容都是简体的,它们始终没有机会在国内用上,心 ...
- 4.4、Android Studio在命令行运行Gradle
默认情况下,在你的Gradle构建设置中有两种构建类型:一种是为了调试你的应用,debug类型:一种是构建最终的发布版本,release类型.无论你使用哪种模式,你的app必须在安装到设备或虚拟机中之 ...
- (一二七)NSURLSession的基本用法 下载与数据获取
简介 NSURLSession是苹果官方提供的一系列网络接口库,使用他们可以轻松实现下载和数据获取等任务.在上一篇文章中,我们介绍了使用NSURLConnection下载文件和断点续传的功能,实现起来 ...
- Servlet之文件上传
上传表单中的注意事项: 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法 表单 enctype 属性应该设置为multipart/form-data 下面的实例是借助于com ...
- Cocos2D添加精灵纹理滤镜实现图像复古效果的转换
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 大家知道Cocos2d本身是一个非常强悍的2d游戏引擎,其中自 ...
- Android软件设置自动检查更新
如果让我推荐功能强大的第三方集成开发包,我一定会推荐友盟,有着强大的软件统计,分析功能(原谅我,我不是打广告). 这一篇介绍友盟的自动更新功能,但是首先你得拥有友盟. 友盟的集成步骤 1.1 导入SD ...
- C++对象模型的那些事儿之四:拷贝构造函数
前言 对于一个没有实例化的空类,编译器不会给它默认生成任何函数,当实例化一个空类后,编译器会根据需要生成相应的函数.这类函数包括一下几个: 构造函数 拷贝构造函数 析构函数 赋值运算符 在上一篇博文C ...