| NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! |
| |
| /dev/bios is obsolete and no longer under development. |
| Please use the flashrom utility instead: https://www.flashrom.org/ |
| |
| NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! NOTE! |
| |
| |
| /dev/bios documentation 2002/02/19 |
| |
| Table of contents |
| ------------------ |
| |
| 1. What is /dev/bios? |
| 2. What hardware/software do I need to run /dev/bios? |
| 3. Where to get the latest release of /dev/bios |
| 4. How to get /dev/bios work |
| 5. Writing to the devices |
| 6. About PCI chipsets (ix86 only) |
| 7. About APM Powermanagement (ix86 only) |
| 8. About different flashchips. |
| 9. Hints for BIOS flashing |
| |
| If you want better information on this driver, read the ChangeLog, |
| mail me or read the source, Luke :-) |
| |
| 1. What is /dev/bios? |
| ---------------------- |
| |
| This is a kernel driver for different kinds of (Flash)BIOSs that are |
| available in today's hardware. |
| |
| There are well known BIOSs for |
| - System BIOS (resides at 0xe0000 on Intel PCs) |
| - graphics hardware |
| - SCSI host adapters |
| - networking interfaces with 'BOOT ROM' |
| - ... |
| |
| While in former times these BIOSs were implemented by using ROM or |
| EPROM (both can't be updated without opening your computer) today's |
| PC hardware is often delivered with so called FLASH ROMs. These |
| can simply be updated by software. This driver has the approach to |
| make Linux read and write flash roms. |
| |
| One word before you read ahead: This is still alpha software and |
| writing to your flash roms may destroy them. So if you notice anything |
| strange, don't even think about going on, but write some mail to: |
| |
| Stefan Reinauer <stefan.reinauer@coreboot.org> |
| |
| Please note that I am not responsible in any way for what you |
| do with this code or for what this code does with your computer. |
| |
| 2. What hardware/software do I need to run /dev/bios? |
| ------------------------------------------------------ |
| |
| Currently this driver supports ix86 (mainly Pentium, |
| PPro, PII/III, Athlon, but some 486s), Itanium and Alpha |
| architecture. |
| It supports all flash chips from 32k to 2M (theoretically). |
| Minimum kernel version is v2.2.x, but it's wise to use a |
| 2.4.x kernel. |
| |
| 3. Where to get the latest release of /dev/bios? |
| ------------------------------------------------- |
| |
| /dev/bios was recently integrated into the OpenBIOS CVS |
| tree for easier maintainance. General information can be |
| found on the /dev/bios status page: |
| http://www.freiburg.linux.de/OpenBIOS/status/devbios.html |
| Latest releases of /dev/bios can be found at the download page: |
| http://www.freiburg.linux.de/OpenBIOS/dev/download.html |
| Latest development trees of /dev/bios can be found in the |
| OpenBIOS CVS. For information how to access it, go to |
| http://www.freiburg.linux.de/OpenBIOS/dev/cvs.html |
| |
| 4. How do I get /dev/bios work |
| ------------------------------- |
| |
| Create the system bios device with |
| |
| mknod /dev/bios c 104 0 |
| |
| Now you can add devices for the other BIOSs (often known as option |
| roms) in your Computer, i.e. like this: |
| |
| mknod /dev/gfxbios c 104 1 |
| mknod /dev/hddbios c 104 2 |
| mknod /dev/netbios c 104 3 |
| |
| The order of the devices may vary on your computer, maybe you even don't |
| have a flash bios on your network card or on your scsi host adapter. You will |
| have to decide this after playing around a bit. |
| |
| Now you have to compile and insert the kernel driver module: |
| |
| cd devbios |
| make clean && make |
| insmod bios.o |
| |
| Now you have a new device, /dev/bios and, if you have |
| your kernel configured to have the /proc/ interface, |
| you have a status file /proc/bios. |
| |
| Since this driver is in an early state, you should have |
| a look at dmesg very often. |
| |
| 5. Writing to the devices |
| -------------------------- |
| |
| If you insert bios.o without any options, you are not able |
| to write any of the devices. To enable writing, you should |
| use |
| insmod bios.o write=1 |
| |
| Writing is now possible with i.e. |
| dd if=yourbios.bin of=/dev/bios bs=128k count=1 |
| or |
| dd if=yourbios.bin of=/dev/bios bs=256k count=1 |
| |
| depending on the size of your flash chip. |
| |
| You can use 'cat' for flashing as well. Note: Many flashchips are |
| sectored and the whole sector has to be rewritten, the 4k clusters |
| of cat may be very slow (and an 112 kb sector has to be written 28 |
| times completely instead of 1 time with dd) |
| |
| Make sure that your file "yourbios.bin" is a valid bios image for |
| your motherboard and that it is not pkzipped or exe-pkzipped. |
| (Usually, a 128kb bios images consist of 112kb lha-compressed data, |
| 2*4kb ESCD and DMI (PnP) Data and an 8 kb emergency boot block.) |
| |
| Writing to /dev/bios does not work for many chips right now. Write |
| accesses are ignored in this case. If you want an unsupported flash |
| rom supported, please mail me. |
| WARNING: Setting an unsupported chip to "supported" without changing |
| the rest of the code will *very likely* destroy the contents of your |
| chip. |
| |
| On machines with an AWARD bios you can test whether writing works |
| safely by only deleting the ESCD/DMI memory on the flash chip. |
| This data is rewritten by the bios when empty, corrupted or when |
| you put in a new expansion device. In that case you should see a |
| message stating "Updating ESCD" during the next boot. |
| |
| Please have a close look at the size of your flash chip. For 128k |
| flash chips, try |
| |
| dd if=/dev/zero of=/dev/bios bs=4096 seek=28 count=2 |
| |
| For 256k flash chips, you _MUST_ use the following line instead, |
| or your system bios is going byebye: |
| |
| dd if=/dev/zero of=/dev/bios bs=4096 seek=56 count=2 |
| |
| Attention: I found other machines with their ESCD memory in the |
| first sectors of the flash chip. These are afaics 512k+ chips |
| often connected via a firmware hub. |
| Behaviour of other BIOSs may be similar, but I can't give you |
| any warranty it works. |
| |
| NOTE: If you listen to music from your soundcard while flashing, |
| you may get errors like this: |
| Sound: DMA (output) timed out - IRQ/DRQ config error? |
| |
| Second, sound switches off while flashing. This is because all |
| IRQs are blocked while the write procedure to ensure it doesn't |
| get disturbed by any other hardware. |
| |
| 6. About PCI chipsets |
| ---------------------- |
| |
| Because this driver uses direct PCI accesses to switch shadowing |
| and write protection of the bios off on PC architecture, each PCI |
| chipset (or at least chipset group) has to be implemented and |
| tested seperately. Successfully tested PCI chipsets are |
| |
| * Intel 430HX/TX, 440BX/ZX, 460, 8x0 |
| * UMC 486 (8881F/8886A) |
| * VIA (M)VP3 |
| * AMD Irongate and others |
| * ServerWorks chipsets |
| * NSC CS5530 (geode companion) |
| |
| Any success/error reports are highly welcome. If you need a certain |
| system type supported, contact me. |
| |
| |
| 7. About APM Power Management (ix86 only) |
| ------------------------------------------ |
| |
| This driver is known to cause kernel oopses with some of the chipset |
| drivers when APM is enabled. Reason is that the flash chip is mapped |
| to the low bios address space which makes the unpacked bios image vanish |
| so all pointers to APM functions are invalid. |
| Nowadays most of the chipset drivers only map the high bios area, so |
| this problem should not occur on any but old UMC/SiS chipsets. If you |
| encounter oopses while reading/probing flash devices, disable power |
| management before any write attempts. To achieve so, please pass "apm=off" |
| as a kernel option, if your kernel is compiled with APM support. |
| |
| |
| |
| 8. About different flashchips |
| ------------------------------ |
| |
| Flash chips, /dev/bios has been successfully tested (writing) on: |
| |
| * Winbond 29EE011 |
| * Intel 28F008(SA) |
| * Atmel AT29C512 |
| * SST 29EE010, 39SF020 |
| |
| It *should* work, if you see a "Supported: yes" in /proc/bios, but |
| I am not responsible in any way for what you do.. Please be careful. |
| Please report any working flash chips so that this list can be completed. |
| Currently many more flash chips than mentioned here will work. |
| If you need a certain flash device supported, contact me. |
| |
| 9. Hints for BIOS-Flashing |
| --------------------------- |
| |
| * Always try to write to the ESCD/DMI Memory before you overwrite the rest |
| of a bios (ix86) If you get ANY errors in dmesg output, DO NOT CONTINUE! |
| * Always "diff" the new bios with the written image before rebooting |
| * You may use comp, a little utility in the devbios source tree instead |
| of diff. It has a nicer output for binary files. |
| * on Intel, only write the first 120k of an image to the System ROM, this keeps |
| the emergency bootblock working. |
| |
| ************** FINAL NOTE ***************************** |
| |
| If you want to help this project, send me |
| |
| * /proc/bios-output |
| * dmesg-output (after insmodding the driver) |
| * your system-configuration |
| (e.g. output of lspci or /proc/bus/pci/devices) |
| * any comments |
| * any ideas |
| |
| Stefan Reinauer <stefan.reinauer@coreboot.org> |
| |