43. Extending the DPDK
本章描述了开发人员如何扩展DPDK以提供新库、新目标或支持新目标。
43.1. Example: Adding a New Library libfoo
要向DPDK添加一个新库,请按以下方式进行:
- 添加新的配置选项:
for f in config/\*; do \ echo CONFIG_RTE_LIBFOO=y >> $f; done
- 创建新的源文件目录:
mkdir ${RTE_SDK}/lib/libfoo touch ${RTE_SDK}/lib/libfoo/foo.c touch ${RTE_SDK}/lib/libfoo/foo.h
- 在libfoo中添加foo()函数。
在foo.c中定义:
void foo(void) { }
在foo.h中声明:
extern void foo(void);
- 更新lib/Makefile:
vi ${RTE_SDK}/lib/Makefile # add: # DIRS-$(CONFIG_RTE_LIBFOO) += libfoo
- 为这个lib创建一个新的Makefile,例如,借鉴mempool Makefile:
cp ${RTE_SDK}/lib/librte_mempool/Makefile ${RTE_SDK}/lib/libfoo/ vi ${RTE_SDK}/lib/libfoo/Makefile # replace: # librte_mempool -> libfoo # rte_mempool -> foo
- 更新mk/DPDK.app.mk,如果使能了LDLIBS选项,添加 -lfoo到LDLIBS变量中。这将在连接DPDK应用程序时自动添加此标志。
- 用新的lib构建DPDK(我们只在这里显示一个特定的目标):
cd ${RTE_SDK} make config T=x86_64-native-linuxapp-gcc make
- 检查该lib是否已安装:
ls build/lib ls build/include
测试应用程序用于验证DPDK的所有功能。一旦添加了一个库之后,应该在测试应用程序中添加一个新的测试用例。
- 添加一个包含foo.h头文件和调用foo()的测试程序文件test_foo.c。当测试成功,test_foo()函数应该返回0。
- 更新Makefile, test.h 和 commands.c,以便处理新的测试用例。
- 生成测试报告:autotest.py脚本用于生成测试报告,位于${RTE_SDK}/doc/rst/test_report/autotests目录。脚本也应该被更新。如果libfoo是一个新的测试系中,那么${RTE_SDK}/doc/rst/test_report/test_report.rst 的链接也应该被更新。
- 使用更新的测试应用程序构建DPDK(我们只在这里显示一个特定的目标):
cd ${RTE_SDK} make config T=x86_64-native-linuxapp-gcc make