I've no code in flashrom yet, but I made a flashrom compatible arduino programmer and participated in testing and documentation.
Mainboard based programmers
|Device or programmer||Flash chip||Test result|
|M4A785T-M mainboard||W25x80 (DIP8)||
|Device or programmer||Status|
|Arduino uno (serprog)||
* Requires a 5v->3.3v level shifter for most current flash chips. * Issues with the 8u2/8u3 when using the serial port at high speed.
|Arduino duemillanove (serprog)||
* Requires a 5v->3.3v level shifter for most current flash chips. * Works fine otherwise.
|openmoko debug board (openmoko)||
|Old 3com PCI NIC||
|Really old PCI realtek cards||
|Some GNU/Linux embedded boards (linux_spi)||
An atahpt that doesn't work when adding its PCI IDs(but atahpt are known not to work according to the mailing list)
A very old AGP Nvidia card => works with a patch
- A recent geforce 210 that didn't work when adding the PCI IDs
I've also the following hardware:
- pomona clip for recovering my x60
- some chips(2MB SO8(currently soldered), 16MB SO8)
Work in progress for the wiki
Don't try that, it's dangerous!!!!
Howto(Dangerous, not ready for the wiki)
Howto flash sgabios on an Nvidia video card
- Servers often lack a screen.
- Some blind people also lack a way to see the startup of the computer until the braille tablet is running.
This Howto will help you transform your Nvidia video card in a something that send to a serial port what would have been displayed on the screen. The card will probably stop working as a graphic card due to the lack of VGA option rom tailored to the card.
The user is expected to see the output trough a serial console.
Here's an example on how to flash sgabios on an Nvidia video card:
- download flashrom
- apply that patch:
diff --git a/gfxnvidia.c b/gfxnvidia.c index d0a9feb..35e4687 100644 --- a/gfxnvidia.c +++ b/gfxnvidia.c @@ -110,7 +110,7 @@ int gfxnvidia_init(void) rpci_write_long(dev, 0x50, reg32); /* Write/erase doesn't work. */ - programmer_may_write = 0; + //programmer_may_write = 0; register_par_programmer(&par_programmer_gfxnvidia, BUS_PARALLEL); return 0;
- compile it
- download and build sgabios
- Identify your flash chip size by running:
- save the content of the chip with:
flashrom -pgfxnvidia -r original.rom
- pad sgabios to the size of your flashchip:
dd if=/dev/zero of=sgabios.rom bs=1 count=65536 dd if=10b79200.rom of=sgabios.rom conv=notrunc
- flash it(and retry in case of failure, it has a high failure rate)
Howto flash ipxe on an 3com network card
$ git clone git://git.ipxe.org/ipxe.git
Then locate your network card with:
# lspci -nnnn
it will look like that:
[...] 00:0c.0 Ethernet controller : 3Com Corporation 3c905C-TX/TX-M [Tornado] [10b7:9200] (rev 78) [...]
Note the pci ids that are here: [10b7:9200]
Ajust your settings in src/config/local/
Then build ipxe:
cd ipxe/src/ make bin/10b79200.rom
Then backup the existing rom:
cd ../../ flashrom -pnic3com -r 3com_rom_backup.rom
The flashchip size is written in the output of that command.
Then generate a rom that is exactly the size of your rom chip:
dd if=/dev/zero of=bin/10b79200.rom.64k bs=1 count=65536 dd if=bin/10b79200.rom of=bin/10b79200.rom.64k conv=notrunc