Uppdatera BIOS utan Windows

Idag skulle jag testa att uppgradera BIOS på en krånglande labbdator. En hp/compaq 8710w. Tyvärr fungerade HP:s eget program enbart under Windows och den här datorn har bara Linux installerat. Så jag beslutade mig för att göra en bootbar USB-sticka med DOS på för att upgradera BIOS från. Tyvärr fungerade inte HP:s program för att göra en sticka, med den här stickan. Ingen bättre lycka med programmet unetbootin. Då kvarstod alternativet att använda syslinux. Först stoppade jag i stickan och tittade vilket sdX nummer den fick:

dmesg
...
[sdb] Attached SCSI removable disk

Sen kollade jag att det fanns exakt en partition med typen FAT32 på stickan samt att partitionen hade boot-flaggan på med programmet fdisk:

sudo fdisk /dev/sdb
Command (m for help): p
 Device      Boot       Start  End         Blocks     Id System
 /dev/sdb1   *          63     7669823     3834880+   c  W95 FAT32 (LBA)

Ok så långt. Nu börjar det kluriga. Formattera om sdb1 (byt ut b mot bokstaven din dmesg visar överallt nedan):

sudo mkfs.vfat /dev/sdb1

Installera syslinux-filerna på partitionen:

sudo syslinux -i /dev/sdb1

Och master boot record. Obs, den ska in på sdb, inte sdb1:

sudo dd conv=notrunc bs=440 count=1 if=/usr/share/syslinux/mbr.bin of=/dev/sdb

Montera partitionen och kopiera in fler syslinux-filer. Jag skapade en katalog stick för detta ändamål:

mkdir stick
sudo mount /dev/sdb1 stick/
sudo cp /user/share/syslinux/memdisk stick/
sudo cp /user/share/syslinux/vesamenu.c32 stick/

Ladda ner en bootbar iso-fil från allbootdisks. Jag valde filen Win98_bootdisk.iso som jag kopierade till underkatalogen iso på stickan:

sudo mkdir stick/iso
sudo cp Win98_bootdisk.iso stick/iso/w98.iso

Syslinux stödjer också gzip-komprimerade iso-filer så jag komprimerade w98.iso med kommandot gzip -9 w98.iso vilket döpte om filen till w98.iso.gz. Till slut skapade jag filen syslinux.cfg direkt under stick:

DEFAULT vesamenu.c32

TIMEOUT 10

LABEL Win98 bootdisk
KERNEL memdisk
INITRD /iso/w98.iso.gz
APPEND iso raw

Klart. Nu kan stickan avmonteras och det går att boota w98 bootdisk (i stort sett samma som msdos 6.22). Men det går också att lägga in fler alternativ. Skapa en floppy image med bios-filerna:

dd if=/dev/zero of=f20mad.img bs=512 count=17280
mkfs.msdos -F 16 -n "8710w" f20mad.img
ms-sys -f -5 f20mad.img

Nu måste några bytes ändras enligt följande beskrivning:

hexedit f20mad.img
 offset 15 Media Descriptor = F0 (1.44Mb floppy drive)
 offset 18 Sectors/track (18) = 12 (back to a floppy default)
 offset 1A Heads (02) = 02 (back to floppy default)
 offset 1C-1D Hidden Sectors in Partition (0) = 00 (should already be 0)
 offset 24 Logical Drive Number of Partition = 00 (should already be 0)

Montera floppy-imagen:

mkdir floppy
sudo mount -o loop f20mad.img floppy/

Nu ska filerna från katalogen Rompaq kopieras till den virtuella floppyn. Här är de senaste bios-filern för den aktuella modellen (se till att du hämtar exakt rätt filer för din modell).

Notera att Windowsvarianten har version F.20 medan övriga har F.0F. Det går inte att använda Windowsvarianten utan … Windows. Men ladda ner den ändå. Ladda även ner F.0F för freedos. Packa upp freedos-filen:

