Skip to content
This repository was archived by the owner on Sep 26, 2024. It is now read-only.

Commit 4ff1186

Browse files
authored
Merge pull request #132 from parameshbabu/master
Recovery tools update
2 parents ef2baee + fbb341d commit 4ff1186

File tree

7 files changed

+100
-68
lines changed

7 files changed

+100
-68
lines changed

Source-arm/BSP/QCDB410C/Packages/QCDB410C.DeviceLayout-R/DeviceLayout.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,10 @@
225225
<!-- Recovery Partition -->
226226
<Partition>
227227
<Name>MMOS</Name>
228+
<FileSystem>FAT32</FileSystem>
229+
<TotalSectors>4096000</TotalSectors>
230+
<!--MinFreeSectors>6553600</MinFreeSectors-->
228231
<Type>{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}</Type>
229-
<FileSystem>NTFS</FileSystem>
230-
<TotalSectors>4915200</TotalSectors>
231232
</Partition>
232233
<Partition>
233234
<Name>Data</Name>

Templates/recovery/diskpart_assign.txt

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,16 @@ sel disk 0
22
lis vol
33

44
sel vol 0
5-
remove all noerr
6-
assign letter="P" noerr
7-
8-
sel vol 1
9-
remove all noerr
10-
assign letter "C" noerr
11-
format fs=NTFS quick label=MainOS override noerr
5+
assign letter=P noerr
126

137
sel vol 2
14-
remove all noerr
15-
assign letter "R" noerr
8+
assign letter=R noerr
169

1710
sel vol 3
18-
remove all noerr
19-
assign letter="D" noerr
20-
format fs=NTFS quick label=Data override noerr
11+
assign letter=D noerr
2112

2213
sel vol 4
23-
remove all noerr
24-
assign letter="E" noerr
14+
assign letter=E noerr
2515

2616
lis vol
2717
exit
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
sel disk 0
2+
3+
sel vol 1
4+
remove all dismount noerr
5+
assign letter=C noerr
6+
format fs=NTFS quick label="MainOS" override noerr
7+
8+
sel vol 3
9+
remove all dismount noerr
10+
assign letter=D noerr
11+
format fs=NTFS quick label="Data" override noerr
12+
13+
lis vol
14+
exit

Templates/recovery/diskpart_remove.txt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@ sel disk 0
22
lis vol
33

44
sel vol 0
5-
remove all noerr
6-
7-
sel vol 1
8-
remove all noerr
9-
assign letter "C" noerr
5+
remove letter=P noerr
106

117
sel vol 2
12-
remove all noerr
8+
remove letter=R noerr
139

1410
sel vol 3
15-
remove all noerr
11+
remove letter=D noerr
1612

1713
sel vol 4
18-
remove all noerr
14+
remove letter=E noerr
1915

2016
lis vol
2117
exit

Templates/recovery/startnet.cmd

Lines changed: 26 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,34 @@
1-
@echo off
1+
REM startnet.cmd
2+
3+
REM Launch UI to cover screen
4+
REM start recoverygui.exe
5+
26
echo IoT recovery initializing...
37
wpeinit
48

