intel dpdk api 添加自己的库和创建自己的实例程序

声明:此文档只做学习交流使用,请勿用作其他商业用途

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/Makefile
main.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~


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值