mkdir f0f
cd f0f
7za x ../sp41954.exe
Extracting  /cd.html
Extracting  /FirmwareUpdate.exe
Extracting  /Floppy.exe
Extracting  /FreeDOS/KERNEL.SYS
Extracting  /HPUSBFW.exe
Extracting  /ISO/rom.iso
Extracting  /kernel.zip
Extracting  /Rompaq/68MAD.BIN
Extracting  /Rompaq/config.sys
Extracting  /Rompaq/gpl2.txt
Extracting  /Rompaq/KERNEL.SYS
Extracting  /Rompaq/Rompaq.exe
Extracting  /WSSP41954.rtf

Kopiera nu över alla filer från Rompaq-katalogen – utom 68MAD.BIN – till floppy-filen:

cp Rompaq/config.sys floppy/
cp Rompaq/KERNEL.SYS floppy/
cp Rompaq/Rompaq.exe floppy/

68MAD.BIN är nämligen version F.0F av BIOS-firmware. Vi vill ha F.20. Packa upp den också:

mkdir f20
cd f20
7za x ../sp55551.exe

Extracting  /HPQFlash.exe
Extracting  /ROM.CAB
Extracting  /WSSP55551.rtf

Nu var det betydligt färre filer, och ingen .BIN eller Rompaq. Men misströsta ej. Packa upp ROM.CAB med cabextract:

cabextract ROM.CAB
extracting Rom.bin
extracting Rom.sig
extracting ver.txt
extracting ver.sig

Det visar sig att den uppackade Rom.bin faktiskt är själva firmware-filen för F.20 och kan kopieras till floppyn, som 68MAD.BIN, cp Rom.bin ../floppy/68MAD.BIN. Efter det är klart, avmontera floppyn:

sudo umount floppy/
gzip -9 f20mad.img

Kopiera f20mad.img.gz till stickan och lägg till ett alternativ i syslinux.cfg (i roten på stickan):

DEFAULT vesamenu.c32

TIMEOUT 10

PROMPT 1

LABEL msdos
KERNEL memdisk
INITRD /iso/w98.iso.gz
APPEND iso raw

LABEL 8710w (68MAD) F.20
KERNEL memdisk
INITRD /hp/f20mad.img.gz

Sen upprepade jag exakt samma procedur för att även skapa en floppy för andra datorn. Den imagen kallade jag f29svd.img.gz (skapad från sp60417.exe som faktiskt innehöll en Rompaq-katalog, så det extra steget med BIN-filen behövdes inte där). Extra rader i syslinux.cfg:

LABEL 8560w (68SVD) F.29
KERNEL memdisk
INITRD /hp/f29svd.img.gz

Samt en tredje dator, 8530w, med BIOS 68PDV (den här exe-filen innehöll inte Rompaq-katalogen, så den fick tas från freedos-varianten för samma BIOS och sedan cabextract-steget för att kopiera över Rom.bin). Det är mycket viktigt att du använder filer som passar just ditt BIOS.

LABEL 8530w (68PDV) F.20
KERNEL memdisk
INITRD /hp/f20pdv.img.gz

Nu finns det alltså 4 olika bootalternativ, och det är ändå bara 6.5M på stickan. Det går utmärkt att lägga fler iso-filer under katalogen iso och lägga till dem som nya bootalternativ i syslinux.cfg. Kopiera bara de fyra raderna som börjar med ”LABEL msdos” och klistra in. På en 4 eller 8G sticka får det plats dussintals olika bootalternativ.

Mjukvaran som behövs för att utföra stegen är (förutom standard-program i Linux): ms-sys, p7zip, hexedit och syslinux. Dessa finns alla som färdiga paket att installera på både Gentoo, Debian och andra distributioner.

Advertisements

Om albertveli

Grävande programmerare.
Det här inlägget postades i Linux/DIY. Bokmärk permalänken.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s