244 lines
8.4 KiB
Text
244 lines
8.4 KiB
Text
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>
|
|
|