在android中操作驱动时,很多时候都是使用的devfs文件系统来进行直接操作。即通过操作一个节点文件,直接实现对kernel层的数据操作。这个时候,就不得不提一个宏:DEVICE_ATTR。

DEVICE_ATTR宏定义在include/linux/device.h中,所以一般需要添加头文件:
#include <linux/device.h>

函数原型是:

#define DEVICE_ATTR(_name, _mode, _show, _store) \

struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store);

DEVICE_ATTR 宏声明有四个参数,分别是名称(_name)、权限位(_mode:一般使用S_IRUGO | S_IWUSR或者0664)、读函数(_show)、写函数(_store)。

其中读函数和写函数是读写功能函数的函数名。调用DEVICE_ATTR生成的对应的文件在/sys/devices/目录中对应的device下面。

代码主要实现过程如下:

//读函数的封装定义,自己根据需要添加相应的操作
static ssize_t test_czd_show(struct device *dev,struct device_attribute *attr, char *buf) {return sprintf(buf, "%s\n", "czd:test code");
}//写函数的封装定义,自己根据需要添加相应的操作
static ssize_t test_czd_store(struct device *dev,struct device_attribute *attr,const char *buf, size_t count) {return count;
}
//创建设备节点文件test_czd
static DEVICE_ATTR(test_czd, 0664, test_czd_show, test_czd_store);

当你想要实现的接口名字是test_czd的时候,需要实现结构体struct attribute *dev_attrs[],其中成员变量的名字必须是&dev_attr_test_czd.attr,即&dev_attr_xxxx.attr,xxxx表示节点名字,这里可以多添加几个节点,参照&dev_attr_test_czd.attr,当然,上面的DEVICE_ATTR也对应添加节点的_show和_store函数

static struct attribute *dev_attrs[] = {&dev_attr_test_czd.attr,NULL,};然后再封装:static struct attribute_group dev_attr_group = {.attrs = dev_attrs,};

然后在probe函数中调用:sysfs_create_group(&pdev->dev.kobj, &dev_attr_group);//创建接口sysfs,在kobj目录下创建一个属性集合,并显示集合中的属性文件。如果文件已存在,会报错。

在remove函数中调用:sysfs_remove_group(&pdev->dev.kobj, &dev_attr_group);//在remove中移除接口sysfs

原理:当我们将数据echo到接口中时,在上层实际上完成了一次write操作,对应到kernel调用了驱动中的store。同理,当我们cat一个接口时则会调用show。到这里,

只是简单的建立了android层到kernel的桥梁,真正实现对硬件操作的,还是在show和store中完成的。

如何使用:
通过adb连接,在shell下输入以下:

1、cd到对应目录,cd /sys/devices/platform/xxxx //xxxx表示对应的设备,然后cat test_czd 此时可以读出该接口的信息,也就是执行test_czd_show这个函数

2、cd到对应目录,cd /sys/devices/platform/xxxx //xxxx表示对应的设备,然后echo 01 > test_czd 这样就执行test_czd_store

当然_ATTR还有一些同类的宏函数,我们应该根据需要来使用不同的宏函数:

对设备的使用:DEVICE_ATTR

对驱动使用:DRIVER_ATTR

对总线使用:BUS_ATTR

对类别 (class) 使用:CLASS_ATTR

---------- 爱生活,爱安卓,爱Linux ----------

