android底层驱动学习之调试驱动DEVICE_ATTR的原理及用法
来源:互联网 发布:买吉他知乎 编辑:程序博客网 时间:2024/06/07 07:22
1.首先来看下DEVICE_ATTR的 定义
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
_name:名称,也就是将在sys fs中生成的文件名称。
_mode:上述文件的访问权限,与普通文件相同,UGO的格式。
_show:显示函数,cat该文件时,此函数被调用。
_store:写函数,echo内容到该文件时,此函数被调用。
当然_ATTR不是独生子女,他还有一系列的姊妹__ATTR_RO宏只有读方法,__ATTR_NULL等等
如对设备的使用 DEVICE_ATTR
对驱动使用 DRIVER_ATTR
对总线使用 BUS_ATTR
对类别 (class) 使用 CLASS_ATTR
这四个高级的宏来自于<include/linux/device.h>
DEVICE_ATTR 宏声明有四个参数,分别是名称、权限位、读函数、写函数。其中读函数和写函数是读写功能函数的函数名,也就是我们要实现的。
2.举例说明:
如果我们要实现
static DEVICE_ATTR(ftstpfwver, S_IRUGO|S_IWUSR, fts_tpfwver_show, fts_tpfwver_store);----------①
那就应该这样定义:
static struct attribute *fts_attributes[] = {-----------------------------------------------------②
&dev_attr_ftstpfwver.attr,
};
绿色的必须一样,前面要加上dev_attr_这个,规定的,不要问为什么。
然后还要:
static struct attribute_group fts_attribute_group = {-----------------------------------------③
.attrs = fts_attributes
};
再利用sysfs_create_group(&client->dev.kobj, &fts_attribute_group)---------------------------------------④
创建接口
紫色部分也应该一样。
通过以上①②③④步骤就完成了,可以在adb shell 终端通过 echo和cat查看到接口的信息了。
原理:当我们将数据 echo 到接口中时,在上层实际上完成了一次 write 操作,对应到 kernel ,调用了驱动中的 “store”。同理,当我们cat 一个 接口时则会调用 “show” 。到这里,只是简单的建立了 android 层到 kernel 的桥梁,真正实现对硬件操作的,还是在 "show" 和 "store" 中完成的。用过proc文件系统的就知道,这个就和proc中的write和read一样的,以我的理解:proc有点老了,以后肯定会大量使用attribute,proc好比是Windows XP,attribute就像是Windows Seven。
3.那应该怎样去使用吗?
通过adb连接,在shell下输入以下:
1.cd 到对应目录,我这上面是 cd /sys/devices/platform/fts_ts
2.然后cat ftstpfwver此时可以读出该接口的信息,也就是执行fts_tpfwver_show这个函数
3.echo 01>ftstpfwver 这样就执行fts_tpfwver_store
- android底层驱动学习之调试驱动DEVICE_ATTR的原理及用法
- android底层驱动学习之I2C概述及工作原理(一)
- android底层驱动学习之如何通过debugfs创建文件的方式来调试内核信息
- android底层驱动学习之DebugFS的用法,以及对file_operations的进一步理解
- android底层驱动学习之设备树驱动及设备匹配过程
- android底层驱动学习之 module_init的内核调用顺序
- android底层驱动学习之linux输入子系统的理解
- android底层驱动学习之log的输出
- 驱动调试之printk的原理
- linux驱动调试之printk的原理
- linxu 驱动 DEVICE_ATTR和device_create_file 学习实例
- android底层驱动学习之focaltech触屏实例理解
- android底层驱动学习之工作队列work_queue相关参数
- android底层驱动学习之java基本语法的学习(一)
- android底层驱动学习之java基本语法的学习(二)
- android底层驱动学习之从应用程序如何到底层driver的调用
- android底层驱动学习之日志信息、printk的个人理解
- android底层驱动学习之内核信息的输出以及控制方式
- 音乐播放器
- spark 相关使用
- Android 混淆代码
- App中Web缓存机制
- 数据集成:Flume和Sqoop
- android底层驱动学习之调试驱动DEVICE_ATTR的原理及用法
- cocopods借鉴别人的代码以及自己应用总结
- SQL COUNT() 函数
- ffmpeg支持的codec
- Soap UI:设置
- 百度天气预报接口介绍
- 【Linux】管理在线用户
- Java String.split()用法小结
- SQL MAX() 函数