我正在研究Linux内核4.4.55,我的情况是:当我通过命令暂停我的系统时
$ echo mem > /sys/power/state
一旦USB设备插入电路板,第一次暂停就会失败。 之后,再次输入上述命令,第二次暂停成功。这很奇怪。
我继续调查 usb core 组件(... / drivers / usb / core /),我发现:第一次挂起因函数 usb_port_runtime_suspend()<而失败/ em>在调用函数
时返回错误代码“-EAGAIN” if (dev_pm_qos_flags(&port_dev->dev, PM_QOS_FLAG_NO_POWER_OFF)
== PM_QOS_FLAGS_ALL){
printk("DEBUG: %d : %s\n", __LINE__, __func__); /* my debug code */
return -EAGAIN;
}
根据我的理解,
PM QoS“无电源关闭”标志向内核指示不应完全从设备中移除电源
当usb设备挂起时,usb核心将挂起usb端口和usb端口运行时pm回调将清除PORT_POWER功能,以便在满足所有条件时关闭端口。
我不知道WHY函数 dev_pm_qos_flags()在我的情况下返回了PM_QOS_FLAGS_ALL,有人可以解释一下吗?这是一个错误吗?由于EAGAIN是由 pm qos NO_POWER_OFF 设置引起的,因此对于USB端口系统pm来说这不是错误。