收藏 分享(赏)

linux电源驱动解析.docx

上传人:scg750829 文档编号:7127165 上传时间:2019-05-06 格式:DOCX 页数:6 大小:30.60KB
下载 相关 举报
linux电源驱动解析.docx_第1页
第1页 / 共6页
linux电源驱动解析.docx_第2页
第2页 / 共6页
linux电源驱动解析.docx_第3页
第3页 / 共6页
linux电源驱动解析.docx_第4页
第4页 / 共6页
linux电源驱动解析.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、Comment U1: 类型定义 ,属性值定义等等。Comment U2: 核心文件,向内核提供驱动注册接口和其他操作函数。Comment U3: 定义属性文件、属性的读写操作接口等等1. 电源1.1.Linux电源类(Linux power supply class)参考power_supply.h (includelinux)、power_supply_core.c (driverspower)、power_supply_sysfs.c (driverspower)、power_supply_class.txt (Documentationpower)1.1.1. 概述电源类提供了电池、U

2、PS、AD 、DC等电源在用 户空间的接口。该类定义了一些核心属性,这些属性可以通过 sysfs或者 uenvt接口访问。每种属性都有特殊的含义和单位,由于这些属性普遍适用于各种电源,但是 实际应用中有些电源可能无法提供某些属性,所以这些属性驱动可以不提供。电源类是可扩展的,允许驱动程序定义其自身需要的属性,抛弃不需要的属性。它还集成了 LED框架,用来表示 电池充电/完全充电状态和 AC / USB电 源线上状态。Comment U4: Char类型的数组Comment U5: 驱动中必 须实现该函数Comment U6: 属性Comment U7: 返回值Comment U8: 该函数可不

3、 实现,因为默认的属性值为只读的Comment U9: 如果实现 了该函数并且将某种属性设置为可写的,那么必须实现set_property 函数,否则用户空 间写该属性值会出错!1.1.2. 属性定义于内核文件:power_supply_sysfs.c (driverspower)1.2.linux驱动1.2.1. 重要数据结构和函数1.2.1.1. struct power_supply定义于 power_supply.h (includelinux)对应着电源实例。struct power_supply const char *name;/名称,对应于/sys/class/power_su

4、pply/xxx 文件夹enum power_supply_type type;/电源类型, 标示该电源为电池、主 电源、USB 电源等enum power_supply_property *properties;/提供的属性size_t num_properties;/ properties数组的大小/*对应着当此电源变化时 需要通知的电源模块的 name*/char *supplied_to;size_t num_supplicants;/ supplied_to数组的大小/*读取属性值*/int (*get_property)(struct power_supply *psy,enum

5、power_supply_property psp,union power_supply_propval *val);/*写属性值*/int (*set_property)(struct power_supply *psy,enum power_supply_property psp,const union power_supply_propval *val);/*设置属性为可写的属性*/int (*property_is_writeable)(struct power_supply *psy,enum power_supply_property psp);/*外部电源变化时所作的工作 */v

6、oid (*external_power_changed)(struct power_supply *psy);void (*set_charged)(struct power_supply *psy);/* For APM emulation, think legacy userspace. */int use_for_apm;/* private */Comment U10: 这里边就含有电源设备的所有属性struct device *dev;struct work_struct changed_work;spinlock_t changed_lock;bool changed;struc

7、t wake_lock work_wake_lock;#ifdef CONFIG_LEDS_TRIGGERSstruct led_trigger *charging_full_trig;char *charging_full_trig_name;struct led_trigger *charging_trig;char *charging_trig_name;struct led_trigger *full_trig;char *full_trig_name;struct led_trigger *online_trig;char *online_trig_name;struct led_t

8、rigger *charging_blink_full_solid_trig;char *charging_blink_full_solid_trig_name;#endif;1.2.1.2. 函数 power_supply_registerpower_supply_core.c (driverspower)电源驱动注册函数。int power_supply_register(struct device *parent, struct power_supply *psy)struct device *dev;int rc;dev = kzalloc(sizeof(*dev), GFP_KERN

9、EL);if (!dev)return -ENOMEM;device_initialize(dev);dev-class = power_supply_class;dev-type = dev-parent = parent;dev-release = power_supply_dev_release;dev_set_drvdata(dev, psy);psy-dev = dev;INIT_WORK(rc = kobject_set_name(if (rc)goto kobject_set_name_failed;rc = device_add(dev);if (rc)goto device_

10、add_failed;spin_lock_init(wake_lock_init(rc = power_supply_create_triggers(psy);if (rc)goto create_triggers_failed;/*告诉系统电源有变化,并向用户空间发送 uenvt */power_supply_changed(psy);goto success;create_triggers_failed:wake_lock_destroy(device_del(dev);kobject_set_name_failed:device_add_failed:put_device(dev);su

11、ccess:return rc;该函数的主要工作是向系统添加电源设备、创建电源属性文件,最后通知系统和用户电源有变化。1.2.1.3. 函数 power_supply_changedpower_supply_core.c (driverspower)向内核通知电源变化,并向用户空间发送 uevent,通知用户电源发生变化。void power_supply_changed(struct power_supply *psy)unsigned long flags;dev_dbg(psy-dev, “%sn“, _func_);spin_lock_irqsave(psy-changed = tru

12、e;wake_lock(spin_unlock_irqrestore(schedule_work(1.2.2. 总结电源驱动一般需要做以下几个部分的工作:1、 定义 struct power_supply,该定义可以是全局的或者嵌入到驱动专有数据结构中,实现其结构字段、1、 const char *name;字段名称、2、 enum power_supply_type type;电源类型字段、3、 enum power_supply_property *properties;属性字段定义一个全局 enum power_supply_property 类型的数组,数组中保存该电源需要上报的属性。将该数组的首地址赋给 properties 字段。、4、 实现 get_property 函数,用来读取属性值、5、 如果需要写属性值,则实现 set_property 函数和property_is_writeable 函数, property_is_writeable 函数判断是否需要写权限,是则返回 1,否则返回 0;2、 调用函数 power_supply_register 将定义 的 power_supply 注册到内核中3、 当电源的参数有变化时,调用 power_supply_changed 函数通知系统和用户。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报