chengguozhen / netmap

Automatically exported from code.google.com/p/netmap
0 stars 0 forks source link

Build netmap fails with CentOS 6.5 #24

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1.git clone netmap on centOS.65
2.proceed to make
3.errors 

What is the expected output? What do you see instead?
make should succeed

What version of the product are you using? On what operating system?
centOS 6.5
last version of netmap from git

Please provide any additional information below.

  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_common.o
/home/devuser/Documents/netmap/LINUX/../sys/dev/netmap/netmap.c: In function 
‘netmap_attach’:
/home/devuser/Documents/netmap/LINUX/../sys/dev/netmap/netmap.c:2689: error: 
‘struct ethtool_ops’ has no member named ‘set_channels’
make[2]: *** [/home/devuser/Documents/netmap/LINUX/netmap_common.o] Error 1
make[1]: *** [_module_/home/devuser/Documents/netmap/LINUX] Error 2
make[1]: Leaving directory 
`/home/devuser/rpmbuild/BUILD/kernel-2.6.32-431.20.3.el6/linux-2.6.32-431.20.3.e
l6.x86_64'
make: *** [netmap] Error 2

Original issue reported on code.google.com by morgan.y...@gmail.com on 16 Oct 2014 at 12:04

GoogleCodeExporter commented 9 years ago
I have pushed some fixes to the next branch. Can you please check whether the 
issue is solved now?

Original comment by giuseppe.lettieri73 on 16 Oct 2014 at 9:42

GoogleCodeExporter commented 9 years ago
Hi Giuseppe:

Thanks for the update, netmap_lin.ko now compiles fine. 

However, I ran into issue building e1000e drivers

[devuser@UTraffic9 LINUX]$ make
make -C /lib/modules/2.6.32-431.20.3.el6.x86_64/build 
M=/home/devuser/Documents/netmap/LINUX 
EXTRA_CFLAGS='-I/home/devuser/Documents/netmap/LINUX 
-I/home/devuser/Documents/netmap/LINUX 
-I/home/devuser/Documents/netmap/LINUX/../sys 
-I/home/devuser/Documents/netmap/LINUX/../sys/dev -DCONFIG_NETMAP 
-Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC -DCONFIG_NETMAP_MONITOR 
-DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE'  modules CONFIG_NETMAP=m
make[1]: Entering directory `/usr/src/kernels/2.6.32-431.20.3.el6.x86_64'
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: could not find /home/devuser/Documents/netmap/LINUX/.netmap_mem2.o.cmd 
for /home/devuser/Documents/netmap/LINUX/netmap_mem2.o
make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.20.3.el6.x86_64'
cp -Rp 
/home/devuser/rpmbuild/BUILD/kernel-2.6.32-431.20.3.el6/linux-2.6.32-431.20.3.el
6.x86_64/drivers/net/e1000e .
if [ -f patches/diff--e1000e--20620--20623 ]; then patch --posix --quiet 
--force -p1 < patches/diff--e1000e--20620--20623; fi

I have attached the reject file

Original comment by morph...@gmail.com on 16 Oct 2014 at 5:42

Attachments:

GoogleCodeExporter commented 9 years ago
Yes, unfortunately we rely only on the Torvalds kernel version to select the 
drivers patch, so we fail when the linux distribution has heavily patched 
drivers on its own. If you don't need the e1000e driver, you can add

--no-driver=e1000e

to ./configure. I think igb also fails, and then you can add --no-driver=igb. 
If you need those drivers, I think you need to figure out where to put the 
rejects in the actual driver code that you have.

By the way, please note that the netmap module is now called 'netmap.ko'.

Original comment by giuseppe.lettieri73 on 16 Oct 2014 at 5:55

GoogleCodeExporter commented 9 years ago
Hi Giuseppe:

Thanks. I also noticed that despite adding in multiple "no-driver" options to 
the configure script, the drivers.mak file is actually empty, so no ixgbe files 
will be copied and patched, as a result, only the netmap.ko is built.

