hw/arm: add experimental iPhone 5 A6 platform
This commit is contained in:
+111
@@ -0,0 +1,111 @@
|
||||
# iPhone 5 / Apple A6 sur QEMU Windows natif
|
||||
|
||||
## État actuel
|
||||
|
||||
- QEMU `arm-softmmu` est compilé en PE Win64 natif avec MSYS2 MinGW64. WSL n’est pas utilisé.
|
||||
- La machine `iphone5` exécute la SecureROM A6 `iBoot-1145.3` de 65 536 octets.
|
||||
- Les fusibles exposent `CPID:8950`, `CPRV:20` et `CPFM:03`.
|
||||
- L’UART A6 est relié à la console QEMU (`Ctrl+A`, puis `C` pour le moniteur ; `Ctrl+A`, puis `X` pour quitter).
|
||||
- Le contrôleur USB OTG, son EP0, les DMA et l’IRQ 11 permettent à la SecureROM de terminer son énumération DFU.
|
||||
- Le descripteur produit par cette SecureROM annonce `VID=05AC, PID=1229`. La façade Windows le normalise vers le PID DFU public `1227`, attendu par `libirecovery`.
|
||||
- Le pilote KMDF/UDE `QemuA6Ude.sys` crée un véritable enfant PnP `USB\VID_05AC&PID_1227` sous Windows.
|
||||
- `QemuA6UsbBridge.exe` relaie les contrôles DFU entre le pilote et QEMU sur `127.0.0.1:26050`.
|
||||
- Un test externe `DFU_GETSTATE` a traversé le socket, le modèle OTG et la SecureROM, puis a renvoyé `dfuIDLE` (`2`).
|
||||
- `idevicerestore.exe` et `libirecovery` restent d’origine et ne sont pas patchés.
|
||||
|
||||
Le paquet pilote signé en mode test est généré localement dans
|
||||
`windows\QemuA6Ude\package` ; les clés, certificats et binaires générés ne sont
|
||||
pas versionnés.
|
||||
|
||||
## Construction Windows native
|
||||
|
||||
QEMU se configure depuis un terminal MSYS2 MinGW64 :
|
||||
|
||||
```sh
|
||||
./configure --target-list=arm-softmmu
|
||||
ninja -C build qemu-system-arm.exe
|
||||
```
|
||||
|
||||
Le pilote UDE nécessite Visual Studio 2022 Build Tools et le WDK avec UDE. Si
|
||||
le WDK n'est pas installé à son emplacement standard, définir
|
||||
`QA6_WDK_ROOT` vers sa racine (celle qui contient `Include`, `bin` et `tools`).
|
||||
Depuis PowerShell :
|
||||
|
||||
```powershell
|
||||
.\windows\QemuA6Ude\prepare-package.ps1
|
||||
.\windows\QemuA6UsbBridge\build-bridge.ps1 -Configuration Release
|
||||
```
|
||||
|
||||
## Première installation du pilote
|
||||
|
||||
La signature d’un pilote noyau local exige le mode de signature test Windows. Cette opération modifie le BCD et demande un redémarrage. Depuis un PowerShell administrateur :
|
||||
|
||||
```powershell
|
||||
.\windows\QemuA6Ude\enable-test-mode.ps1
|
||||
Restart-Computer
|
||||
```
|
||||
|
||||
Après le redémarrage, toujours en administrateur :
|
||||
|
||||
```powershell
|
||||
.\windows\QemuA6Ude\install-driver.ps1
|
||||
```
|
||||
|
||||
Si Secure Boot bloque `testsigning`, il faut le désactiver dans l’UEFI. Le script d’installation importe uniquement le certificat public de test puis crée le contrôleur racine `Root\QemuA6Ude` avec `devcon`.
|
||||
|
||||
## Lancement normal
|
||||
|
||||
Depuis PowerShell à la racine :
|
||||
|
||||
```powershell
|
||||
.\Run-iPhone5.ps1 -SkipBuild
|
||||
```
|
||||
|
||||
Le mode USB Windows est actif par défaut. Le lanceur démarre le pont en arrière-plan, garde l’UART dans la console et écrit les échanges USB dans `build\a6-usb-bridge.log`.
|
||||
|
||||
Vérification dans un second PowerShell :
|
||||
|
||||
```powershell
|
||||
pnputil /enum-devices /connected /class USB
|
||||
& 'C:\msys64\mingw64\bin\idevicerestore.exe' -d 'iPhone_4.0_32bit_10.3.4_14G61_Restore.ipsw'
|
||||
```
|
||||
|
||||
Pour conserver l’ancien injecteur DFU interne, fournir directement une image :
|
||||
|
||||
```powershell
|
||||
.\Run-iPhone5.ps1 -DfuImagePath '.\build\firmware\iBSS.iphone5.RELEASE.dfu' -Trace
|
||||
```
|
||||
|
||||
Pour démarrer sans façade USB Windows :
|
||||
|
||||
```powershell
|
||||
.\Run-iPhone5.ps1 -NoWindowsUsb
|
||||
```
|
||||
|
||||
## Prochain jalon
|
||||
|
||||
Une fois l’énumération PnP confirmée, l’IPSW iOS 10.3.4 sera envoyé par l’`idevicerestore` original. La SecureROM vérifiera l’iBSS ; après son exécution, il faudra modéliser les périphériques supplémentaires utilisés par iBSS/iBEC et gérer sa réénumération USB Recovery pour atteindre iBoot.
|
||||
|
||||
## Reprise sur macOS
|
||||
|
||||
Le fork QEMU et l’injecteur DFU interne sont portables. Sur macOS, installez les
|
||||
dépendances QEMU, configurez `arm-softmmu`, puis compilez :
|
||||
|
||||
```sh
|
||||
./configure --target-list=arm-softmmu
|
||||
ninja -C build qemu-system-arm
|
||||
```
|
||||
|
||||
Placez ensuite le dump dans `firmware/s5l8950x-secure-rom.bin`, puis lancez :
|
||||
|
||||
```sh
|
||||
./Run-iPhone5-macOS.sh
|
||||
```
|
||||
|
||||
Pour charger l’iBSS extrait de l’IPSW sans dépendre d’un périphérique USB hôte :
|
||||
|
||||
```sh
|
||||
DFU_IMAGE="$PWD/firmware/iBSS.n41.RELEASE.dfu" ./Run-iPhone5-macOS.sh
|
||||
```
|
||||
|
||||
La façade UDE est propre à Windows. Faire apparaître le téléphone comme un vrai périphérique USB sur macOS demanderait une extension DriverKit signée ; ce n’est donc pas un raccourci par rapport au chemin UDE déjà construit.
|
||||
Reference in New Issue
Block a user