Die einfachste Lösung um AMT zu patchen ist die Erstellung eines
PXE-bootbaren Images, welches beim Start direkt das Flash-Programm
aufruft. Ein solches Image kann auch genutzt werden, um einen bootbaren USB-Stick für das Patchen zu erstellen.
FreeDOS
Für ein PXE-bootbares Patchen ist FreeDOS gut geeignet (http://www.freedos.org/). Die Vorbereitung des bootbaren Images kann z. B. in VirtualBox durchgeführt werden.
Build-Umgebung
Für das Erstellen von FreeDOS-Bootmedien gibt es eine ausführliche Anleitung hier:
https://github.com/shidel/FDI/wiki/Creating-a-FDI-based-FreeDOS-installer
Nach der Installation der Build-Umgebung musste in der Datei
C:\FDI\MKFDI.BAT die Grösse der für den Build genutzen RAM-Disk von 32
auf 31 MB verkleinert werden:
set RAMSIZE=31000K
Nun kann mit
mkfdi all
oder
mkfdi slim
der Bau aller
(Floppy ~1.4 MB, Lite 32 MB oder Full ~512 MB) resp. nur des mittleren Images ausgelöst werden. Wegen der Grösse des AMT-Patchfiles (8 - 9 MB) kann das Floppy-Image
nicht genutzt werden, das Lite ist für einzelne Patches ausreichend gross. Sollen mehrere Varianten der Updates auf einer Disk vorgehalten werden, ist auch die Grenze des Lite-Images schnell erreicht und das Full-Image notwendig.
Nach dem Bau des Images wird das Build-System nicht mehr benötigt, das
Hinzufügen von Daten und Editieren von Dateien kann direkt auf der ins
Gastsystem gemounteten Disk erfolgen.
Platz machen
Um Platz für die Patches zu schaffen, können Verzeichnisse gelöscht werden; wichtig ist nur das Verzeichnis
\FDSETUP\BIN
aus welchem einige Programme während des Bootvorgangs geladen werden. Auf dem Lite-Image können so ca. 27 MB frei gemacht werden, auf dem Full-Image über 500 MB.
Datenaustausch mit Wirtssystem
Da es keine VM-Tools für FreeDOS gibt, ist der Zugriff auf die
virtuellen Disks aus dem Wirtssystem der einfachste Weg.Dazu gibt es das
Linux-Paket libguestfs-tools mit den Tools guestmount und guestunmount.
Beide Befehle können als normaler Benutzer verwendet werden.
Die für den Build benutzten VM-Disk (nicht die Boot-Disk der VM) wird gemountet mit:
guestmount -a FD12FULL.img -m /dev/sda1 /home/bgiger/vhd
Die Bezeichnung /dev/sda1 meint dabei die erste Partition in der VM-Disk, nicht die des Wirt-Systems! Unmount entsprechend:
guestunmount /home/bgiger/vhd
Auf die gemountete Disk können nun Dateien kopiert werden, auch Editieren ist möglich (Schreiben forcieren in vi mit "w!"). Selbstverständlich darf nur geschrieben werden, solange die Disk nicht in der VM gemountet ist.
Tools und Patch-Dateien
Patcher
Unter DOS laufende Patch-Programme (FWUpdLcl.exe) für alle AMT-Versionen können hier gefunden werden:
http://www.win-raid.com/t596f39-Intel-Management-Engine-Drivers-Firmware-amp-System-Tools.html. Die Pakete enthalten Patcher für Windows und DOS.
Patch-Dateien
Die AMT-Patches sind i. A. modellspezifisch und müssen direkt beim Hersteller bezogen werden!
Auslesen von Boot-Parametern
PXE-Bootumgebungen ermöglichen die Angabe von Parametern, was mit Hilfe eines zusätzlichen DOS-Programmes auch in FreeDOS genutzt werden kann: https://github.com/PerditionC/memdisk_getargs
getargs.com wird ins Wurzelverzeichnis des Disk-Images kopiert.
Konfiguration von FreeDOS
Der Patch-Vorgang wird gestartet durch
FWUPDLCL.EXE -y -f <Patch-Datei>
Parametrisierung
Die Scripting-Möglichkeiten in DOS sind beschränkt im Vergleich zu Linux. So kehrt z. B. ein aufgerufenes Script nicht wieder zurück, Folgebefehle im aufrufenden Script werden nicht ausgeführt.
Bereitstellung in PXE
Für das Laden des Images wird memdisk aus dem syslinux-Paket verwendet. Zusammen mit dem Disk-Image kommt es in ein Verzeichnis auf
Das Disk-Image (Lite oder Full) kann nun in einem PXE-Menu eingebunden werden; die Pfade zu memdisk und dem Image sind den Gegebenheiten anzupassen:
label freedos
menu label AMT-Update P910
kernel ../img/freedos/memdisk
append initrd=../img/freedos/amtpatch.img HARDWARE=FE_P910 VERSION=FWUPD-81 PATCH=ME8.BIN
In diesem Beispiel werden FreeDOS die Parameter HARDWARE, VERSION und PATCH als Parameter übergeben.