Il peut arriver que suite à une mise à jours ou des modifications de bios, votre ordinateur ne démarre plus, il est possible de reprogrammer simplement et à peu de frais certains bios.

Montage Bus Pirate

Il est possible d’utiliser le Bus Pirate pour reprogrammer un bios de type SPI, dans cet exemple le MX25L1605D d’une carte ASUS P5Q-Deluxe.
flashrom 0.9.9 est compatible avec le Bus Pirate.

Pour lire le composant (cela peut rester bloqué sur Reading flash… quelques minutes, il faut patienter.
$ flashrom -p buspirate_spi:dev=/dev/ttyUSB0 -c "MX25L1605D/MX25L1608D/MX25L1673E" -r dump.bin
flashrom v0.9.9-r1954 on Linux 4.8.0-42-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L1605D/MX25L1608D/MX25L1673E" (2048 kB, SPI) on buspirate_spi.
Reading flash... done.

Pour reprogrammer le composant :
$ flashrom -p buspirate_spi:dev=/dev/ttyUSB0,spispeed=1M -c "MX25L1605D/MX25L1608D/MX25L1673E" -w P5Q-ASUS-DELUXE-2301.ROM
flashrom v0.9.9-r1954 on Linux 4.8.0-42-generic (x86_64)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L1605D/MX25L1608D/MX25L1673E" (2048 kB, SPI) on buspirate_spi.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.

Montage Sergey

Dans cet exemple nous verrons le cas d’un bios stoqué sur un composant SST25VF016B.

Pour le programmer j’ai utilisé le montage et le logiciel décrit sur ce site de Sergey

Une fois le montage effectué et le programme compilé ça donne un truc du genre :

$ sudo ./spi_programmer id
Device ID: 0xbf2541

On a donc bien le Device ID (il ne doit ni être 0x0 ni 0xffffff).

Il faut ensuite effacer le composant :

$ sudo ./spi_programmer erase

Puis programmer avec le fichier du bios :

$ sudo ./spi_programmer write bios.bin

Pour être sur de bien avoir programmé je conseille une relecture de celui ci et un diff avec le fichier original :

$ sudo ./spi_programmer read bios.prog.bin

$ vbindiff bios.bin bios.prog.bin

S’il n’y a aucune différence entre les fichiers c’est que ça a bien été programmé.

Et voilà, il ne vous reste plus qu’à ressouder la puce sur votre carte mère et à démarrer normalement.

PS: chez moi le montage de type RayeR ne fonctionnait ni avec flashrom 0.9.3 ni avec son programme SPIPGM, les données programmées et lues n’étaient pas les bonnes, c’est pour cela que je suis passé sur le montage de Sergey avec un buffer inverseur 4049.