5-
REM Format partitions and assign drive letters
9+
REM Assign drive letters
610
call diskpart /s diskpart_assign.txt
7-
8-
REM Define drive letters (assigned by diskpart script)
9-
set MAINOSDRIVE=C
10-
set EFIDRIVE=E
1111
set RECOVERYDRIVE=R
12-
set DATADRIVE=D
13-
set DPPDRIVE=P
14-
15-
REM Apply EFIESP partition WIM file
16-
dism /apply-image /ImageFile:%RECOVERYDRIVE%:\efiesp.wim /index:1 /ApplyDir:%EFIDRIVE%:\
17-
REM This will reset BCD to defaults, so immediately reset recovery parameter in case of power loss
18-
bcdedit /store %EFIDRIVE%:\EFI\microsoft\boot\bcd /set {bootmgr} bootsequence {a5935ff2-32ba-4617-bf36-5ac314b3f9bf}
19-
20-
REM Apply the MainOS and Data partition WIM files. The order below is important - do not change
21-
dism /apply-image /ImageFile:%RECOVERYDRIVE%:\data.wim /index:1 /ApplyDir:%DATADRIVE%:\ /Compact
22-
dism /apply-image /ImageFile:%RECOVERYDRIVE%:\mainos.wim /index:1 /ApplyDir:%MAINOSDRIVE%:\ /Compact
23-
24-
REM Restore Junctions for Data/DPP/MMOS partitions
25-
REM Only necessary when recovery WIMs not generated from same FFU
26-
mountvol %DATADRIVE%:\ /L > volumeguid_data
27-
set /p VOLUMEGUIDDATA=<volumeguid_data
28-
rmdir %MAINOSDRIVE%:\Data
29-
mklink /J %MAINOSDRIVE%:\Data %VOLUMEGUIDDATA%
30-
31-
mountvol %DPPDRIVE%:\ /L > volumeguid_dpp
32-
set /p VOLUMEGUIDDPP=<volumeguid_dpp
33-
rmdir %MAINOSDRIVE%:\DPP
34-
mklink /J %MAINOSDRIVE%:\DPP %VOLUMEGUIDDPP%
35-
36-
mountvol %RECOVERYDRIVE%:\ /L > volumeguid_recovery
37-
set /p VOLUMEGUIDRECOVERY=<volumeguid_recovery
38-
rmdir %MAINOSDRIVE%:\MMOS
39-
mklink /J %MAINOSDRIVE%:\MMOS %VOLUMEGUIDRECOVERY%
40-
41-
REM Fix up MountedDevices registry to point to correct Data partition GUID
42-
set VOL=%VOLUMEGUIDDATA%
43-
set VOL=%VOL: =%
44-
set UDRIVEBINARYBLOB=444D494F3A49443A%vol:~17,2%%vol:~15,2%%vol:~13,2%%vol:~11,2%%vol:~22,2%%vol:~20,2%%vol:~27,2%%vol:~25,2%%vol:~30,4%%vol:~35,12%
45-
reg load "HKLM\RecoveryIoTSystem" %MAINOSDRIVE%:\windows\system32\config\system
46-
reg add "HKLM\RecoveryIoTSystem\MountedDevices" /v "\DosDevices\U:" /t REG_BINARY /f /d %UDRIVEBINARYBLOB%
47-
reg unload "HKLM\RecoveryIoTSystem"
12+
set EFIDRIVE=E
13+
14+
REM Initilize logging
15+
set RECOVERY_LOG_FOLDER=%RECOVERYDRIVE%:\recoverylogs
16+
md %RECOVERY_LOG_FOLDER%
17+
echo --- Device recovery initiated --- >>%RECOVERY_LOG_FOLDER%\recovery_log.txt
18+
call time /t >>%RECOVERY_LOG_FOLDER%\recovery_log.txt
19+
copy %WINDIR%\system32\winpeshl.log %RECOVERY_LOG_FOLDER%
20+
21+
REM Ensure recovery WIM files are available
22+
if not exist %RECOVERYDRIVE%:\data.wim echo Missing data.wim file! >>%RECOVERY_LOG_FOLDER%\recovery_log.txt && goto exit
23+
if not exist %RECOVERYDRIVE%:\mainos.wim echo Missing mainos.wim file! >>%RECOVERY_LOG_FOLDER%\recovery_log.txt && goto exit
24+
if not exist %RECOVERYDRIVE%:\efiesp.wim echo Missing efiesp.wim file! >>%RECOVERY_LOG_FOLDER%\recovery_log.txt && goto exit
25+
26+
REM Perform recovery operations, logging to MMOS log file
27+
call startnet_recovery.cmd >>%RECOVERY_LOG_FOLDER%\recovery_log.txt
28+
29+
:exit
30+
call time /t >>%RECOVERY_LOG_FOLDER%\recovery_log.txt
31+
echo --- Device recovery completed --- >>%RECOVERY_LOG_FOLDER%\recovery_log.txt
4832

