Centos7安装netmap

来源:互联网 发布:mysql 生成连续数字 编辑:程序博客网 时间:2024/06/06 03:43

因为工作需要,要在Centos上安装netmap,也许是自己太菜了,整了一天多才OK,现在把整个流程几下来,方便大家学习交流。

1. 首先介绍一下我的环境:

    我是在virtualbox上安装的Centos7, 内核版本为3.10.0-327.10.1.el7.x86_64

    内核版本使用命令uname -r可以查看


   其实原本的版本不是这个,由于查到的资料太杂乱了,期间用yum install kernel-devel安装了一次内核驱动程序(个人认为不安装一样可以),导致变成了现在这个版本, 不过问题不大,我们继续。

2. 下载安装netmap

    主要依赖ruo_yo的文章http://www.cnblogs.com/ruo-yu/p/5083290.html

    下面是下载netmap部分:

  [root@huh ~]# git clone https://github.com/luigirizzo/netmap.git

    netmap官网:http://info.iet.unipi.it/~luigi/netmap/

    netmap的githab网址:https://github.com/luigirizzo/netmap 

    netmap手册:man /root/netmap/share/man/man4/netmap.4 

    通过GitHub将netmap克隆到本地,使用命令:git clone https://github.com/luigirizzo/netmap.git

   

    克隆之后在当前目录下可以看到netmap文件夹

   

    进入netmap/LINUX

   

    执行./configure命令,这个时候会出现以下提示:

   

    主要是因为内核文件不全,netmap需要在内核目录的driver目录下查找“.c”文件,而我的系统中没有,所以要进行下面的第三大步。

3. 下载内核源代码

    参考链接:https://wiki.centos.org/zh/HowTos/I_need_the_Kernel_Source

   

如果你真的因为某个原因需要整个内核的源代码,它是有被提供的。

以一个不是 root 用户的用户,创建一个以 ~/rpmbuild 为基础的目录树:

[user@host]$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}[user@host]$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

<!> 我们强烈推荐你不要以 root 的身份构建软件包。(见:Building Source RPM as non-root under CentOS)


要在 CentOS-7 安装源代码组件及工具

以 root 的身份安装 rpm-build、redhat-rpm-config、asciidoc、bison、hmaccalc、cpatchutils、perl-ExtUtils-Embed、pesign、xmlto、audit-libs-devel、binutils-devel、elfutils-devel、elfutils-libelf-devel、ncurses-devel,newt-devel、numactl-devel、pciutils-dedvel、python-devel 及 zlib-devel 组件:

[root@host]# yum install rpm-build redhat-rpm-config asciidoc bison hmaccalc patchutils perl-ExtUtils-Embed pesign xmlto[root@host]# yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel[root@host]# yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel

从这些地方找寻内核的源代码组件:

  • http://vault.centos.org/7.N.YYMM/os/Source/SPackages/

  • http://vault.centos.org/7.N.YYMM/updates/Source/SPackages/

(请以相关的副版本编号、年度及月份取代 N.YYMM。)

以一个不是 root的普通户口,执行以下指令来安装源代码组件:

[user@host]$ rpm -i http://vault.centos.org/7.2.1511/updates/Source/SPackages/kernel-3.10.0-327.10.1.el7.src.rpm 2>&1 | grep -v exist

好吧如果你没有严格按照上面的命令写的话可能会出现警告信息:

这是说当前用户与见rpm的用户不一致,所以不用去管它,我们的文件已经生成了。

现在源代码组件已经安装了,请解压及预备源代码文件

[user@host]$ cd ~/rpmbuild/SPECS[user@host SPECS]$ rpmbuild -bp --nodeps --target=$(uname -m) kernel.spec

$(uname -m) 这个值将目标结构设置为你的现有内核的结构。一般来说这是可行的,因为多数人需要以 i686 或 x86_64 为目标。

现在内核的源代码目录树可以在 ~/rpmbuild/BUILD/kernel*/linux*/ 这个目录内找得到。

我将这个目录拷贝移到了我的usr文件夹下,使用命令:mv ~/rpmbuild/BUILD/kernel-3.10.0-123.el7/linux-3.10.0-123.el7.x86_64/ /usr/src/kernels/


现在可以在netmap/LINUX下使用configure生成Makefile文件了,这里有几点要注意:

1. Centos7的内核为3.10.0-123.el7.x86_64,这个版本的virtio_net的patch有问题,make的时候会报错:

cp -Rp /usr/src/kernels/linux-3.10.0-123.el7.x86_64/drivers/net/virtio_net.c virtio_net.c
patch --posix --quiet --force -p1 < patches/diff--virtio_net.c--30900--30b00;
4 out of 7 hunks FAILED -- saving rejects to file virtio_net.c.rej

我因为只用到ixgbe,所以也只编译了这个, 关于如何处理patch的方法,请参考我的另一篇文章:http://blog.csdn.net/superbfly/article/details/51226532

这里面有一点注意,强烈建议使用kernel版本为3.10.0-123.el7.x86_64的内核,我试了3.10.0-123.el7.x86_64,3.10.0-229.el7.x86_64,3.10.0-327.el7.x86_64这3个版本,只有这个版本的ixgbe驱动不需要更改就可以直接编译通过。


2. 需要使用--kernel-sources指定源码目录,就是我们上面解压出来的目录。

ok,现在进入netmap/LINUX执行命令:./configure --drivers=ixgbe --kernel-sources=/usr/src/kernels/linux-3.10.0-229.el7.centos.x86_64 --kernel-dir=/usr/src/kernels/linux-3.10.0-229.el7.centos.x86_64

使用--drivers=来指定要编译的驱动


如果报如下错误,就将红色方框中的命令执行一下就可以了



执行make

就会看到生成的ixgbe.ko和netmap.ko文件了。

好吧现在我们要安装驱动了

执行以下命令

rmmod ixgbeinsmod /root/netmap/LINUX/netmap.koinsmod /root/netmap/LINUX/ixgeb/ixgbe.kolsmod |grep ixgbe

这样就把驱动装上了


如果装netmap.ko是报“insmod: ERROR: could not insert module ./netmap.ko: Invalid module format”的错误。

用dmesg | grep netmap命令可会查到如下错误信息


解决方法参考:http://blog.csdn.net/superbfly/article/details/64439630


要注意:因为会网卡驱动,会导致某些链接无效,所以建议以上命令及后续的测试命令都通过虚拟机本机操作,不要通过ssh工具操作

还有就是安装完驱动之后需要重启网卡,这里使用"ifconfig   网卡名(p6p1)  up" 来启动。


使用pkt-gen程序进行收发包测试

使用./pkt-gen -i eth2 -f rx可以进行收包测试,使用./pkt-gen -i eth1 -f tx -l 64 -d 192.168.33.58可以进行netmap的 发送测试

0 0