DEVICE_ATTR】的更多相关文章

DEVICE_ATTR的使用 使用DEVICE_ATTR,可以在sys fs中添加“文件”,通过修改该文件内容,可以实现在运行过程中动态控制device的目的. 类似的还有DRIVER_ATTR,BUS_ATTR,CLASS_ATTR. 这几个东东的区别就是,DEVICE_ATTR对应的文件在/sys/devices/目录中对应的device下面. 而其他几个分别在driver,bus,class中对应的目录下. 这次主要介绍DEVICE_ATTR,其他几个类似. 在documentation/…
在 老罗的android例程里面有 static DEVICE_ATTR(val, S_IRUGO | S_IWUSR, hello_val_show, hello_val_store); /*读取设备属性val*/ static ssize_t hello_val_show(struct device* dev, struct device_attribute* attr, char* buf) { struct hello_android_dev* hdev = (struct hello_…
在内核中, 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 …
说道sysfs接口,就不得不提到函数宏 DEVICE_ATTR,原型是 #define DEVICE_ATTR(_name, _mode, _show, _store) \ struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) 函数宏DEVICE_ATTR内封装的是__ATTR(_name,_mode,_show,_stroe)方法 _show:表示的是读方法, _stroe表示的是写方法.…
1.前言 在Linux驱动程序编写中,使用DEVICE_ATTR宏,可以定义一个struct device_attribute设备属性,并使用sysfs的API函数,便可以在设备目录下创建出属性文件,当我们在驱动程序中实现了show和store函数后,便可以使用cat和echo命令对创建出来的设备属性文件进行读写,从而达到控制设备的功能. 2.宏DEVICE_ATTR定义 在讲解DEVICE_ATTR宏之前,先了解一些基本的结构体,首先是struct attribute结构体,其定义在inclu…
DEVICE_ATTR设置设备属性 为了在sysfs下生成可控节点,方便上层调用. sysfs是一个基于RAM的文件系统,它和Kobject一起,可以将Kernel的数据结构导出到用户空间,以文件目录结构的形式,提供对这些数据结构(以及数据结构的属性)的访问支持.Linux设备模型(4)_sysfs 原型: #define DEVICE_ATTR(_name, _mode, _show, _store) struct device_attribute dev_attr_##_name = __A…
sysfs是一个基于ramfs的文件系统,在2.6内核开始引入,用来导出内核对象(kernel object)的数据.属性到用户空间.与同样用于查看内核数据的proc不同,sysfs只关心具有层次结构的设备信息,比如系统中的总线,驱动以及已经加载的模块等,而诸如PID等信息还是使用proc来管理.本质上,sysfs文件的层次结构就是基于内核中kset与kobject逻辑结构来组织的.从驱动开发的角度,sysfs为我们提供了除了虚拟字符设备的read/write/ioctl和proc系统之外的另外…
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uImage做了稍許改動 概述 這篇博客以一個簡單的led燈實驗演示一下在含有設備樹.pinctrl時的gpio控制方法. 正文 我們以控制tiny4412上的LED1和LED2爲例,使用的GPIO是GPM4_0和GPM4_1對應的原理圖如下:…
device_driver和device必须依附总线.总线.驱动.设备最终会落实为sysfs中的一个目录.kobject对应sysfs的一个目录. attribute直接落实sysfs中的一个文件,如果attribute非常多,show/sore函数里的分支会很凌乱.解决这个问题,提供kobj——attribute: struct struct kobj_attribute{ struct attribute attr; ssize_t (*show)(struct kobject *kobj,…
前言:sis提供的驱动ic.基于rk3288的安卓系统.亲眼看到人家完成一次移植.很激动的记下一些东西..虽然我看不懂.其实现在的工作也不需要看懂.叫人协助就好,只需要知道有这个东西. 1linux下的usb的hid...... /* * HID support for Linux * * Copyright (c) 2015 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc * Copyright (c) 2015-2016 J…
转自:http://blog.csdn.net/zhenwenxian/article/details/4677604 浅析firmware完整生存和使用流程 1. http://blog.chinaunix.NET/u1/38994/showart_1288259.html request_firmware=>_request_firmware=>fw_setup_device=>fw_register_device=>static int fw_register_device(…
写之前,先看一张图: 上次说了LED驱动程序,Linux自身也携带了LED驱动,且是脱离平台的,即LED子系统.操作起来十分简单.但是它的实质却不是那么容易,研究了一个晚上,终于明白了其中一个文件的功能啦,机led-class.c文件.现在分享一下. 其实LED的驱动位于内核driver/leds目录下.核心文件有:led-class.c leds-s3c24xx.c.leds-gpio.c .先看其中一个文件 led-core.c文件. 一看就知道和类class脱不了关系.class有何作用呢…
很多时候我们需要从 HAL 层(Hardware Abstract Layer)传一个标志给 kernel 层.一般这种传递是不能直接通过定义全局变量来实现的. 此时可以通过读写文件来实现该标志. 譬如我们有这样一个需求,在录像过程中去掉持续对焦功能,而录像预览时开启持续对焦功能. 在 HAL 层中有开始录像和停止录像的接口. /trunk/ALPS.JB3.TDD.MP.V2_TD_xxx/mediatek/platform/mt6572/hardware/camera/hal/client/…
本文转载自:http://blog.chinaunix.net/uid-25014876-id-109733.html linux设备驱动归纳总结(八):1.总线.设备和驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这几天一直在看设备模型,内核的代码看得我越来越沮丧,特别是kboject.kset和ktype之间的关系.但是,设备模型的归纳我打算先跳过这几个重要结…
来自:http://www.hovercool.com/en/Class_create,_device_create,_device_create_file 开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点(包括ldd3中不少例子也是这样),实际上现在Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点. 内核中定义了struct class结构体,顾名思义,一个struct class结构体…
sysfs接口函数到建立_DEVICE_ATTR 最近在弄Sensor驱动,看过一个某厂家的成品驱动,里面实现的全都是sysfs接口,hal层利用sysfs生成的接口,对Sensor进行操作. 说道sysfs接口,就不得不提到函数宏 DEVICE_ATTR 原型是#define DEVICE_ATTR(_name, _mode, _show, _store) \ struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _sh…
Linux设备驱动程序学习(13) -Linux设备模型(总线.设备.驱动程序和类)[转] 文章的例子和实验使用<LDD3>所配的lddbus模块(稍作修改). 提示:在学习这部分内容是一定要分析所有介绍的源代码,知道他们与上一部分内容(kobject.kset.attribute等等)的关系,最好要分析一个实际的“flatform device”设备,不然会只学到表象,到后面会不知所云的. 总线 总线是处理器和一个或多个设备之间的通道,在设备模型中, 所有的设备都通过总线相连, 甚至是内部的…
============================      指引     ============================= 第一节是最基础的驱动程序: 第二节是/dev应用层接口的使用: 第三节是/sys应用层接口的使用: 第四节是对硬件的操作: 第五节是旧版platform_driver的简易说明: 第六节是设备树与新版platform的简易说明: ===========================   简易驱动程序   =========================…
本文将对Linux系统中的sysfs进行简单的分析,要分析sysfs就必须分析内核的driver-model(驱动模型),两者是紧密联系的.在分析过程中,本文将以platform总线和spi主控制器的platform驱动为例来进行讲解.其实,platform机制是基于driver-model的,通过本文,也会对platform机制有个简单的了解. 内核版本:2.6.30 1. What is sysfs? 个人理解:sysfs向用户空间展示了驱动设备的层次结构.我们都知道设备和对应的驱动都是由内…
sysfs - _The_ filesystem for exporting kernel objects.sysfs - 用于导出内核对象(kobject)的文件系统Patrick Mochel <mochel@osdl.org>翻译 : tekkamanninja <tekkamanninja@163.com>10 January 20032003年1月10日翻译时间:2007年12月29日What it is: 简介:~~~~~~~~~~~sysfs is a ram-bas…
1 EDK 大家知道我们在EDK中建立GPIO然后倒出到SDK中,在SDK中可以用C语言操作外设GPIO,但是这还是裸机程序,没有用到LINUX.本文将记录从FPGA  EDK生成GPIO一直到导入SDK中,建立.fsbl文件,creat BOOT.BIN,然后根据前面的文章(生成uboot.elf   以及生成zImage,.dtb文件).然后我们在linux中编写GPIO驱动程序,操作我们在FPGA中建立的GPIO.这个过程十分复杂任何一个方面都要搞几个月,但是站在巨人的肩膀上就是好. 首先…
1 驱动程序的编写   驱动是LINUX开发的必经之路,应用层对底层的调用经过了库与内核,内核下面才是驱动层,当你在应用程序执行对底层的控制时,驱动程序为你的控制提供了接口,或者说是策略. #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/device.h> #include <asm/io.h> #define DE…
之一:bus_type 总线是处理器和一个或多个设备之间的通道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟"platform"总线.可以通过ls -l /sys/bus看到系统加载的所有总线. drwxr-xr-x root     root              1970-01-01 00:02 platform drwxr-xr-x root     root              1970-01-01 00:02 spi drwxr-xr-x root   …
尽管LDD3中说对多数程序员掌握设备驱动模型不是必要的,但对于嵌入式Linux的底层程序员而言,对设备驱动模型的学习非常重要. Linux设备模型的目的:为内核建立一个统一的设备模型,从而又一个对系统结构的一般性抽象描述.换句话说,Linux设备模型提取了设备操作的共同属性,进行抽象,并将这部分共同的属性在内核中实现,而为需要新添加设备或驱动提供一般性的统一接口,这使得驱动程序的开发变得更简单了,而程序员只需要去学习接口就行了. 在正式进入设备驱动模型的学习之前,有必要把documentatio…
开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点(包括ldd3中不少例子也是这样),实际上现在Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点. 内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建 好了这个类,再调用devic…
首先需要了解sys节点和linux驱动编程的知识,在linux内核<linux/>下有着对应的实现.本例实现创建sys节点,外围程序通过input子系统控制鼠标位置. 第一步编写驱动代码,创建sys节点: #include <linux/module.h> #include <linux/platform_device.h> #include <linux/slab.h> #include <linux/input.h> #include <…
  Linux设备模型——设备驱动模型和sysfs文件系统解读 内核版本:2.6.30 1. What is sysfs? 个人理解:sysfs向用户空间展示了驱动设备的层次结构.我们都知道设备和对应的驱动都是由内核管理的,这些对于用户空间是不可见的.现在通过sysfs,可以在用户空间直观的了解设备驱动的层次结构. 我们来看看sysfs的文件结构: [root@yj423 /sys]#ls block     class     devices   fs        module bus   …
这里,我们不会为真实的硬件设备编写内核驱动程序.为了方便描述为Android系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4字节的寄存器,它可读可写.想起我们第一次学习程序语言时,都喜欢用“Hello, World”作为例子,这里,我们就把这个虚拟的设备命名为“hello”,而这个内核驱动程序也命名为hello驱动程序.其实,Android内核驱动程序和一般Linux内核驱动程序的编写方法是一样的,都是以Linux模块的形式实现的,具体可参考前面Android学习启动篇…
linux发展第一阶段 01devfs(linux2.6之前) 02udev(用户空间) 03sysfs(linux2.6之后,描述设备属性) linux发展第二阶段 01sysfs+udev(udev用户空间) 02devfs(内核空间) 03proc:在用户态检查内核状态的机制 各个内容简介: 01 sysfs特性: 同比devfs而言:linux2.6之后 作用:表示设备结构,属性 在驱动中用到函数: /*------------------------------------------…
重力传感器是根据压电效应的原理来工作的.   所谓的压电效应就是 “对于不存在对称中心的异极晶体加在晶体上的外力除了使晶体发生形变以外,还将改变晶体的极化状态,在晶体内部建立电场,这种由于机械力作用使介质发生极化的现象称为正压电效应 ”.   重力传感器就是利用了其内部的由于加速度造成的晶体变形这个特性.由于这个变形会产生电压,只要计算出产生电压和所施加的加速度之间的关系,就可以将加速度转化成电压输出.当然,还有很多其它方法来制作加速度传感器,比如电容效应,热气泡效应,光效应,但是其最基本的原理…