Need help to calculate new checksum in bios file

Don't ask how to hack password. (BIOS Passwords)
Post Reply
ciper
New visitors - please read the rules.
Posts: 3
Joined: Wed Mar 21, 2007 9:10 pm

After many hours of research I have found a way to add a new mini pci wireless card to my systems bios, however I have ran into an issue calculating the checksum of the file. This is on a Dell Latitude D800.

So far I have figured out how to extract the current bios of the system, extract the image from the dell upgrade utility and write an external file to the bios. I tested this method by flashing the Precision M60 bios to my machine.

I have hex edited the new PCI ID of my wireless card but I need to recalculate the checksum. The only tool I have found that can write the bios files is the dell update executable but it doesnt have a command line switch to ignore the checksum error.

I have a good guess where the checksum was stored in the HDR file (by comparing it to the rom that I extracted from the machine). The major difference lies in the header and footer of the files. This page http://benyouhui.it168.com/thread-477943-1-1.html documents the checksum and a girlfriend of mine helped me read it. She isnt technical so the translation may not be correct but according to her the checksum is stored in the last 8 bytes of the file and only 4 bytes are used?

Anyways I need your help. From what others have told me the checksum is calculated by adding up the entire file in hex. If you download any of the d800 or m60 bios and use the writehdrfile option you can will see the CRC stored within the last 8 bites of the file.
ciper
New visitors - please read the rules.
Posts: 3
Joined: Wed Mar 21, 2007 9:10 pm

The inspiration for this post is an Intel 2915ABG that I want to use in place of an Intel 2200bg. My laptop was originally Centrino based. When I use the (completely driver compatible) 2915 the machine loses its centrino logo and the bios reports it as "unknown wireless card" . Secondly in windows I get the "This device cannot start. (Code 10)" error which from my experience comes from the card not being initialized properly. In order to verify the card is not broken I booted an Ubuntu livedvd and was able to connect to a wep encrypted network and browse the internet.
edwin
The Hardware Archivist
Posts: 6286
Joined: Wed Mar 20, 2002 7:11 pm
Location: Netherlands
Contact:

The usual method of getting the checksum right is opening the bios in the editor made for that particular bios. Is this Phoenix, Award or AMI based?
edwin/evasive

Do not assume anything

System error, strike any user to continue...
ciper
New visitors - please read the rules.
Posts: 3
Joined: Wed Mar 21, 2007 9:10 pm

It is a modified Pheonix based bios that doesnt seem to work properly in the editors I tried.

I still want to figure this out but I found a work around! Instead of changing the bios to include a new PCI ID I modified the eeprom on the network card to match the ID listed in the D800/M60 bios!

Here is a quick rundown of what I did. Its from memory so dont kill me if I forgot something!

Using a combination of information scattered all over the web and my own intuition I changed my card from 80864224 sub 10108086 (IBM 2915abg) to the retail intel adapter id of 80864223 10208086.

One thing missing from the tutorial using the patched intel drivers you may find around the web is the recalculation of the checksum command "modprobe ipw2200 repair_eeprom=1"

Here is specifically what I did. I booted the Knoppix live cd version 3.8.2 . At the terminal I ran "sudo -s" to give root access. I used the browser to save the patched intel drivers to /tmp and extracted them (drivers that allow eeprom access). I then ran "sh unload" to remove the standard drivers and "sh load" from the directory of the etracted drivers. I used "lspci -nv" to verify the current ID of my card was listed. I then ran "ethtool -e ethX" substituting 1-4 for X until I saw the correct vendor ID at 0x4 through 0x7 and the right sub id at 0x8 0x11 in the eeprom dump. I only needed to change one byte of the vendor id and one byte of the sub id so I ran "ethtool -E eth1 magic 0x2200 offset 0x4 value 0x23" then
"ethtool -E eth1 magic 0x2200 offset 0x8 value 0x20" . I ran "ethtool -e ethX" again and made sure there were no typos then ran "rmmod ipw2200" followed by "sh load" and finally "modprobe ipw2200 repair_eeprom=1"

I then exited the console and instructed Knoppix to shut the machine off. After power on I finally saw the magical Centrino logo! I booted into windows and my card was detected properly and immediately started working

This mehod will work with any 2200bg or 2915abg cards assuming you use the CORRECT ID modifications. Don't copy my command line word for word unless you have a 2915abg and want to turn it into a US spec retail Intel card. If you need to modify a 2200bg or make a 2915abg work in another region or detect as an IBM or HP card the easiest way is to read the inf file included with the current windows driver to find the entire pci id for the card you are trying to create.


I'm still going to try and find a way to calculate the checksum of the Dell bios - it would help us make other modifications possible
edwin
The Hardware Archivist
Posts: 6286
Joined: Wed Mar 20, 2002 7:11 pm
Location: Netherlands
Contact:

Yep indeed. Thanks for sharing your knowledge so far :D
edwin/evasive

Do not assume anything

System error, strike any user to continue...
Post Reply