在内核4.4中第一次无法挂起到ram USB设备驱动程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在内核4.4中第一次无法挂起到ram USB设备驱动程序相关的知识,希望对你有一定的参考价值。

我正在使用Linux内核4.4.55,我的情况是:当我通过命令暂停我的系统时

$ echo mem > /sys/power/state

一旦USB设备插入电路板,第一次挂起就失败了。之后,再次输入上述命令,第二次暂停成功。这很奇怪。

我继续调查usb核心组件(... / drivers / usb / core /),我发现:第一次挂起失败,因为函数usb_port_runtime_suspend()在调用函数时返回错误代码“-EAGAIN”

    if (dev_pm_qos_flags(&port_dev->dev, PM_QOS_FLAG_NO_POWER_OFF)
            == PM_QOS_FLAGS_ALL){  
        printk("DEBUG: %d : %s
", __LINE__, __func__); /* my debug code */
        return -EAGAIN;
  }

据我了解,

  • PM QoS“无电源关闭”标志向内核指示不应完全从设备中移除电源
  • 当usb设备挂起时,usb核心将暂停usb端口和usb端口运行时pm回调将清除PORT_POWER功能,以便在满足所有条件时关闭端口。

我不知道为什么函数dev_pm_qos_flags()返回PM_QOS_FLAGS_ALL在我的情况下,任何人都可以解释这个?这是一个错误吗?因为EAGAIN是由pm qos NO_POWER_OFF设置引起的,所以这不是usb端口系统pm的错误。

答案

首先,需要了解S2RAM如何工作,能够按照下面的流程图(由我自己绘制)enter image description here

我已经检测到USB Host控制器中发生的问题。

以上是关于在内核4.4中第一次无法挂起到ram USB设备驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

技巧.在虚拟机Vmware中使用HID设备(如USB免驱键盘)

《Linux总线设备与驱动》USB设备发现机制

USB鼠标设备简单驱动设计

在人脸识别机器视觉中USB免驱摄像头拍照颜色不对怎么办?大影30~1600万像素多种摄像头方案通过一次白平衡解决偏色问题。

uvc无驱摄像头怎么连接电脑

手动添加kdump