0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用户空间接口是什么

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:蜗窝科技 2023-09-11 16:01 次阅读

/sys/power/state

state 是 sysfs 中一个文件,为 Generic PM
的核心接口,在“kernel/power/main.c”中实现,用于将系统置于指定的 Power State。

读取该文件,返回当前系统支持的 Power State,形式为字符串。在内核中,有两种类型的 Power
State,一种是 Hibernate
相关的,名称为“disk”,除“disk”之外,内核在"/kernel/power/suspend.c"中通过数组的形式定义了另外 3 个
state,如下:

const char *const pm_states[PM_SUSPEND_MAX] = {
    [PM_SUSPEND_FREEZE]     = "freeze",
    [PM_SUSPEND_STANDBY]    = "standby",
    [PM_SUSPEND_MEM]        = "mem",
};

这些 Power State 的解释如下:

  1. freeze:不涉及具体的
    Hardware 或 Driver,只是冻结所有的进程,包括用户空间进程及内核线程
  2. standby
  3. mem,即通常所讲的 Sleep
    功能,STR,Suspend to RAM
  4. disk,即
    Hibernate 功能,STD,Suspend to Disk。

写入特定的 Power State 字符串,将会把系统置为该模式。

/sys/power/wakeup_count

该接口只和 Sleep 功能有关,因此由“CONFIG_PM_SLEEP”宏定义控制。它的存在,是为了解决
Sleep 和 Wakeup 之间的同步问题。

系统睡眠后,可以通过保留的 Wakeup source 唤醒系统。而在 CPU 体系中,唤醒系统就是唤醒
CPU,而唤醒 CPU 的唯一途径,就是 Wakeup source 产生中断(内核称作 Wakeup event)。而内核要保证在多种状态下,Sleep/Wakeup
的行为都能正常,如下:

▆ 系统处于 sleep 状态时,产生了 Wakeup event。此时应该直接唤醒系统。这没有问题。

▆ 系统在进入 sleep 的过程中,产生了
Wakeup event。此时应该放弃进入 sleep。

这一点就不那么容易做到了。例如,当 Wakeup event
发生在“/sys/power/state”被写之后、内核执行 freeze 操作之前。此时用户空间程序依旧可以处理 Wakeup
event,或者只是部分处理。而内核却以为该 Event 已经被处理,因此并不会放弃此次 sleep 动作。

这就会造成,Wakeup event 发生后,用户空间程序已经后悔了,不想睡了,但最终还是睡下去了。直到下一个
Wakeup event 到来。

为了解决上面的问题,内核提供 wakeup_count 机制,配合“/sys/power/state”,以实现
Sleep 过程中的同步。该机制的操作行为如下:

▆ wakeup_count 是内核用来保存当前
wakeup event 发生的计数。

▆ 用户空间程序在写入
state 切换状态之前,应先读取 wakeup_count 并把获得的 count 写回给 wakeup_count。

▆ 内核会比对写回的 count 和当前的 count 是否一致,如果不一致,说明在读取/写回操作之间,产生了新的的
wakeup event,内核就会返回错误。

▆ 用户空间程序检测到写入错误之后,不能继续后的动作,需要处理响应的 event 并伺机再次读取/写回
wakeup_count。

▆ 如果内核比对一致,会记录 write wakeup_count 成功时的 event 快照,后面继续
suspend 动作时,会检查是否和快照相符,如果不符,会终止 suspend。

▆ 用户空间程序检测到写入正确后,可以继续对 state 的写入,以便发起一次状态切换。而此时是安全的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19115

    浏览量

    304949
  • 接口
    +关注

    关注

    33

    文章

    8586

    浏览量

    151084
  • Linux
    +关注

    关注

    87

    文章

    11300

    浏览量

    209403
收藏 人收藏

    评论

    相关推荐

    Linux用户空间与内核空间的区别?

    为的分为两个部分--用户空间与内核空间用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3G
    发表于 06-05 04:35

    什么是板间接口信号?

    什么是板间接口信号?什么是星-点接地?
    发表于 04-09 06:18

    USB接口怎么实现间接的数据读写?

    利用FTDI公司的FT232AM完成RS232和USB之间的接口转换,然后再对USB接口实现间接的数据读写。
    发表于 04-26 06:41

    用户空间与内核通信方式是什么

    用户空间与内核通信方式有哪些?系统调用,提供特定的用户空间与内核空间的信息传递。信号,内核空间
    发表于 12-20 08:06

    用户空间如何访问内核空间

    访问。嵌入式Linux:C开发“会看使用说明书”用户空间不能随便访问内核空间3、用户空间如何访问内核空间
    发表于 12-27 06:15

    TD-SCDMA RTT的空间接口技术综述

    TD-SCDMA RTT的空间接口技术综述:
    发表于 05-21 13:22 20次下载
    TD-SCDMA RTT的<b class='flag-5'>空间接口</b>技术综述

    空间数据插件技术研究

    利用数据库技术来管理海量的空间数据,有两种方法:一种是在数据库和用户应用系统间建立中间层,称为空间数据引擎SDE,利用SDE作为中间接口使数据库操作系统能存储和管理空
    发表于 08-07 09:56 9次下载

    过程计算系统和技术过程之间接口的说明 GB12058-89

    过程计算系统和技术 过程之间接口的说明 GB12058-89 本标准是供所有从事过程接口设计、生产、销售以及应用方面人员使用的规范。包含了这些接口规范所需要的
    发表于 04-30 11:56 11次下载

    用户线接口电路

    用户线接口电路是完成用户交换机和模拟用户中继线之间接口功能的部件。
    发表于 05-27 09:43 37次下载

    模块间接口设计不匹配问题

    模块间接口设计不匹配引起的问题   如果没有一个技术能力很强的集成者,往往在模块间容易出现设计上的错误。这种情况是灾难性的,双方都是在
    发表于 11-21 14:01 724次阅读

    用户空间和内核空间通讯-Netlink 上

    Alan Cox在内核1.3版本的开发阶段最先引入了Netlink,刚开始时Netlink是以字符驱动接口的方式提供内核与用户空间的双向数据通信;
    发表于 04-29 15:32 585次阅读

    需要了解linux内核空间用户空间的基本原理

    linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户
    发表于 05-06 16:13 735次阅读

    Linux用户空间与内核空间

    应用程序运行在用户空间,而Linux 驱动属于内核的一部分,因此驱动运行于内核空间。当我们在用户空间想要实现对内核的操作,比如使用open
    发表于 05-20 10:58 1031次阅读
    Linux<b class='flag-5'>用户</b><b class='flag-5'>空间</b>与内核<b class='flag-5'>空间</b>

    什么是futex?Futex用户和内核空间接口API是什么?

    编者按:对于Linux系统编程来说,竞争和同步是绕不开的话题。之前分享过Java的对象锁,有读者说自己不做Java不太能理解,这次分享Linux中很基础的同步机制:futex,内容包括基本接口定义和对于优先级反转的处理,希望对大家的技术成长有帮助。
    的头像 发表于 05-20 16:56 4209次阅读
    什么是futex?Futex<b class='flag-5'>用户</b>和内核<b class='flag-5'>空间接口</b>API是什么?

    Suspend是什么意思 过程概述

    Suspend 功能 源码目录 1)PM Core /kernel/ power /main.c ---- 提供用户空间接口(/ sys /power/ state) /kernel/ power
    的头像 发表于 09-11 16:08 723次阅读
    Suspend是什么意思 过程概述