基于骁龙的Windows的现代(连接)待机模式
现代待机的用例,以及实现和测试
在骁龙上实现和测试Windows的现代待机模式
使用GitHub的两个Windows驱动程序示例和以下说明,您可以在骁龙平台上实现和测试现代待机模式。驱动程序示例需要对骁龙上的Windows进行修改,如下所示。
更多背景信息,请访问Microsoft文档中的“什么是现代备用待机模式““。
echosrv-Winsock内核(WSK)驱动程序
微软名为Echo的内核驱动程序示例使用了Windows内核套接字。驱动程序监听传入的TCP IPv4/IPv6请求并回显接收到的数据包。GitHub版本的唯一修改是API(PoSetSystemState),用于从休眠状态唤醒系统。
1.获取驱动程序https://github.com/microsoft/Windows-driver-samples/tree/master/network/wsk/echosrv.
2. 将以下行添加到\network\wsk\echosrv\wsksample.c: PoSetSystemState(ES_DISPLAY|ES_USER|u PRESENT | ES_SYSTEM_REQUIRED); //检查是否支持Always on Always connected POWER_PLATFORM_INFORMATION PlatformInfo = {0}; NTSTATUS Status = ZwPowerInformation(PlatformInformation, NULL, 0, &PlatformInfo, sizeof(PlatformInfo)); if (NT_SUCCESS(Status) && PlatformInfo.AoAc) { ; // “AoAC已启用! } else { ; // “AoAC未启用! }
ndisprot-NDIS协议驱动程序
对此驱动程序进行修改来支持LAN唤醒(Wake-On-LAN,WOL)位图模式。它们包括使用OID_PM_ADD_WOL_模式将特定的位图模式添加到网卡(NIC)中,还包括使用类似的OID来查询电源管理功能、查询模式并在需要时删除它们。这些改变是必要的,因为当网卡进入低功耗状态(D2/D3)时,它会监听具有特定、预配置模式的数据包,并丢弃所有其他数据包。
1.获取驱动程序 https://github.com/microsoft/Windows-driver-samples/tree/master/network/ndis/ndisprot/6x
2.将以下行添加到\network\ndis\ndisprot\6x\sys\ntdisp中的switch(FunctionCode)语句。
安装驱动程序 驱动程序没有签名。要安装它们,请使用测试证书或testsigning对它们进行签名。确保禁用强制驱动程序签名。
1.安装WSK驱动程序。sc create echosrv type=kernel binpath=\echosrv.sy
2.从以下位置下载ndisprot630.inf:https://github.com/Microsoft/Windows-driver-samples/tree/master/network/ndis/ndisprot/6x/sys/630
要安装NDIS协议驱动程序,请转到网络连接,选择适配器并打开属性。单击安装,协议,添加,最后是磁盘。然后将其指向存储inf和驱动程序的目录。选择NDIS协议驱动程序示例
启动驱动程序
您可以选择通过修改.inf文件来自动启用驱动程序,也可以使用以下命令来手动启用: sc start echosrv net start ndisprot
添加WOL模式
1. prottest.exe与NDIS驱动程序位于同一目录中。在PowerShell中,运行prottest -e来枚举设备ID,如下图所示。
2. 要将WOL位图模式添加到NIC,请运行prottest -a。在下面的示例中,prottest -a将位图模式添加到设备ID 3。
不带参数执行prottest时会显示帮助信息
prottest -q查询当前指定的任何模式。
prottest -c返回支持的WOL数据包类型
此时,echosrv正在侦听端口40007上的TCP数据包,WOL位图模式已设置好。当计算机处于睡眠模式时,与WOL模式匹配的数据包可以唤醒它。
3.要进行测试,请使用PowerShell脚本在目标设备处于休眠(S0低功耗空闲连接)模式时将WOL包和TCP包从远程设备发送到目标设备。
示例命令:
Wakeup-Target -IPAddress "fe80::cd1d:936f:fcbf:2fc"
停止服务
1.使用以下命令停止驱动程序:
sc stop echosrv
net stop ndisprot
2.使用以下命令从NIC适配器属性中卸载ndisprot: sc delete echosrv
检查和故障排除
现代待机状态-使用远程设备检查目标设备的现代待机状态。
1.确保两台设备能够通信;例如,能通过ping命令互相访问。
2.确保目标设备处于现代(已连接)待机状态。它不应处于S4(休眠)或S5(关机)模式。
3.在目标设备上运行getservicechosrv以确保WSK驱动程序正在运行。
4.echosrv驱动程序监听端口40007。在目标设备上运行以下命令以确认该端口上有侦听套接字:Get-NetTCPConnection -LocalPort 40007
• TF Lite
protest.exe可执行文件-如果protest.exe无法工作,您可能需要安装Visual C++。
现代备用模式支持-运行以下命令以确认支持并启用现代(已连接)待机(S0低功耗空闲连接):Powercfg /a
电源状态-运行以下命令以研究系统电源状态:Powercfg /sleepstudy
如下面的摘录所示,报告显示了在每种模式下(活动、待机、休眠、睡眠等)花费的时间量,以及进入和退出每个状态的原因。
如果您遇到任何问题或有任何疑问,请在我们登陆页面底部的开发者查询表留言。
骁龙是高通技术公司和/或其子公司的产品。
Qualcomm 开发者专区是 Qualcomm 联合CSDN 共同打造的面向中国开发者的技术专区。致力于通过提供全球最新资讯和最多元的技术资源及支持,为开发者们打造全面一流的开发环境。本专区将以嵌入式、物联网、游戏开发、Qualcomm® 骁龙™处理器的软件优化等技术为核心,打造全面的开发者技术服务社区,为下一代高性能体验和设计带来更多的想法和灵感。
加入 Qualcomm 开发者专区