intel dpdk api 添加自己的库和创建自己的实例程序
2013-08-09 13:08
369 查看
声明:此文档只做学习交流使用,请勿用作其他商业用途
author:朝阳_tony
E-mail : linzhaolover@gmail.com
Create Date: 2013-8-9 10:29:36 Friday
Last Change: 2013-8-9 13:08:12 Friday
转载请注明出处:http://blog.csdn.net/linzhaolover
此文请结合intel dpdk源码去阅读,源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
intel DPDK交流群希望大家加入互相学习,QQ群号:289784125
本文章基于intel dpdk 的源码1.3.1 版本进行讲解;
先设置环境变量
foo.c
foo.h
我们要修改库名字,将librte_mempool.a改为libfoo.a
修改源码位置和名称将所有的CONFIG_RTE_LIBRTE_MEMPOOL 修改为CONFIG_RTE_LIBFOO,将rte_mempool.c改为foo.c 我刚才编辑的那个源码文件;
在安装dpdk时会为这个库创建一个头文件连接,需要将rte_mempool.h改为foo.h
每个库不肯能独立完成所有的任务,所以要依赖其他的库,假设当前依赖 eal 和ring两个库;后期请更加自己的需要添加;
下面在修改lib/Makefile, 也就是要在总的库中添加编译选项,
别着急,还没完,还需要修改 mk/rte.app.mk文件,找到mempool选项所在位置添加编译选项,就像下面这样;
编辑Makefile;
技术水平有待提高,如果文章有错误的地方希望读者指正,相互交流,互相学习;O(∩_∩)O~
author:朝阳_tony
E-mail : linzhaolover@gmail.com
Create Date: 2013-8-9 10:29:36 Friday
Last Change: 2013-8-9 13:08:12 Friday
转载请注明出处:http://blog.csdn.net/linzhaolover
此文请结合intel dpdk源码去阅读,源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
intel DPDK交流群希望大家加入互相学习,QQ群号:289784125
本文章基于intel dpdk 的源码1.3.1 版本进行讲解;
摘要
如何向intel dpdk添加自己的源码库,如何添加自己的实例程序,下面做一些简单的讲解;1、添加创建自己源码库
在dpdk源码目录,以x86_64bit gcc编译环境为例;先设置环境变量
export RTE_SDK=`pwd` export RTE_TARGET=x86_64-default-linuxapp-gcc
1)、添加选项到config配置文件;
在defconfig_x86_64-default-linuxapp-gcc配置文件的最后一行,编辑编译选项,这样在后面make时候,就会编译此库;echo CONFIG_RTE_LIBFOO=y >> config/defconfig_x86_64-default-linuxapp-gcc
2)、在lib目录下创建一个源码子目录
mkdir ${RTE_SDK}/lib/libfoo touch ${RTE_SDK}/lib/libfoo/foo.c touch ${RTE_SDK}/lib/libfoo/foo.h编辑源码;
foo.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "foo.h" void foo(void) { printf("libfoo test appliation\n"); fprintf(stdout,"%s %d\n",__func__,__LINE__); }
foo.h
#ifndef _RTE_FOO_H_ #define _RTE_FOO_H_ extern void foo(void); #endif
3)、添加makefile
cp lib/librte_mempool/Makefile lib/libfoo/Makefile修改一下libfoo目录下的Makefile文件,我需要修改几个地方以适应我们自己的源码库;
include $(RTE_SDK)/mk/rte.vars.mk # library name LIB = librte_mempool.a CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3 # all source are stored in SRCS-y SRCS-$(CONFIG_RTE_LIBRTE_MEMPOOL) := rte_mempool.c # install includes SYMLINK-$(CONFIG_RTE_LIBRTE_MEMPOOL)-include := rte_mempool.h # this lib needs eal DEPDIRS-$(CONFIG_RTE_LIBRTE_MEMPOOL) += lib/librte_eal lib/librte_ring include $(RTE_SDK)/mk/rte.lib.mk
我们要修改库名字,将librte_mempool.a改为libfoo.a
修改源码位置和名称将所有的CONFIG_RTE_LIBRTE_MEMPOOL 修改为CONFIG_RTE_LIBFOO,将rte_mempool.c改为foo.c 我刚才编辑的那个源码文件;
在安装dpdk时会为这个库创建一个头文件连接,需要将rte_mempool.h改为foo.h
每个库不肯能独立完成所有的任务,所以要依赖其他的库,假设当前依赖 eal 和ring两个库;后期请更加自己的需要添加;
# this lib needs eal DEPDIRS-$(CONFIG_RTE_LIBFOO) += lib/librte_eal lib/librte_ring最后libfoo/Makefile是下面这样;
include $(RTE_SDK)/mk/rte.vars.mk
# library name
LIB = libfoo.a
CFLAGS += $(WERROR_FLAGS) -I$(SRCDIR) -O3
# all source are stored in SRCS-y
SRCS-$(CONFIG_RTE_LIBFOO) := foo.c
# install includes
SYMLINK-$(CONFIG_RTE_LIBFOO)-include := foo.h
# this lib needs eal DEPDIRS-$(CONFIG_RTE_LIBFOO) += lib/librte_eal lib/librte_ring
include $(RTE_SDK)/mk/rte.lib.mk
下面在修改lib/Makefile, 也就是要在总的库中添加编译选项,
DIRS-$(CONFIG_RTE_LIBFOO) += libfoo
别着急,还没完,还需要修改 mk/rte.app.mk文件,找到mempool选项所在位置添加编译选项,就像下面这样;
ifeq ($(CONFIG_RTE_LIBRTE_MEMPOOL),y) LDLIBS += -lrte_mempool endif #add my test foo option ifeq ($(CONFIG_RTE_LIBFOO),y) LDLIBS += -lfoo endif
4)、编译安装
首先要将之前安装的删除,然后再次安装;rm -r x86_64-default-linuxapp-gcc/ make install T=x86_64-default-linuxapp-gcc如果成功了,会创建libfoo.a 和一个foo.h文件;
ls x86_64-default-linuxapp-gcc/include/会发现多了一个foo.h的文件链接;
ls x86_64-default-linuxapp-gcc/lib/多了一个libfoo.a静态库文件;
2、添加自己的实例程序
1、创建自己的程序源码
mkdir mydpdk touch mydpdk/main.c cp examples/helloworld/Makefile mydpdk/Makefilemain.c源码;
#include <stdio.h> #include <string.h> #include <stdint.h> #include <errno.h> #include <sys/queue.h> #include <rte_memory.h> #include <rte_memzone.h> #include <rte_launch.h> #include <rte_tailq.h> #include <rte_eal.h> #include <rte_per_lcore.h> #include <rte_lcore.h> #include <rte_debug.h> #include <foo.h> int main(int argc, char **argv) { foo(); return 0; }foo.h 就是我在第一节创建的foo库的头文件;
编辑Makefile;
ifeq ($(RTE_SDK),) $(error "Please define RTE_SDK environment variable") endif # Default target, can be overriden by command line or environment RTE_TARGET ?= x86_64-default-linuxapp-gcc include $(RTE_SDK)/mk/rte.vars.mk # binary name APP = mydpdk # all source are stored in SRCS-y SRCS-y := main.c #CFLAGS += -O3 CFLAGS += $(WERROR_FLAGS) include $(RTE_SDK)/mk/rte.extapp.mk这要注意,将APP的输出名写成自己需要的,我这写的谁mydpdk,也就是将来了可执行程序名字;
2)、编译运行
make -C mydpdk/
# ./mydpdk/build/mydpdk libfoo test appliation foo 10打印了一些信息,就是我在foo库中要输出的信息;
技术水平有待提高,如果文章有错误的地方希望读者指正,相互交流,互相学习;O(∩_∩)O~
相关文章推荐
- 让在vc6创建的程序中,控件可以随xp风格的改变而变化,不用再程序中添加代码来自己实现~
- 利用反射获得委托和事件以及创建委托实例和添加事件处理程序
- 利用反射获得委托和事件以及创建委托实例和添加事件处理程序
- VC++创建快捷方式、删除快捷方式、添加开始菜单程序组菜单并删除程序组菜单的实例
- Asp.Net 利用反射获得委托和事件以及创建委托实例和添加事件处理程序
- 利用反射获得委托和事件以及创建委托实例和添加事件处理程序
- dpdk makefile 创建自己的实例程序
- C#软件开发实例.私人订制自己的屏幕截图工具(六)添加配置管理功能
- vim创建程序文件自动添加头部注释
- Silverlight中创建自己的Behavior(为Silverlight添加鼠标双击和滚轮支持)
- 程序创建明细表并添加自定义的参数列
- Windows中添加自己的程序到开机启动中(添加服务,添加注册表)
- 【Android自学笔记之二】为自己的android程序添加menu菜单
- 不喜欢chrome自己创建的快捷方式?不用快捷程序打开的快捷方式的创建
- 创建自己的Application,以在整个应用中分享数据(程序启动时会默认创建一个Application)
- Visual Studio .NET 无法创建或打开应用程序。问题很可能是因为本地WEB本地服务器上没有安装所需的组件。请运行Visual Studio .NET安装程序并添加WEB开发组件
- PadDesigner中添加自己创建的热风焊盘Flash
- Docker网络管理机制实例解析+创建自己Docker网络
- 如何利用C++ Builder 5.0 Enterprise 创建用户自己的网上聊天程序
- 编写一个程序,在E盘下创建一个abc.txt的文本文档,通过输出流在文档内添加数据,然后在把abc.txt复制到F盘下