Windows10新增加了一个功能:快速启动,而且默认状态是打开的,根据微软的说法,快速启动可以有效提高启动速度,快速启动等同于休眠。
控制面板——硬件和声音——电源选项——左侧选择电源按钮的功能——更改当前不可用的设置,取消启用快速启动复选框即可。
其实,快速启动的原理并不复杂,即关机时将系统内核、相关模块和驱动写入硬盘存放起来,下次启动直接加载,速度自然变快了。
当打开快速启动时,关机后再开机时win10不会完全重新加载驱动,导致初始化芯片失败,在驱动中新加一个电源管理函数,把改变电源到PowerDeviceD0 时再做一次加载驱动时要初始的芯片工作, 休眠与快启都能正常工作。
电源管理函数:DeviceDispatchSetPower, // Power Set Power
PowerDeviceD0 // Fully working state
void DeviceDispatchSetPower(IN PKSDEVICE Device,IN PIRP Irp,DEVICE_POWER_STATE to,DEVICE_POWER_STATE from)
{
PDEVICE_EXTENSION devext;
devext = (PDEVICE_EXTENSION)Device->Context;
if( to == from )
return;
if(to == PowerDeviceD3) //low power state
{
KdPrint(("dispatchSetPower:low power state\n"));
devext->_power_state = to;
}
else if(to == PowerDeviceD0 ) // Fully working state
{
devext->_power_state = to;
KdPrint(("dispatchSetPower:Fully working state\n"));
wrReg32(devext, (INT_BASEADDRESS + INT_EN ), 0x00000001); //enbale INTERRUPT
wrReg32(devext, (INT_BASEADDRESS + I2C0_MASK ), 0x00000001);
wrReg32(devext, (INT_BASEADDRESS + I2C1_MASK ), 0x00000001);
wrReg32(devext, (INT_BASEADDRESS + I2C2_MASK ), 0x00000001);
wrReg32(devext, (INT_BASEADDRESS + I2C3_MASK ), 0x00000001);
init_i2c(devext,I2C0_BASEADDRESS);
init_i2c(devext,I2C1_BASEADDRESS);
init_i2c(devext,I2C2_BASEADDRESS);
init_i2c(devext,I2C3_BASEADDRESS);
}
else
KdPrint(("unsupported device state requested\n"));
}