diff --git a/Source-arm/BSP/QCDB410C/Packages/QCDB410C.DeviceLayout-R/DeviceLayout.xml b/Source-arm/BSP/QCDB410C/Packages/QCDB410C.DeviceLayout-R/DeviceLayout.xml index 36b9f18b..657b8dec 100644 --- a/Source-arm/BSP/QCDB410C/Packages/QCDB410C.DeviceLayout-R/DeviceLayout.xml +++ b/Source-arm/BSP/QCDB410C/Packages/QCDB410C.DeviceLayout-R/DeviceLayout.xml @@ -225,9 +225,10 @@ MMOS + FAT32 + 4096000 + {ebd0a0a2-b9e5-4433-87c0-68b6b72699c7} - NTFS - 4915200 Data diff --git a/Templates/recovery/diskpart_assign.txt b/Templates/recovery/diskpart_assign.txt index ab6edd95..e264b281 100644 --- a/Templates/recovery/diskpart_assign.txt +++ b/Templates/recovery/diskpart_assign.txt @@ -2,26 +2,16 @@ sel disk 0 lis vol sel vol 0 -remove all noerr -assign letter="P" noerr - -sel vol 1 -remove all noerr -assign letter "C" noerr -format fs=NTFS quick label=MainOS override noerr +assign letter=P noerr sel vol 2 -remove all noerr -assign letter "R" noerr +assign letter=R noerr sel vol 3 -remove all noerr -assign letter="D" noerr -format fs=NTFS quick label=Data override noerr +assign letter=D noerr sel vol 4 -remove all noerr -assign letter="E" noerr +assign letter=E noerr lis vol exit \ No newline at end of file diff --git a/Templates/recovery/diskpart_format.txt b/Templates/recovery/diskpart_format.txt new file mode 100644 index 00000000..f33dfaa2 --- /dev/null +++ b/Templates/recovery/diskpart_format.txt @@ -0,0 +1,14 @@ +sel disk 0 + +sel vol 1 +remove all dismount noerr +assign letter=C noerr +format fs=NTFS quick label="MainOS" override noerr + +sel vol 3 +remove all dismount noerr +assign letter=D noerr +format fs=NTFS quick label="Data" override noerr + +lis vol +exit \ No newline at end of file diff --git a/Templates/recovery/diskpart_remove.txt b/Templates/recovery/diskpart_remove.txt index 1989365e..f041ac4b 100644 --- a/Templates/recovery/diskpart_remove.txt +++ b/Templates/recovery/diskpart_remove.txt @@ -2,20 +2,16 @@ sel disk 0 lis vol sel vol 0 -remove all noerr - -sel vol 1 -remove all noerr -assign letter "C" noerr +remove letter=P noerr sel vol 2 -remove all noerr +remove letter=R noerr sel vol 3 -remove all noerr +remove letter=D noerr sel vol 4 -remove all noerr +remove letter=E noerr lis vol exit \ No newline at end of file diff --git a/Templates/recovery/startnet.cmd b/Templates/recovery/startnet.cmd index 4bce336c..f23f9491 100644 --- a/Templates/recovery/startnet.cmd +++ b/Templates/recovery/startnet.cmd @@ -1,50 +1,34 @@ -@echo off +REM startnet.cmd + +REM Launch UI to cover screen +REM start recoverygui.exe + echo IoT recovery initializing... wpeinit -REM Format partitions and assign drive letters +REM Assign drive letters call diskpart /s diskpart_assign.txt - -REM Define drive letters (assigned by diskpart script) -set MAINOSDRIVE=C -set EFIDRIVE=E set RECOVERYDRIVE=R -set DATADRIVE=D -set DPPDRIVE=P - -REM Apply EFIESP partition WIM file -dism /apply-image /ImageFile:%RECOVERYDRIVE%:\efiesp.wim /index:1 /ApplyDir:%EFIDRIVE%:\ -REM This will reset BCD to defaults, so immediately reset recovery parameter in case of power loss -bcdedit /store %EFIDRIVE%:\EFI\microsoft\boot\bcd /set {bootmgr} bootsequence {a5935ff2-32ba-4617-bf36-5ac314b3f9bf} - -REM Apply the MainOS and Data partition WIM files. The order below is important - do not change -dism /apply-image /ImageFile:%RECOVERYDRIVE%:\data.wim /index:1 /ApplyDir:%DATADRIVE%:\ /Compact -dism /apply-image /ImageFile:%RECOVERYDRIVE%:\mainos.wim /index:1 /ApplyDir:%MAINOSDRIVE%:\ /Compact - -REM Restore Junctions for Data/DPP/MMOS partitions -REM Only necessary when recovery WIMs not generated from same FFU -mountvol %DATADRIVE%:\ /L > volumeguid_data -set /p VOLUMEGUIDDATA= volumeguid_dpp -set /p VOLUMEGUIDDPP= volumeguid_recovery -set /p VOLUMEGUIDRECOVERY=>%RECOVERY_LOG_FOLDER%\recovery_log.txt +call time /t >>%RECOVERY_LOG_FOLDER%\recovery_log.txt +copy %WINDIR%\system32\winpeshl.log %RECOVERY_LOG_FOLDER% + +REM Ensure recovery WIM files are available +if not exist %RECOVERYDRIVE%:\data.wim echo Missing data.wim file! >>%RECOVERY_LOG_FOLDER%\recovery_log.txt && goto exit +if not exist %RECOVERYDRIVE%:\mainos.wim echo Missing mainos.wim file! >>%RECOVERY_LOG_FOLDER%\recovery_log.txt && goto exit +if not exist %RECOVERYDRIVE%:\efiesp.wim echo Missing efiesp.wim file! >>%RECOVERY_LOG_FOLDER%\recovery_log.txt && goto exit + +REM Perform recovery operations, logging to MMOS log file +call startnet_recovery.cmd >>%RECOVERY_LOG_FOLDER%\recovery_log.txt + +:exit +call time /t >>%RECOVERY_LOG_FOLDER%\recovery_log.txt +echo --- Device recovery completed --- >>%RECOVERY_LOG_FOLDER%\recovery_log.txt REM Go back to MainOS on next boot bcdedit /store %EFIDRIVE%:\EFI\microsoft\boot\bcd /set {bootmgr} bootsequence {01de5a27-8705-40db-bad6-96fa5187d4a6} diff --git a/Templates/recovery/startnet_recovery.cmd b/Templates/recovery/startnet_recovery.cmd new file mode 100644 index 00000000..2bfb8ab9 --- /dev/null +++ b/Templates/recovery/startnet_recovery.cmd @@ -0,0 +1,45 @@ +REM startnet_recovery.cmd + +REM Format MainOS and Data partitions +call diskpart /s diskpart_format.txt + +REM Define drive letters (assigned by diskpart script) +set MAINOSDRIVE=C +set EFIDRIVE=E +set RECOVERYDRIVE=R +set DATADRIVE=D +set DPPDRIVE=P + +REM Apply EFIESP partition WIM file +dism /apply-image /ImageFile:%RECOVERYDRIVE%:\efiesp.wim /index:1 /ApplyDir:%EFIDRIVE%:\ +REM This will reset BCD to defaults, so immediately reset recovery parameter in case of power loss +bcdedit /store %EFIDRIVE%:\EFI\microsoft\boot\bcd /set {bootmgr} bootsequence {a5935ff2-32ba-4617-bf36-5ac314b3f9bf} + +REM Apply the MainOS and Data partition WIM files. The order below is important - do not change +dism /apply-image /ImageFile:%RECOVERYDRIVE%:\data.wim /index:1 /ApplyDir:%DATADRIVE%:\ /Compact +dism /apply-image /ImageFile:%RECOVERYDRIVE%:\mainos.wim /index:1 /ApplyDir:%MAINOSDRIVE%:\ /Compact + +REM Restore Junctions for Data/DPP/MMOS partitions +REM Only necessary when recovery WIMs not generated from same FFU +mountvol %DATADRIVE%:\ /L > volumeguid_data +set /p VOLUMEGUIDDATA= volumeguid_dpp +set /p VOLUMEGUIDDPP= volumeguid_recovery +set /p VOLUMEGUIDRECOVERY=nul +copy "%IOTADK_ROOT%\Templates\recovery\startnet.cmd" %MOUNTDIR%\windows\system32\ >nul +copy "%IOTADK_ROOT%\Templates\recovery\startnet_recovery.cmd" %MOUNTDIR%\windows\system32\ >nul copy "%IOTADK_ROOT%\Templates\recovery\diskpart_assign.txt" %MOUNTDIR%\windows\system32\ >nul +copy "%IOTADK_ROOT%\Templates\recovery\diskpart_format.txt" %MOUNTDIR%\windows\system32\ >nul copy "%IOTADK_ROOT%\Templates\recovery\diskpart_remove.txt" %MOUNTDIR%\windows\system32\ >nul echo Saving and unmounting WinPE