[eepro100] trouble linking eepro100 and pci-scan into 2.4.18 kernel (unresolved symbols)

Ryan S. Upton rupton@pobox.com
Mon Jul 22 18:35:00 2002

Hello and thanks for all of the assistance you've already provided by writing these and other NIC drivers. I have exhausted other avenues and I would like to ask for a bit of help. 

There is history behind my need to have the latest kernel and eepro100 (and sundance as well) The problem is I cannot find a 'simple' way to get eepro100 or sundance to link into the current stable kernel. 

I've read (and reread..) pages on scyld. I have the most recent pci-scan.c, .h kern-compat.h eepro100.c and sundance.c (NOTE that sundance.c in the netdrivers.tgz file on scyld is 1.07, the driver alone is marked 1.09).  I replaced the drivers in the 2.4.18 stable release with these and changed the kernel provided Makefile as recommended and found some outstanding symbol problems. Namely:

$ > make dep clean bzImage && echo ______DONE_____
drivers/net/net.o: In function `speedo_found1':
drivers/net/net.o(.text+0x68): undefined reference to `acpi_set_pwr_state'
drivers/net/net.o(.text+0x4cc): undefined reference to `acpi_set_pwr_state'
drivers/net/net.o: In function `speedo_open':
drivers/net/net.o(.text+0x860): undefined reference to `acpi_set_pwr_state'
drivers/net/net.o: In function `speedo_close':
drivers/net/net.o(.text+0x1b3c): undefined reference to `acpi_set_pwr_state'
drivers/net/net.o: In function `speedo_ioctl':
drivers/net/net.o(.text+0x1cc4): undefined reference to `acpi_set_pwr_state'
drivers/net/net.o(.text+0x1ce6): more undefined references to `acpi_set_pwr_state' follow
drivers/net/net.o: In function `eepro100_probe':
drivers/net/net.o(.text+0x24cc): undefined reference to `pci_drv_register'
drivers/net/net.o: In function `sundance_probe':
drivers/net/net.o(.text+0x27e4): undefined reference to `pci_drv_register'
drivers/net/net.o: In function `sundance_pwr_event':
drivers/net/net.o(.text+0x410d): undefined reference to `acpi_set_pwr_state'
make: *** [vmlinux] Error 1

I tried a couple of workarounds in the Makefile by adding pci-scan.o:

obj-$(CONFIG_EEPRO100) += eepro100.o mii.o pci-scan.o

But even with these eventually the linker coughs up errors about an identical symbol in pci.c:

drivers/pci/driver.o: In function `pci_find_capability':
drivers/pci/driver.o(.text+0xfc): multiple definition of `pci_find_capability'
drivers/net/net.o(.text+0x2c10): first defined here
ld: Warning: size of symbol `pci_find_capability' changed from 123 to 186 in drivers/pci/driver.o
$ > 

It seems that there's SOME but not all of pci-scan already in the kernel. The pci_find_capability symbol is already in pci.c(?).  I am NOT up to rewriting the pci handling in kernel code (laughter), nor rewriting the eepro100 and sundance drivers so they do not need pci-scan. 

Can pci-scan.c from scyld be linked into 2.4.18?

I have also patched this kernel for IPVS (www.linuxvirtualserver.com) but the patches I applied do not seem to directly affect the lower layer hardware drivers any. 


There is a second problem I am having with the sundance.c version shipped with 2.4.18. Where can I send this question? (there does not seem to be a sundance list on scyld) The trouble is that there are transmit timeouts and no useabilty on a D-LINK DFE-580TX. 

Thanks for any assistance,
Ryan S. Upton