Fixing 3c59x.c to Avoid Invalid Checksum Errors
For some versions of the 3Com 59x cards, the 3c59x module gives the following error at boot:
***INVALID CHECKSUM 00b7*** <3>*** EEPROM MAC address invalid
This error also is listed by dmesg. It can be filtered with the command
dmesg | egrep -i invalid
Donald Becker wrote this driver, and discussed this error message here.
To paraphrase, he says:
This is harmless, as long as it happens on the new 3c905C cards. It exists
because 3Com continues to stuff more info into the EEPROM. Rather than
computing a checksum over the whole EEPROM, or having a backwards-compatible
subset and retaining the old checksum location, they keep moving the
checksum word a few bytes at a time.
The "solution" in the updated drivers is to just omit the warning with new
cards. I've never seen a report of EEPROM that became spontaneously
corrupted.
To alter the code, install the kernel source code and find the file 3c59x.c, by doing the follow:
- cd /usr/src
- find -type f -print | egrep 3c59x.c
- change to that directory
Then in a text editor, open the file 3c59x.c and comment out the if statements which check for these errors.
For example, look at these two soure files:
- This is the original source code.
- This is the fixed source code.
After you have fixed the source code, do the usual procedure to recompile the kiernel.
- cd /usr/src
- make; make modules; make modules_install;
- cp arch/i386/bzImage /boot/CHOOSE_A_FILE_NAME
- alter lilo.conf or grub.conf, and rerun the boot loader
- add 3c59x to the automatically loaded modules. The particulars of this step depend on your flavor of linux. For Gentoo the command is: "echo 3c59x >> /etc/modules.autoload.d/KERNELVERSION"
- Reboot the machine, and check that the error message has disappeared