[devuser@UTraffic9 LINUX]$ ./configure --driver=ixgbe 
--kernel-sources=/home/devuser/rpmbuild/BUILD/kernel-2.6.32-431.20.3.el6/linux-2
.6.32-431.20.3.el6.x86_64
kernel directory            /lib/modules/2.6.32-431.20.3.el6.x86_64/build
linux version               20620  [2.6.32]
module file                 netmap.ko
subsystems                  generic monitor pipe vale
kernel sources              
/home/devuser/rpmbuild/BUILD/kernel-2.6.32-431.20.3.el6/linux-2.6.32-431.20.3.el
6.x86_64
drivers                     ixgbe

Candidate patches for this kernel:

   diff--e1000--20620--99999
   diff--e1000e--20620--20623
   diff--r8169.c--20620--20625

[devuser@UTraffic9 LINUX]$ cat drivers.mak
.PHONY: get-drivers clean-drivers
get-drivers:
clean-drivers:

[devuser@UTraffic9 LINUX]$ make
make -C /lib/modules/2.6.32-431.20.3.el6.x86_64/build 
M=/home/devuser/Documents/netmap/LINUX 
EXTRA_CFLAGS='-I/home/devuser/Documents/netmap/LINUX 
-I/home/devuser/Documents/netmap/LINUX 
-I/home/devuser/Documents/netmap/LINUX/../sys 
-I/home/devuser/Documents/netmap/LINUX/../sys/dev -DCONFIG_NETMAP 
-Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC -DCONFIG_NETMAP_MONITOR 
-DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE'  modules CONFIG_NETMAP=m
make[1]: Entering directory `/usr/src/kernels/2.6.32-431.20.3.el6.x86_64'
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_mem2.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_mbq.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_vale.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_offloadings.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_pipe.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_monitor.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_generic.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_common.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/netmap_linux.o
  LD [M]  /home/devuser/Documents/netmap/LINUX/netmap.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: could not find /home/devuser/Documents/netmap/LINUX/.netmap_mem2.o.cmd 
for /home/devuser/Documents/netmap/LINUX/netmap_mem2.o
  CC      /home/devuser/Documents/netmap/LINUX/netmap.mod.o
  LD [M]  /home/devuser/Documents/netmap/LINUX/netmap.ko.unsigned
  NO SIGN [M] /home/devuser/Documents/netmap/LINUX/netmap.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.20.3.el6.x86_64'
make -C /lib/modules/2.6.32-431.20.3.el6.x86_64/build 
M=/home/devuser/Documents/netmap/LINUX 
EXTRA_CFLAGS='-I/home/devuser/Documents/netmap/LINUX 
-I/home/devuser/Documents/netmap/LINUX 
-I/home/devuser/Documents/netmap/LINUX/../sys 
-I/home/devuser/Documents/netmap/LINUX/../sys/dev -DCONFIG_NETMAP 
-Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC -DCONFIG_NETMAP_MONITOR 
-DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE'  modules  O_DRIVERS="" \
                NETMAP_DRIVER_SUFFIX=
make[1]: Entering directory `/usr/src/kernels/2.6.32-431.20.3.el6.x86_64'
  Building modules, stage 2.
  MODPOST 0 modules
make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.20.3.el6.x86_64'

Anyhow, I modified the drivers.mak and added the get and clean stubs

get-ixgbe:
        cp -Rp /home/apcon/rpmbuild/BUILD/kernel-2.6.32-431.20.3.el6/linux-2.6.32-431.20.3.el6.x86_64/drivers/net/ixgbe .
        if [ -f patches/diff--ixgbe--20626--30000 ]; then patch --posix --quiet --force -p1 < patches/diff--ixgbe--20626--30000; fi
        if [ -f drv-subdir.mak ]; then mv ixgbe/Makefile ixgbe/orig.mak; cp drv-subdir.mak ixgbe/Makefile; fi
        touch get-ixgbe

clean-ixgbe:
        rm -rf ixgbe get-ixgbe

However, the successive patch still failed

