cannot install Intel 82577 driver: problem with Makefile, Module.symvers or both
not entirely sure if this is a hardware or a kernel/distro issue but here goes:
when trying to install the driver for an Intel e100 (82557) NIC (on an IBM Thinkpad A20m) I get the following from both <make> and <make install>.... make -C /lib/modules/2.6.30.9/build SUBDIRS=/root/e100-3.5.17/src modules make[1]: Entering directory /usr/src/linux-source-2.6.30.9 WARNING: Symbol version dump /usr/src/linux-source-2.6.30.9/Module.symvers is missing: modules will have no dependencies and modversions. scripts/Makefile.build:49 *** CFLAGS was changed in "/root/e100-3.5.17/src/Makefile". Fix it to use EXTRA CFLAGS. Stop. make[1]: *** [_module_/root/e100-3.5.17/src] Error 2 make [1]: Leaving directory '/usr/src/linux-source-2.6.30.9' make: *** [default] Error 2 The NIC shows up as: (lspci) 00:03.0 Ethernet controller: Intel Corporation 82557/8/9/0/1 Ethernet Pro 100 (rev 09) The NIC LEDs light up when you plug a hot network cable into it, so it should be working There definitely isn't any network driver loaded because 1:(FATAL: Module e100.c not found), 2: there is no eth0, and 3: </etc/init.d/networking start> results in a splatterjack of error messages Cannot load the module directly (not surprising, didn't expect it to work) (insmod: error inserting 'e100.c': -l Invalid module format), same for ethtool.c Tried to modify the Makefile (KSP :=) to point it directly to the kernel source with no luck. (kernel source is at /usr/src/linux-source-2.6.30.9/ live kernel is /usr/src/linux) There are no other NICs on this laptop At this point, I'm out of ideas and have no idea where to get or how to make the 'Module.symvers' file or if it even matters since the script continues. However it does halt on the CFLAGS message. I have no idea where to modify CFLAGS in Makefile. Makefile (unmodified, provided by Intel with the driver): ################################################################################ # # Intel PRO/100 Linux driver # Copyright(c) 1999 - 2006 Intel Corporation. # # This program is free software; you can redistribute it and/or modify it # under the terms and conditions of the GNU General Public License, # version 2, as published by the Free Software Foundation. # # This program is distributed in the hope it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # more details. # # You should have received a copy of the GNU General Public License along with # this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. # # The full GNU General Public License is included in this distribution in # the file called "COPYING". # # Contact Information: # Linux NICS <linux.nics@intel.com> # e1000-devel Mailing List <e1000-devel@lists.sourceforge.net> # Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 # ################################################################################ ########################################################################### # Driver files # core driver files CFILES = e100.c HFILES = kcompat.h ifeq (,$(BUILD_KERNEL)) BUILD_KERNEL=$(shell uname -r) endif ########################################################################### # Environment tests # Kernel Search Path # All the places we look for kernel source KSP := /lib/modules/$(BUILD_KERNEL)/build \ /lib/modules/$(BUILD_KERNEL)/source \ /usr/src/linux-$(BUILD_KERNEL) \ /usr/src/linux-$($(BUILD_KERNEL) | sed 's/-.*//') \ /usr/src/kernel-headers-$(BUILD_KERNEL) \ /usr/src/kernel-source-$(BUILD_KERNEL) \ /usr/src/linux-$($(BUILD_KERNEL) | sed 's/\([0-9]*\.[0-9]*\)\..*/\1/') \ /usr/src/linux # prune the list down to only values that exist # and have an include/linux sub-directory test_dir = $(shell [ -e $(dir)/include/linux ] && echo $(dir)) KSP := $(foreach dir, $(KSP), $(test_dir)) # we will use this first valid entry in the search path ifeq (,$(KSRC)) KSRC := $(firstword $(KSP)) endif ifeq (,$(KSRC)) $(error Linux kernel source not found) else ifeq (/lib/modules/$(shell uname -r)/source, $(KSRC)) KOBJ := /lib/modules/$(shell uname -r)/build else KOBJ := $(KSRC) endif endif # check for version.h and autoconf.h for running kernel in /boot (SUSE) ifneq (,$(wildcard /boot/vmlinuz.version.h)) VERSION_FILE := /boot/vmlinuz.version.h CONFIG_FILE := /boot/vmlinuz.autoconf.h KVER := $(shell $(CC) $(CFLAGS) -E -dM $(VERSION_FILE) | \ grep UTS_RELEASE | awk '{ print $$3 }' | sed 's/\"//g') ifeq ($(KVER),$(shell uname -r)) # set up include path to override headers from kernel source x:=$(shell rm -rf include) x:=$(shell mkdir -p include/linux) x:=$(shell cp /boot/vmlinuz.version.h include/linux/version.h) x:=$(shell cp /boot/vmlinuz.autoconf.h include/linux/autoconf.h) CFLAGS += -I./include else ifneq (,$(wildcard $(KOBJ)/include/linux/utsrelease.h)) VERSION_FILE := $(KOBJ)/include/linux/utsrelease.h else VERSION_FILE := $(KOBJ)/include/linux/version.h endif CONFIG_FILE := $(KSRC)/include/linux/autoconf.h endif else ifneq (,$(wildcard $(KOBJ)/include/linux/utsrelease.h)) VERSION_FILE := $(KOBJ)/include/linux/utsrelease.h else VERSION_FILE := $(KOBJ)/include/linux/version.h endif CONFIG_FILE := $(KSRC)/include/linux/autoconf.h endif ifeq (,$(wildcard $(VERSION_FILE))) $(error Linux kernel source not configured - missing version.h) endif ifeq (,$(wildcard $(CONFIG_FILE))) $(error Linux kernel source not configured - missing autoconf.h) endif # pick a compiler ifneq (,$(findstring egcs-2.91.66, $(shell cat /proc/version))) CC := kgcc gcc cc else CC := gcc cc endif test_cc = $(shell $(cc) --version > /dev/null 2>&1 && echo $(cc)) CC := $(foreach cc, $(CC), $(test_cc)) CC := $(firstword $(CC)) ifeq (,$(CC)) $(error Compiler not found) endif # we need to know what platform the driver is being built on # some additional features are only built on Intel platforms ARCH := $(shell uname -m | sed 's/i.86/i386/') ifeq ($(ARCH),alpha) CFLAGS += -ffixed-8 -mno-fp-regs endif ifeq ($(ARCH),x86_64) CFLAGS += -mcmodel=kernel -mno-red-zone endif ifeq ($(ARCH),ppc) CFLAGS += -msoft-float endif ifeq ($(ARCH),ppc64) CFLAGS += -m64 -msoft-float LDFLAGS += -melf64ppc endif # standard flags for module builds CFLAGS += -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall CFLAGS += -I$(KSRC)/include -I. CFLAGS += $(shell [ -f $(KSRC)/include/linux/modversions.h ] && \ echo "-DMODVERSIONS -DEXPORT_SYMTAB \ -include $(KSRC)/include/linux/modversions.h") CFLAGS += $(CFLAGS_EXTRA) #ifeq (,$(shell echo $(CFLAGS_EXTRA) | grep NAPI)) #CFLAGS += -DE100_NO_NAPI #CFLAGS_EXTRA += -DE100_NO_NAPI #endif RHC := $(KSRC)/include/linux/rhconfig.h ifneq (,$(wildcard $(RHC))) # 7.3 typo in rhconfig.h ifneq (,$(shell $(CC) $(CFLAGS) -E -dM $(RHC) | grep __module__bigmem)) CFLAGS += -D__module_bigmem endif endif # get the kernel version - we use this to find the correct install path KVER := $(shell $(CC) $(CFLAGS) -E -dM $(VERSION_FILE) | grep UTS_RELEASE | \ awk '{ print $$3 }' | sed 's/\"//g') KKVER := $(shell echo $(KVER) | \ awk '{ if ($$0 ~ /2\.[4-9]\./) print "1"; else print "0"}') ifeq ($(KKVER), 0) $(error *** Aborting the build. \ *** This driver is not supported on kernel versions older than 2.4.0) endif # set the install path INSTDIR := /lib/modules/$(KVER)/kernel/drivers/net/e100 # look for SMP in config.h SMP := $(shell $(CC) $(CFLAGS) -E -dM $(CONFIG_FILE) | \ grep -w CONFIG_SMP | awk '{ print $$3 }') ifneq ($(SMP),1) SMP := 0 endif ifneq ($(SMP),$(shell uname -a | grep SMP > /dev/null 2>&1 && echo 1 || echo 0)) $(warning ***) ifeq ($(SMP),1) $(warning *** Warning: kernel source configuration (SMP)) $(warning *** does not match running kernel (UP)) else $(warning *** Warning: kernel source configuration (UP)) $(warning *** does not match running kernel (SMP)) endif $(warning *** Continuing with build,) $(warning *** resulting driver may not be what you want) $(warning ***) endif ifeq ($(SMP),1) CFLAGS += -D__SMP__ endif ########################################################################### # 2.4.x & 2.6.x Specific rules K_VERSION:=$(shell uname -r | cut -c1-3 | sed 's/2\.[56]/2\.6/') ifeq ($(K_VERSION), 2.6) # Makefile for 2.6.x kernel TARGET = e100.ko # man page MANSECTION = 7 MANFILE = $(TARGET:.ko=.$(MANSECTION)) ifneq ($(PATCHLEVEL),) EXTRA_CFLAGS += $(CFLAGS_EXTRA) obj-m += e100.o else default: ifeq ($(KOBJ),$(KSRC)) make -C $(KSRC) SUBDIRS=$(shell pwd) modules else make -C $(KSRC) O=$(KOBJ) SUBDIRS=$(shell pwd) modules endif endif else # ifeq ($(K_VERSION),2.6) # Makefile for 2.4.x kernel TARGET = e100.o # man page MANSECTION = 7 MANFILE = $(TARGET:.o=.$(MANSECTION)) # Get rid of compile warnings in kernel header files from SuSE ifneq (,$(wildcard /etc/SuSE-release)) CFLAGS += -Wno-sign-compare -fno-strict-aliasing endif # Get rid of compile warnings in kernel header files from fedora ifneq (,$(wildcard /etc/fedora-release)) CFLAGS += -fno-strict-aliasing endif .INTERMEDIATE: e100_tmp .SILENT: e100_tmp e100_tmp: $(CFILES:.c=.o) echo; echo echo "**************************************************" echo "** $(TARGET) built for $(KVER)" echo -n "** SMP " if [ "$(SMP)" = "1" ]; \ then echo "Enabled"; else echo "Disabled"; fi echo "**************************************************" echo $(CFILES:.c=.o): $(HFILES) Makefile default: make endif # ifeq ($(K_VERSION),2.6) ifeq (,$(MANDIR)) # find the best place to install the man page MANPATH := $(shell (manpath 2>/dev/null || echo $MANPATH) | sed 's/:/ /g') ifneq (,$(MANPATH)) # test based on inclusion in MANPATH test_dir = $(findstring $(dir), $(MANPATH)) else # no MANPATH, test based on directory existence test_dir = $(shell [ -e $(dir) ] && echo $(dir)) endif # our preferred install path # should /usr/local/man be in here ? MANDIR := /usr/share/man /usr/man MANDIR := $(foreach dir, $(MANDIR), $(test_dir)) MANDIR := $(firstword $(MANDIR)) endif ifeq (,$(MANDIR)) # fallback to /usr/man MANDIR := /usr/man endif # depmod version for rpm builds DEPVER := $(shell /sbin/depmod -V 2>/dev/null | \ awk 'BEGIN {FS="."} NR==1 {print $$2}') ########################################################################### # Build rules $(MANFILE).gz: ../$(MANFILE) gzip -c $< > $@ install: default $(MANFILE).gz # remove all old versions of the driver find $(INSTALL_MOD_PATH)/lib/modules/$(KVER) -name $(TARGET) -exec rm -f {} \; || true find $(INSTALL_MOD_PATH)/lib/modules/$(KVER) -name $(TARGET).gz -exec rm -f {} \; || true install -D -m 644 $(TARGET) $(INSTALL_MOD_PATH)$(INSTDIR)/$(TARGET) ifeq (,$(INSTALL_MOD_PATH)) /sbin/depmod -a || true else ifeq ($(DEPVER),1 ) /sbin/depmod -r $(INSTALL_MOD_PATH) -a || true else /sbin/depmod -b $(INSTALL_MOD_PATH) -a -n $(KVERSION) > /dev/null || true endif endif install -D -m 644 $(MANFILE).gz $(INSTALL_MOD_PATH)$(MANDIR)/man$(MANSECTION)/$(MANFILE).gz man -c -P'cat > /dev/null' $(MANFILE:.$(MANSECTION)=) || true uninstall: if [ -e $(INSTDIR)/$(TARGET) ] ; then \ rm -f $(INSTDIR)/$(TARGET) ; \ fi /sbin/depmod -a if [ -e $(MANDIR)/man$(MANSECTION)/$(MANFILE).gz ] ; then \ rm -f $(MANDIR)/man$(MANSECTION)/$(MANFILE).gz ; \ fi .PHONY: clean install clean: rm -rf $(TARGET) $(TARGET:.ko=.o) $(TARGET:.ko=.mod.c) $(TARGET:.ko=.mod.o) $(CFILES:.c=.o) $(MANFILE).gz .*cmd .tmp_versions |
Upgrade the kernel to at least 2.6.31. The kernel version 2.6.31 has support for Intel 82577 gigabit NIC.
|
All times are GMT -5. The time now is 11:21 AM. |