4933
REM Go back to MainOS on next boot
5034
bcdedit /store %EFIDRIVE%:\EFI\microsoft\boot\bcd /set {bootmgr} bootsequence {01de5a27-8705-40db-bad6-96fa5187d4a6}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
REM startnet_recovery.cmd
2+
3+
REM Format MainOS and Data partitions
4+
call diskpart /s diskpart_format.txt
5+
6+
REM Define drive letters (assigned by diskpart script)
7+
set MAINOSDRIVE=C
8+
set EFIDRIVE=E
9+
set RECOVERYDRIVE=R
10+
set DATADRIVE=D
11+
set DPPDRIVE=P
12+
13+
REM Apply EFIESP partition WIM file
14+
dism /apply-image /ImageFile:%RECOVERYDRIVE%:\efiesp.wim /index:1 /ApplyDir:%EFIDRIVE%:\
15+
REM This will reset BCD to defaults, so immediately reset recovery parameter in case of power loss
16+
bcdedit /store %EFIDRIVE%:\EFI\microsoft\boot\bcd /set {bootmgr} bootsequence {a5935ff2-32ba-4617-bf36-5ac314b3f9bf}
17+
18+
REM Apply the MainOS and Data partition WIM files. The order below is important - do not change
19+
dism /apply-image /ImageFile:%RECOVERYDRIVE%:\data.wim /index:1 /ApplyDir:%DATADRIVE%:\ /Compact
20+
dism /apply-image /ImageFile:%RECOVERYDRIVE%:\mainos.wim /index:1 /ApplyDir:%MAINOSDRIVE%:\ /Compact
21+
22+
REM Restore Junctions for Data/DPP/MMOS partitions
23+
REM Only necessary when recovery WIMs not generated from same FFU
24+
mountvol %DATADRIVE%:\ /L > volumeguid_data
25+
set /p VOLUMEGUIDDATA=<volumeguid_data
26+
rmdir %MAINOSDRIVE%:\Data
27+
mklink /J %MAINOSDRIVE%:\Data %VOLUMEGUIDDATA%
28+
29+
mountvol %DPPDRIVE%:\ /L > volumeguid_dpp
30+
set /p VOLUMEGUIDDPP=<volumeguid_dpp
31+
rmdir %MAINOSDRIVE%:\DPP
32+
mklink /J %MAINOSDRIVE%:\DPP %VOLUMEGUIDDPP%
33+
34+
mountvol %RECOVERYDRIVE%:\ /L > volumeguid_recovery
35+
set /p VOLUMEGUIDRECOVERY=<volumeguid_recovery
36+
rmdir %MAINOSDRIVE%:\MMOS
37+
mklink /J %MAINOSDRIVE%:\MMOS %VOLUMEGUIDRECOVERY%
38+
39+
REM Fix up MountedDevices registry to point to correct Data partition GUID
40+
set VOL=%VOLUMEGUIDDATA%
41+
set VOL=%VOL: =%
42+
set UDRIVEBINARYBLOB=444D494F3A49443A%vol:~17,2%%vol:~15,2%%vol:~13,2%%vol:~11,2%%vol:~22,2%%vol:~20,2%%vol:~27,2%%vol:~25,2%%vol:~30,4%%vol:~35,12%
43+
reg load "HKLM\RecoveryIoTSystem" %MAINOSDRIVE%:\windows\system32\config\system
44+
reg add "HKLM\RecoveryIoTSystem\MountedDevices" /v "\DosDevices\U:" /t REG_BINARY /f /d %UDRIVEBINARYBLOB%
45+
reg unload "HKLM\RecoveryIoTSystem"

Tools/newwinpe.cmd

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ if [%BSP_ARCH%] == [arm] (
5959
)
6060
del %BSPDIR%\driverlist.txt
6161
) else (
62-
echo %BSPDIR% does not exist,no drivers added. Provide BSP source directory.
62+
echo No drivers added. Provide valid BSP source directory to add drivers.
6363
)
6464
)
6565
echo Copying files into WinPE
66-
copy "%IOTADK_ROOT%\Templates\recovery\startnet.cmd" %MOUNTDIR%\windows\system32\startnet.cmd >nul
66+
copy "%IOTADK_ROOT%\Templates\recovery\startnet.cmd" %MOUNTDIR%\windows\system32\ >nul
67+
copy "%IOTADK_ROOT%\Templates\recovery\startnet_recovery.cmd" %MOUNTDIR%\windows\system32\ >nul
6768
copy "%IOTADK_ROOT%\Templates\recovery\diskpart_assign.txt" %MOUNTDIR%\windows\system32\ >nul
69+
copy "%IOTADK_ROOT%\Templates\recovery\diskpart_format.txt" %MOUNTDIR%\windows\system32\ >nul
6870
copy "%IOTADK_ROOT%\Templates\recovery\diskpart_remove.txt" %MOUNTDIR%\windows\system32\ >nul
6971

7072
echo Saving and unmounting WinPE

0 commit comments

Comments
 (0)