f-stack/dpdk/doc/guides/prog_guide/extend_dpdk.rst

110 lines
2.9 KiB
ReStructuredText
Raw Normal View History

2018-12-06 14:17:51 +00:00
.. SPDX-License-Identifier: BSD-3-Clause
Copyright(c) 2010-2014 Intel Corporation.
2017-04-21 10:43:26 +00:00
Extending the DPDK
=========================
This chapter describes how a developer can extend the DPDK to provide a new library,
a new target, or support a new target.
Example: Adding a New Library libfoo
------------------------------------
To add a new library to the DPDK, proceed as follows:
#. Add a new configuration option:
2017-04-21 10:43:26 +00:00
.. code-block:: bash
for f in config/\*; do \
echo CONFIG_RTE_LIBFOO=y >> $f; done
#. Create a new directory with sources:
2017-04-21 10:43:26 +00:00
.. code-block:: console
mkdir ${RTE_SDK}/lib/libfoo
touch ${RTE_SDK}/lib/libfoo/foo.c
touch ${RTE_SDK}/lib/libfoo/foo.h
#. Add a foo() function in libfoo.
2017-04-21 10:43:26 +00:00
Definition is in foo.c:
.. code-block:: c
void foo(void)
{
}
Declaration is in foo.h:
.. code-block:: c
extern void foo(void);
#. Update lib/Makefile:
2017-04-21 10:43:26 +00:00
.. code-block:: console
vi ${RTE_SDK}/lib/Makefile
# add:
# DIRS-$(CONFIG_RTE_LIBFOO) += libfoo
#. Create a new Makefile for this library, for example, derived from mempool Makefile:
2017-04-21 10:43:26 +00:00
.. code-block:: console
cp ${RTE_SDK}/lib/librte_mempool/Makefile ${RTE_SDK}/lib/libfoo/
vi ${RTE_SDK}/lib/libfoo/Makefile
# replace:
# librte_mempool -> libfoo
# rte_mempool -> foo
#. Update mk/DPDK.app.mk, and add -lfoo in LDLIBS variable when the option is enabled.
This will automatically add this flag when linking a DPDK application.
2017-04-21 10:43:26 +00:00
#. Build the DPDK with the new library (we only show a specific target here):
2017-04-21 10:43:26 +00:00
.. code-block:: console
cd ${RTE_SDK}
make config T=x86_64-native-linuxapp-gcc
make
#. Check that the library is installed:
2017-04-21 10:43:26 +00:00
.. code-block:: console
ls build/lib
ls build/include
Example: Using libfoo in the Test Application
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The test application is used to validate all functionality of the DPDK.
Once you have added a library, a new test case should be added in the test application.
* A new test_foo.c file should be added, that includes foo.h and calls the foo() function from test_foo().
When the test passes, the test_foo() function should return 0.
* Makefile, test.h and commands.c must be updated also, to handle the new test case.
* Test report generation: autotest.py is a script that is used to generate the test report that is available in the
${RTE_SDK}/doc/rst/test_report/autotests directory. This script must be updated also.
If libfoo is in a new test family, the links in ${RTE_SDK}/doc/rst/test_report/test_report.rst must be updated.
* Build the DPDK with the updated test application (we only show a specific target here):
.. code-block:: console
cd ${RTE_SDK}
make config T=x86_64-native-linuxapp-gcc
make