cp -p /home/apcon/Documents/ixgbe-3.22.3/src/* ixgbe
if [ -f patches/diff--ixgbe--20626--30000 ]; then patch --posix --quiet --force 
-p1 < patches/diff--ixgbe--20626--30000; fi
5 out of 8 hunks FAILED -- saving rejects to file ixgbe/ixgbe_main.c.rej
make: *** [get-ixgbe] Error 1

I also tried it against Intel's official release with no success 
(https://downloadcenter.intel.com/Detail_Desc.aspx?agr=Y&DwnldID=14687)

I'm going to try to manually patch this one. 

Original comment by morgan.y...@gmail.com on 16 Oct 2014 at 10:13

GoogleCodeExporter commented 9 years ago
I didn't mention above that i added in an option in the configure script 
"driver=" to only build the driver specified, vs adding multiple "no-drivers" 
stubs

Original comment by morgan.y...@gmail.com on 16 Oct 2014 at 10:14

GoogleCodeExporter commented 9 years ago
Please note that the version numbers are in hex. E.g., 20626 is 2.6.38. Your 
'driver.mak' was empty because we don't have any patch for ixgbe before 
(Torvarld's) kernel 20625, i.e., 2.6.37. If you create a working patch, please 
share it :)

Re the --driver option, I think I will steal the idea. Maybe something like the 
following:

--no-drivers                   # do not build any driver
--no-drivers=drv1[,drv2[,..]]  # do not build the given drivers
--drivers=drv1[,drv2[,...]]    # only build the given drivers

Original comment by giuseppe.lettieri73 on 17 Oct 2014 at 7:31

GoogleCodeExporter commented 9 years ago
The latest commits contain an (untested) backport of the ixgbe modifications 
down to linux 2.6.32. They are always based on Torvald's kernel, and therefore 
may still not apply cleanly to Red Hat/CentOS kernels, but they may be a good 
starting point for you.

Original comment by giuseppe.lettieri73 on 17 Oct 2014 at 3:22

GoogleCodeExporter commented 9 years ago
Hi Giuseppe:

Interestingly, using patch diff-ixgbe-30500-30900 as a base (with some other 
small changes), I was able to patch the official intel ixgbe driver to compile 
on centos 6.5 (downloaded from 
https://downloadcenter.intel.com/Detail_Desc.aspx?DwnldID=14687)

I'm down to a warning for kc_simple_write, which is included in kcompat.h 
(which is not included in linus kernel source of ixgbe)

make -C /lib/modules/2.6.32-431.20.3.el6.x86_64/build 
M=/home/devuser/Documents/netmap/LINUX 
EXTRA_CFLAGS='-I/home/devuser/Documents/netmap/LINUX 
-I/home/devuser/Documents/netmap/LINUX 
-I/home/devuser/Documents/netmap/LINUX/../sys 
-I/home/devuser/Documents/netmap/LINUX/../sys/dev -DCONFIG_NETMAP 
-Wno-unused-but-set-variable -DCONFIG_NETMAP_GENERIC -DCONFIG_NETMAP_MONITOR 
-DCONFIG_NETMAP_PIPE -DCONFIG_NETMAP_VALE'  modules CONFIG_IXGBE=m  
O_DRIVERS="ixgbe/" \
                NETMAP_DRIVER_SUFFIX=
make[1]: Entering directory `/usr/src/kernels/2.6.32-431.20.3.el6.x86_64'
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_main.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_common.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_api.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_param.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_lib.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_ethtool.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/kcompat.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_82598.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_82599.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_x540.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_sriov.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_mbx.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_dcb.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_dcb_82598.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_dcb_82599.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_sysfs.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_procfs.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_phy.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_dcb_nl.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_fcoe.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_debugfs.o
  CC [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe_ptp.o
  LD [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "_kc_simple_write_to_buffer" 
[/home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe.ko] undefined!
  CC      /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe.mod.o
  LD [M]  /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe.ko.unsigned
  NO SIGN [M] /home/devuser/Documents/netmap/LINUX/ixgbe/ixgbe.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.32-431.20.3.el6.x86_64'

By examining the code, I'm not seeing anything obvious, so i'm thinking, would 
this be related to the netmap/LINUX/Makefile as kcompat itself does not exist 
on the linus linux kernel ixgbe source? Or maybe i'm just missing something 
very obvious?

I have attached the modified ixgbe_main.c against the official intel release 
3.22.3

Original comment by morgan.y...@gmail.com on 22 Oct 2014 at 7:47

Attachments:

GoogleCodeExporter commented 9 years ago
uploaded the wrong file, below is most recent

Original comment by morgan.y...@gmail.com on 22 Oct 2014 at 7:57

Attachments:

GoogleCodeExporter commented 9 years ago
I think you should use the Intel provided makefile, since it passes additional 
flags to gcc. You can try the following:

NETMAP=/path/to/netmap/dir
cd $NETMAP/LINUX
./configure --no-drivers
make
(now patch the Intel ixgbe driver in its own directory and cd where its 
Makefile is)
cp $NETMAP/Module.symvers .
make CFLAGS_EXTRA="$(cd $NETMAP; make +EXTRA_CFLAGS)"

The strange 'make +EXTRA_CFLAGS' simply prints our own EXTRA_CFLAGS, with the 
needed included paths and macro definitions. The Intel Makefile will add 
CFLAGS_EXTRA to its own EXTRA_CFLAGS before passing it to the kernel build.

Original comment by giuseppe.lettieri73 on 22 Oct 2014 at 3:28

GoogleCodeExporter commented 9 years ago
forgot to say: your ixgbe_main_mod.c looks fine, so the problem now is not in 
the patching.

Original comment by giuseppe.lettieri73 on 22 Oct 2014 at 3:40

GoogleCodeExporter commented 9 years ago
I have this same issue on Centos 6.6:

-bash-4.1$ make
make -C /lib/modules/2.6.32-504.el6.x86_64/build 
SUBDIRS=/usr/src/ixgbe-zc-3.22.3 modules
make[1]: Entering directory `/usr/src/kernels/2.6.32-504.el6.x86_64'
/usr/src/ixgbe-zc-3.22.3/Makefile:221: using config 
/lib/modules/2.6.32-504.el6.x86_64/build/include/linux/autoconf.h
  CC [M]  /usr/src/ixgbe-zc-3.22.3/ixgbe_debugfs.o
  LD [M]  /usr/src/ixgbe-zc-3.22.3/ixgbe_zc.o
  Building modules, stage 2.
/usr/src/ixgbe-zc-3.22.3/Makefile:221: using config 
/lib/modules/2.6.32-504.el6.x86_64/build/include/linux/autoconf.h
  MODPOST 1 modules
WARNING: "_kc_simple_write_to_buffer" [/usr/src/ixgbe-zc-3.22.3/ixgbe_zc.ko] 
undefined!
  CC      /usr/src/ixgbe-zc-3.22.3/ixgbe_zc.mod.o
  LD [M]  /usr/src/ixgbe-zc-3.22.3/ixgbe_zc.ko.unsigned
  NO SIGN [M] /usr/src/ixgbe-zc-3.22.3/ixgbe_zc.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.32-504.el6.x86_64'

Original comment by bhi...@gmail.com on 2 Dec 2014 at 11:10

GoogleCodeExporter commented 9 years ago
(Note that I'm building a different fork of ixgbe, but it appears to be the 
same compilation failure as above.)

Original comment by bhi...@gmail.com on 2 Dec 2014 at 11:12

GoogleCodeExporter commented 9 years ago
Have you tried the compilation method I proposed in #10?

Original comment by giuseppe.lettieri73 on 12 Dec 2014 at 1:26

GoogleCodeExporter commented 9 years ago
I successfully compiled ixgbe native driver version 3.23.2.1 from sourceforge 
e1000e project using method in #10 and patch in attachment. Thanks for 
explaination

Original comment by vadimj...@gmail.com on 31 Mar 2015 at 7:42

Attachments: