DPDK使用make编译并运行示例程序

       环境:
       VMware® Workstation 16 Pro 16.2.4
       虚拟机系统:Centos 8
       DPDK版本:stable-20.11.10

       下载源码后,使用meson和ninja编译完成、配置并挂载大页、内核和VFIO设置完成,在dpdk源码目录下的build/example中有可以直接运行的程序:
在这里插入图片描述
       但是这是使用meson和ninja编译的。使用make编译可以在dpdk源码目录下:

/home/wls/dpdk-stable-20.11.10/examples

在这里插入图片描述
这里有源码自带的例子,可以自己使用make编译并运行,也可以自己写程序放在这个目录下编译。
       这里编译源码自带的helloworld程序。开头makefile变异就遇到问题:
在这里插入图片描述
其中makefile中是这样写的:

# Build using pkg-config variables if possible
ifneq ($(shell $(PKGCONF) --exists libdpdk && echo 0),0)
$(error "no installation of DPDK found")
endif

       意思就是libdpdk找不到,网上找答案说使用命令:pkg-config libdpdk --libs找,结果没找到:

Package libdpdk was not found in the pkg-config search path.
Perhaps you should add the directory containing `libdpdk.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libdpdk', required by 'virtual:world', not found

       这里解决办法是设置PKG_CONFIG_PATH环境变量为:/usr/local/lib64/pkgconfig/,即执行:

export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/

       然后问题解决。
       如果遇到:

Please define RTE_SDK environment variable

       这个问题,解决办法也是一样,设置PKG_CONFIG_PATH环境变量。

编译共享库:

1.make
2.cc -O3 -I/usr/local/include -include rte_config.h -march=native  -DALLOW_EXPERIMENTAL_API main.c -o build/helloworld-shared  -Wl,--as-needed -L/home/wls/dpdk-stable-20.11.10/build/lib -lrte_node -lrte_graph -lrte_pipeline -lrte_table -lrte_pdump -lrte_port -lrte_fib -lrte_ipsec -lrte_vhost -lrte_stack -lrte_security -lrte_sched -lrte_reorder -lrte_rib -lrte_regexdev -lrte_rawdev -lrte_power -lrte_member -lrte_lpm -lrte_latencystats -lrte_jobstats -lrte_ip_frag -lrte_gso -lrte_gro -lrte_eventdev -lrte_efd -lrte_distributor -lrte_cryptodev -lrte_compressdev -lrte_cfgfile -lrte_bpf -lrte_bitratestats -lrte_bbdev -lrte_acl -lrte_timer -lrte_hash -lrte_metrics -lrte_cmdline -lrte_pci -lrte_ethdev -lrte_meter -lrte_net -lrte_mbuf -lrte_mempool -lrte_rcu -lrte_ring -lrte_eal -lrte_telemetry -lrte_kvargs 
3.ln -sf helloworld-shared build/helloworld

       编译完成后又遇到问题:
[root@localhost helloworld]# ./build/helloworld
./build/helloworld: error while loading shared libraries: librte_eal.so.21: cannot open shared object file: No such file or directory

       说动态库找不到,解决办法是设置共享库加载路径:

export LD_LIBRARY_PATH=/home/wls/dpdk-stable-20.11.10/build/lib/:$LD_LIBRARY_PATH

       设置完成后,如果没有加载vfio驱动和绑定网卡,需要先加载vfio驱动和绑定网卡。
       查看是否加载vfio驱动:lsmod|grep vfio
       加载vfio驱动:modprobe vfio-pci
在这里插入图片描述
       这里我第一次加载vfio驱动是失败了的,因为我同时在使用windows的WSL和虚拟机,控制面板-》程序-》启用或关闭Windows功能中,虚拟机平台这个选项我是勾上的,不然启动不了WSL:
在这里插入图片描述
       但是要加载VFIO这里是不能勾选的,为了DPDK也只能委屈下我的WSL了。而且虚拟机设置-》处理器-》虚拟化引擎这三个选项都是要勾选的,不然加载vfio会失败。
在这里插入图片描述

       vfio加载成功后然后需要挂载网卡,运行dpdk-devbind.py --status查看网卡状态:
在这里插入图片描述
       这里我是要挂载ens192网卡,所以要把ens192 down掉,ifconfig ens192 down,再次查看已经down掉:
在这里插入图片描述
       然后绑定网卡:dpdk-devbind.py -b vfio-pci 0000:0b:00.0
       运行程序,成功:
在这里插入图片描述
       helloworld和子目录build内容如下:
在这里插入图片描述
       没有绑定网卡也可以运行,运行结果是这样的:
在这里插入图片描述
       网卡解绑命令:rmmod vfio-pci

       其中DPDK环境配置、环境变量配置、编译命令参考以下文章:
       https://www.jianshu.com/p/61c855582921
       https://www.cnblogs.com/studywithallofyou/p/17645767.html

       欢迎交流!

  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值