




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文假设已经成功编译出了DPDK的库文件。虚拟机操作系统:CentOS 7 x86_64,系统中已经安装了RealTime 内核。DPDK版本:17.11.1DPDK库文件编译目录:/root/dpdk-stable-17.11.1。系统环境变量的设置:(在编译自定义库文件前,要确认这两个环境变量设置正确)exportRTE_SDK=/root/dpdk-stable-17.11.1exportRTE_TARGET=x86_64-native-linuxapp-gcc自定义库文件目录:/home/zack/SelfDefLib。自定义文件:self_def_lib.c, self_def_lib.h, Makefile, 位于上述自定义库文件目录下。self_def_lib.h 代码如下:/* Copyright (c) 2018 ABC.Co.Ltd. All rights reserved. FileName: self_def_lib.h Auth: Zack Date: 2018/06/24Discription: Declaration of self-defined functions to call DPDK interface.*/#ifndef _self_def_lib_h_#define _self_def_lib_h_#ifdef _cplusplusextern C#endif#include #include #include #include /* DPDK EAL init */int exam_dpdk_init(int argc, char *argv);#ifdef _cplusplus#endifself_def_lib.c 代码如下:/* Copyright (c) 2018 ABC.Co.Ltd. All rights reserved. FileName: self_def_lib.c Auth: Zack Date: 2018/06/24Discription: Self-defined functions to call DPDK interface.*/#ifdef _cplusplusextern C#endif#include self_def_lib.hvoid recv_pkt_init(void) uint8_t port = 0;int rteSockId = 0;rteSockId = rte_socket_id();for (port = 0; port 0) & (rte_eth_dev_socket_id(port) != rteSockId) printf(port %d is on remote NUMA node to polling thread.n, port);printf(Core %d forwarding packets.n, rte_lcore_id();return;/* DPDK init. Refer helloworld/main.c */int exam_dpdk_init(int argc, char *argv) int ret = 0;int ethCount = 0;ret = rte_eal_init(argc, argv);if (ret 0) printf(Cannot init EAL.n);else printf(DPDK EAL init OK.n);ethCount = rte_eth_dev_count();printf(ethCount = %d.n, ethCount);recv_pkt_init();return 0;#ifdef _cplusplus#endifMakefile 内容如下(参照DPDK示例修改即可):ifeq ($(RTE_SDK),)$(error Please define RTE_SDK environment variable)endif# Default target, can be overridden by command line or environmentRTE_TARGET ?= x86_64-native-linuxapp-gccinclude $(RTE_SDK)/mk/rte.vars.mk# all source are stored in SRCS-ySRCS-y := self_def_lib.cCFLAGS += $(WERROR_FLAGS)EXTRA_CFLAGS += -O0 -g -w -Wfatal-errors#include $(RTE_SDK)/mk/rte.extlib.mkinclude $(RTE_SDK)/mk/rte.extobj.mk在目录 /home/zack/SelfDefLib 下执行 make,在当前目录下会生成 lib 文件夹,在 lib 文件夹下会生成 self_def_lib.o 文件。创建代码工程目录:/home/zack/loadLib。将自定义库的头文件 self_def_lib.h 拷贝到目录 /home/zack/loadLib 下,并在该目录下创建文件 loadDpdkLib.c,文件代码如下:/* Copyright (c) 2018 ABC.Co.Ltd. All rights reserved. FileName: loadDpdkLib.c Auth: Zack Date: 2018/06/24Discription: Call self-defined DPDK interface.*/#ifdef _cplusplusextern C#endif#include self_def_lib.hint main(int argc, char *argv) int ret = 0;ret = exam_dpdk_init(argc, argv);if (ret != 0) printf(exam_dpdk_init failed, ret=%d.n, ret);return 0;#ifdef _cplusplus#endif在目录 /home/zack/loadLib 下新建文件夹 lib,存放工程需要的 DPDK库文件和自定义库文件,所需DPDK库文件从目录 /root/dpdk-stable-17.11.1/x86_64-native-linuxapp-gcc/lib 下拷贝,标红的字体替换成自己编译DPDK的路径,同时将自定义库文件 self_def_lib.o 拷贝到目录 /home/zack/loadLib 下。本例中所需的库文件会在 Makefile 文件中列出。在目录 /home/zack/loadLib 下新建文件夹 include,存放工程需要的 DPDK 头文件,从DPDK原始代码中拷贝头文件时,如果不确定头文件所在路径,可以到/root/dpdk-stable-17.11.1/x86_64-native-linuxapp-gcc/include 目录下通过 ll 命令进行查看,标红的字体替换成自己编译DPDK的路径。本例所需头文件如下:rte_byteorder_64.hrte_devargs.hrte_eth_ctrl.hrte_malloc.hrte_pause.hrte_rwlock.hrte_alarm.hrte_byteorder.hrte_dev.hrte_ethdev.hrte_mbuf.hrte_pci_dev_feature_defs.hrte_spinlock.hrte_atomic_64.hrte_common.hrte_dev_info.hrte_ether.hrte_mbuf_ptype.hrte_per_lcore.hrte_time.hrte_atomic.hrte_config.hrte_eal.hrte_interrupts.hrte_memcpy.hrte_prefetch.hrte_vect.hrte_bitmap.hrte_cpuflags.hrte_eal_interrupts.hrte_launch.hrte_memory.hrte_random.hrte_branch_prediction.hrte_cycles.hrte_eal_memconfig.hrte_lcore.hrte_mempool.hrte_ring.hrte_bus.hrte_debug.hrte_errno.hrte_log.hrte_memzone.hrte_rtm.hgeneric/rte_atomic.hgeneric/rte_byteorder.hgeneric/rte_cpuflags.hgeneric/rte_cycles.hgeneric/rte_io.hgeneric/rte_memcpy.hgeneric/rte_pause.hgeneric/rte_prefetch.hgeneric/rte_rwlock.hgeneric/rte_spinlock.hgeneric/rte_vect.h需要说明的是,generic 目录位于 /home/zack/loadLib/include 下,generic 目录下的头文件有些和上一级目录的头文件重名,但是头文件内容不同。经验证,上述所有头文件为本测试例所需的最小集合,已经不能再精减。如果仅是为了学习DPDK而编写的测试例,可以不用单独拷贝DPDK的头文件和库文件到代码工程中,只需要在 Makefile 中直接将头文件和库文件的目录分别定义为DPDK的编译目录下的 x86_64-native-linuxapp-gcc/include 和 x86_64-native-linuxapp-gcc/lib 即可,编译生成的自定义库文件 self_def_lib.o 可以拷贝到目录 x86_64-native-linuxapp-gcc/lib 下。在目录 /home/zack/loadLib 下新建 Makefile,内容如下:# 指定需要链接的库文件目录.DPDK_LIB_DIR=/home/zack/loadLib/lib# 指定头文件目录.INCLUDE=/home/zack/loadLib/include# -lrt 加载系统实时库,-lnuma 加载numa库,-lm 加载数学计算库,# -pthread 使用线程安全的库及头文件,-ldl 加载动态库.LDLIBS+=-lrt lnuma -lm-pthread-ldl# 本测试例中只用到了 DPDK 的三个库文件.LDLIBS += $(DPDK_LIB_DIR)/self_def_lib.o $(DPDK_LIB_DIR)/librte_ethdev.a $(DPDK_LIB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陕西师范大学《大学生职业生涯规划与就业指导1》2023-2024学年第二学期期末试卷
- 河北农业大学《建筑空间设计研究》2023-2024学年第二学期期末试卷
- 环境科学治理方法知识点
- 兰州职业技术学院《品牌企划与整合传播》2023-2024学年第二学期期末试卷
- 语法与实际语境结合学习被动语态:高一英语课本同步语法教案
- 昆明工业职业技术学院《声乐演唱技巧综合训练》2023-2024学年第二学期期末试卷
- 青海柴达木职业技术学院《主持人语言艺术》2023-2024学年第二学期期末试卷
- 人脸识别与追踪技术集成创新创业项目商业计划书
- 高频电凝手术设备企业制定与实施新质生产力项目商业计划书
- 神经修复导管行业跨境出海项目商业计划书
- 四川省文化和旅游企业安全生产管理责任清单参考模板(1.0版)
- 钾离子的测定—四苯硼钠季胺盐容量法
- 犬猫常见消化道疾病(课堂PPT)
- KV单电源环形网络继电保护设计——保护
- 疾病预防控制体系建设与发展
- 河南省开封市体育中心PPP项目案例分析
- 一种基于SG3525的半桥高频开关电源
- ASTM A276-1997不锈钢棒材和型材规格(中文版)_图文
- 上饶市光伏产业发展规划
- 不随行父母同意函(父母一方随行)
- 军队营区物业服务合同
评论
0/150
提交评论