创建多个设备文件节点_使用DEVICE_ATTR实例分析相关推荐

  1. linux 创建 虚拟文件系统设备 文件节点 使用 proc_create 实例 简介

    proc虚拟文件系统也可以创建虚拟文件节点,实现用户空间与内核空间的交互.在驱动中创建节点,可以实现对硬件的控制.proc_create函数原型(在kernel-3.10/include/linux/ ...

  2. linux mdev 命令,linux设备驱动----利用mdev(udev)自动创建设备文件节点

    1.mdev的使用方法和原理: mdev是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合.其具有使用简单的特点.它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程 ...

  3. python xml 创建多个同名子节点_果粉有福了!5分钟学会用Python统计自己最爱听的音乐...

    作为一个最狂热的果粉,喜欢用苹果来播放自己最爱的音乐,随时让音乐充满自己的生活.想统计自己哪些音乐才是自己最爱吗?想知道哪些音乐是自己第一次听见就相伴终身吗?下面用Python来完成您的心愿. 下面的 ...

  4. 字符设备驱动高级篇4——设备类(自动创建和删除设备文件)相关代码分析

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 主要涉及class_create和device_create函数. 1.sys文件系统简介 (1)sys文件系统的 ...

  5. labview创建.netdll设置多个输出_手把手以实例教你学LabVIEW编程,条件结构编程方法...

    LabVIEW又称为G语言,简单易学.形象直观,采用图形化的编程方式,是专为测试.测量和控制应用而设计的系统工程软件. 在上篇文章(请参考:顺序结构编程)中已经讲了顺序结构的编程方法,下面通过具体例子 ...

  6. vb treeview 展开子节点_电路的一般分析法(01)—节点电压法及其算例

    这里是一则小广告: 关注作者请点击这里哦:zdr0 我的专栏里面不仅有学习笔记,也有一些科普文章,相信我的专栏不会让您失望哦-大家可以关注一下:数学及自然科学 记得点赞加收藏哦- 创作不易,请赞赏一下 ...

  7. python目录遍历_python文件操作之目录遍历实例分析

    本文实例讲述了python文件操作之目录遍历的方法.分享给大家供大家参考.具体分析如下: Python的os模块,包含了普遍的操作系统功能,这里主要学习与路径相关的函数: os.listdir(dir ...

  8. ansys经典界面分析工字钢_工字钢_ANSYS实例分析72道(含结果)

    DOC 格式 . 2.3 工字钢 -ANSYS 实例分析 ( 三维实体结构 ) 介绍 三维实体结构的有限元分析 . 一.问题描述 图 1 所示为一工字钢梁,两端均为固定端,其截面尺寸为 1.0 , 0 ...

  9. java 财务报表_财务报表开发实例分析:几个通用维度介绍与关键点

    财务报表分析 财务分析是以会计核算和报表资料及其他相关资料为依据,采用一系列专门的分析技术和方法,对企业等经济组织过去和现在有关筹资活动.投资活动.经营活动.分配活动的盈利能力.营运能力.偿债能力和增 ...

  10. linux 声卡设备文件夹,Linux ALSA声卡驱动之三:PCM设备的创建

    4. 设备文件节点的建立(dev/snd/pcmCxxDxxp.pcmCxxDxxc)本文引用地址:http://www.eepw.com.cn/article/201612/341593.htm 4 ...

最新文章

  1. XtraBackup
  2. JPA单向一对多更新问题
  3. 【调侃】IOC前世今生
  4. wsl遇到问题The repository ‘http://ppa.launchpad.net/ubuntu-desktop/ubuntu-make/ubuntu focal Release‘解决方法
  5. mysql 关联更新_MySQL 规范
  6. 简述python垃圾回收机制_python中的垃圾回收机制简述
  7. 当选51CTO技术论坛2010年度十大杰出版主感言
  8. vivi eboot wince 烧写
  9. 编程语言python怎么读-Python入门学习的计算机程序设计语言是怎样的?
  10. 简化前端开发的javascript工具类收集
  11. linux 蓝牙编程avrcp,bluetooth(蓝牙) AVRCP协议概念及代码流程解析
  12. 树莓派3连接ps4无线手柄
  13. 手机html像素,手机分辨率和网页中的PX是一回事吗?
  14. 【爬虫】如何通过爬虫,爬取百度图片?新手小白一看便会,内附超详细代码讲解
  15. Encoded password does not look like BCrypt 异常问题
  16. easyUI前端框架的tree(树)前台展示(树形菜单二)——java
  17. unity中3dUI或者模型始终面向摄像机,跟随摄像机视角旋转丨视角跟随丨固定视角
  18. chrome网页加载慢问题
  19. W ndows主进程已停止,windows主进程rundll32已停止工作的四种解决方法介绍
  20. CF 3B Lorry

热门文章

  1. JavaWeb开发中的乱码问题
  2. 无错版Vsftpd Mysql Pam设置虚拟用户要领
  3. DELPHI学习---简单类型
  4. 【学术分享】推荐一个免费下载外文文献的网站
  5. 【哈工大SCIR笔记】自然语言处理中的迁移学习(上)
  6. 【学术】SCI 写作常用句式总结一(Introduction篇)
  7. 【NLP论文推荐】 掌握实体关系抽取必读的文章
  8. 训练加速3倍!字节跳动推出业界首个NLP模型全流程加速引擎
  9. 机器学习基础算法23-XGBoost实践
  10. [论文翻译]Sequence to Sequence Learning with Neural Networks