• DPDK代码目录结构


    DPDK功能结构

     DPDK工程目录内容

    1. dpdk-stable-18.11.11]# ls
    2. app buildtools devtools drivers GNUmakefile lib MAINTAINERS meson.build mk README usertools
    3. build config doc examples kernel license Makefile meson_options.txt pkg test

    DPDK本质上是用户态的应用程序,使用的主要是build下生成的驱动文件和静态库文件。

    drivers目录的下的驱动文件也为用户态驱动,PMD驱动,利用了Linux的UIO机制。

    build目录下的内容如下:

    1. # pwd
    2. /home/user/dpdk-stable-18.11.11/build
    3. # ls
    4. app build include kmod lib Makefile

    app目录下是DPDK相关的测试应用程序

    1. # ls app
    2. dpdk-pdump dpdk-pmdinfogen dpdk-procinfo.map dpdk-test-crypto-perf.map dpdk-test-eventdev.map testbbdev.map testpmd.map
    3. dpdk-pdump.map dpdk-procinfo dpdk-test-crypto-perf dpdk-test-eventdev testbbdev testpmd

    build目录下是生成父目录build文件下的中间过程文件,包含.c , .o, .a, .ko文件等

    1. # ls build/
    2. app buildtools drivers kernel lib

    kmod目录下是DPDK相关的驱动程序

    1. # ls kmod/
    2. igb_uio.ko rte_kni.ko

    include目录下DPDK相关的头文件

    1. # ls include/
    2. bpf_def.h rte_compat.h rte_event_eth_rx_adapter.h rte_mempool.h rte_ring_generic.h
    3. cmdline_cirbuf.h rte_comp.h rte_event_eth_tx_adapter.h rte_memzone.h rte_ring.h
    4. cmdline.h rte_compressdev.h rte_event_ring.h rte_meter.h rte_rtm.h
    5. cmdline_parse_etheraddr.h rte_compressdev_internal.h rte_event_timer_adapter.h rte_metrics.h rte_rwlock.h
    6. cmdline_parse.h rte_compressdev_pmd.h rte_event_timer_adapter_pmd.h rte_mpls.h rte_sched_common.h
    7. cmdline_parse_ipaddr.h rte_config.h rte_fbarray.h rte_mtr_driver.h rte_sched.h
    8. cmdline_parse_num.h rte_cpuflags.h rte_fbk_hash.h rte_mtr.h rte_sctp.h
    9. cmdline_parse_portlist.h rte_crypto_asym.h rte_flow_classify.h rte_net_crc.h rte_security_driver.h
    10. cmdline_parse_string.h rte_cryptodev.h rte_flow_driver.h rte_net.h rte_security.h
    11. cmdline_rdline.h rte_cryptodev_pmd.h rte_flow.h rte_option.h rte_service_component.h
    12. cmdline_socket.h rte_cryptodev_scheduler.h rte_gre.h rte_pause.h rte_service.h
    13. cmdline_vt100.h rte_cryptodev_scheduler_operations.h rte_gro.h rte_pci_dev_feature_defs.h rte_spinlock.h
    14. dpaax_iova_table.h rte_crypto.h rte_gso.h rte_pci_dev_features.h rte_string_fns.h
    15. exec-env rte_crypto_sym.h rte_hash_crc.h rte_pci.h rte_table_acl.h
    16. generic rte_cycles.h rte_hash.h rte_pdump.h rte_table_action.h
    17. rte_acl.h rte_debug.h rte_hexdump.h rte_per_lcore.h rte_table_array.h
    18. rte_acl_osdep.h rte_devargs.h rte_hypervisor.h rte_pipeline.h rte_table.h
    19. rte_alarm.h rte_dev.h rte_icmp.h rte_pmd_bnxt.h rte_table_hash_cuckoo.h
    20. rte_approx.h rte_dev_info.h rte_interrupts.h rte_pmd_dpaa2_cmdif.h rte_table_hash_func_arm64.h
    21. rte_arp.h rte_distributor.h rte_io.h rte_pmd_dpaa2_qdma.h rte_table_hash_func.h
    22. rte_atomic_32.h rte_dpaa2_mempool.h rte_ip_frag.h rte_pmd_dpaa.h rte_table_hash.h
    23. rte_atomic_64.h rte_eal.h rte_ip.h rte_pmd_i40e.h rte_table_lpm.h
    24. rte_atomic.h rte_eal_interrupts.h rte_jhash.h rte_pmd_ixgbe.h rte_table_lpm_ipv6.h
    25. rte_avp_common.h rte_eal_memconfig.h rte_jobstats.h rte_port_ethdev.h rte_table_stub.h
    26. rte_avp_fifo.h rte_efd.h rte_keepalive.h rte_port_fd.h rte_tailq.h
    27. rte_bbdev.h rte_errno.h rte_kni.h rte_port_frag.h rte_tcp.h
    28. rte_bbdev_op.h rte_esp.h rte_kvargs.h rte_port.h rte_test.h
    29. rte_bbdev_pmd.h rte_eth_bond_8023ad.h rte_latencystats.h rte_port_in_action.h rte_thash.h
    30. rte_bitmap.h rte_eth_bond.h rte_launch.h rte_port_kni.h rte_time.h
    31. rte_bitrate.h rte_eth_ctrl.h rte_lcore.h rte_port_ras.h rte_timer.h
    32. rte_bpf_ethdev.h rte_ethdev_core.h rte_log.h rte_port_ring.h rte_tm_driver.h
    33. rte_bpf.h rte_ethdev_driver.h rte_lpm6.h rte_port_sched.h rte_tm.h
    34. rte_branch_prediction.h rte_ethdev.h rte_lpm.h rte_port_source_sink.h rte_udp.h
    35. rte_bus.h rte_ethdev_pci.h rte_lpm_sse.h rte_port_sym_crypto.h rte_uuid.h
    36. rte_bus_ifpga.h rte_ethdev_vdev.h rte_lru.h rte_power_empty_poll.h rte_vdpa.h
    37. rte_bus_pci.h rte_ether.h rte_lru_x86.h rte_power.h rte_vect.h
    38. rte_bus_vdev.h rte_eth_ring.h rte_malloc.h rte_prefetch.h rte_version.h
    39. rte_bus_vmbus.h rte_eth_softnic.h rte_malloc_heap.h rte_random.h rte_vfio.h
    40. rte_byteorder_32.h rte_eth_vhost.h rte_mbuf.h rte_rawdev.h rte_vhost_crypto.h
    41. rte_byteorder_64.h rte_event_crypto_adapter.h rte_mbuf_pool_ops.h rte_rawdev_pmd.h rte_vhost.h
    42. rte_byteorder.h rte_eventdev.h rte_mbuf_ptype.h rte_reciprocal.h rte_vmbus_reg.h
    43. rte_cfgfile.h rte_eventdev_pmd.h rte_member.h rte_red.h
    44. rte_class.h rte_eventdev_pmd_pci.h rte_memcpy.h rte_reorder.h
    45. rte_common.h rte_eventdev_pmd_vdev.h rte_memory.h rte_ring_c11_mem.h

    lib目录下是DPDK相关的静态链接库文件

    1. # ls lib/
    2. libdpdk.a librte_flow_classify.a librte_pdump.a librte_pmd_e1000.a librte_pmd_ring.a
    3. librte_acl.a librte_gro.a librte_pipeline.a librte_pmd_ena.a librte_pmd_sfc_efx.a
    4. librte_bbdev.a librte_gso.a librte_pmd_af_packet.a librte_pmd_enetc.a librte_pmd_skeleton_event.a
    5. librte_bitratestats.a librte_hash.a librte_pmd_ark.a librte_pmd_enic.a librte_pmd_skeleton_rawdev.a
    6. librte_bpf.a librte_ip_frag.a librte_pmd_atlantic.a librte_pmd_failsafe.a librte_pmd_softnic.a
    7. librte_bus_dpaa.a librte_jobstats.a librte_pmd_avf.a librte_pmd_fm10k.a librte_pmd_sw_event.a
    8. librte_bus_fslmc.a librte_kni.a librte_pmd_avp.a librte_pmd_i40e.a librte_pmd_tap.a
    9. librte_bus_ifpga.a librte_kvargs.a librte_pmd_axgbe.a librte_pmd_ifc.a librte_pmd_thunderx_nicvf.a
    10. librte_bus_pci.a librte_latencystats.a librte_pmd_bbdev_null.a librte_pmd_ifpga_rawdev.a librte_pmd_vdev_netvsc.a
    11. librte_bus_vdev.a librte_lpm.a librte_pmd_bnxt.a librte_pmd_ixgbe.a librte_pmd_vhost.a
    12. librte_bus_vmbus.a librte_mbuf.a librte_pmd_bond.a librte_pmd_kni.a librte_pmd_virtio.a
    13. librte_cfgfile.a librte_member.a librte_pmd_caam_jr.a librte_pmd_lio.a librte_pmd_virtio_crypto.a
    14. librte_cmdline.a librte_mempool.a librte_pmd_crypto_scheduler.a librte_pmd_netvsc.a librte_pmd_vmxnet3_uio.a
    15. librte_common_cpt.a librte_mempool_bucket.a librte_pmd_cxgbe.a librte_pmd_nfp.a librte_port.a
    16. librte_common_dpaax.a librte_mempool_dpaa2.a librte_pmd_dpaa2.a librte_pmd_null.a librte_power.a
    17. librte_common_octeontx.a librte_mempool_dpaa.a librte_pmd_dpaa2_cmdif.a librte_pmd_null_crypto.a librte_rawdev.a
    18. librte_compressdev.a librte_mempool_octeontx.a librte_pmd_dpaa2_event.a librte_pmd_octeontx.a librte_reorder.a
    19. librte_cryptodev.a librte_mempool_ring.a librte_pmd_dpaa2_qdma.a librte_pmd_octeontx_crypto.a librte_ring.a
    20. librte_distributor.a librte_mempool_stack.a librte_pmd_dpaa2_sec.a librte_pmd_octeontx_ssovf.a librte_sched.a
    21. librte_eal.a librte_meter.a librte_pmd_dpaa.a librte_pmd_octeontx_zip.a librte_security.a
    22. librte_efd.a librte_metrics.a librte_pmd_dpaa_event.a librte_pmd_opdl_event.a librte_table.a
    23. librte_ethdev.a librte_net.a librte_pmd_dpaa_sec.a librte_pmd_qat.a librte_timer.a
    24. librte_eventdev.a librte_pci.a librte_pmd_dsw_event.a librte_pmd_qede.a librte_vhost.a

    3. 使用源码编译DPDK目标文件 — dpdk 0.11 documentation (dpdk-docs.readthedocs.io)  原文摘抄如下:

    3.3. Browsing the Installed DPDK Environment Target

    一旦目标文件本创建,它就包含了构建客户应用程序所需的DPDK环境的所有库,包括轮询驱动程序和头文件。 此外,test和testpmd应用程序构建在build/app目录下,可以用于测试。 还有一个kmod目录,存放可能需要加载的内核模块。

    3.4. 加载模块启动DPDK环境需要的UIO功能

    要运行任何的DPDK应用程序,需要将合适的uio模块线加载到当前内核中。在多数情况下,Linux内核包含了标准的 uio_pci_generic 模块就可以提供uio能力。 该模块可以使用命令加载

    sudo modprobe uio_pci_generic
    

    区别于 uio_pci_generic ,DPDK提供了一个igb_uio模块(可以在kmod目录下找到)。可以通过如下方式加载:

    sudo modprobe uio
    sudo insmod kmod/igb_uio.ko
    

    Note

    对于一下不支持传统中断的设备,例如虚拟功能(VF)设备,必须使用 igb_uio 来替代 uio_pci_generic 模块。

    由于DPDK 1.7版本提供VFIO支持,所以,对于支持VFIO的平台,可选择UIO,也可以不用。

  • 相关阅读:
    7、使用真机调试鸿蒙项目
    有哪些开源通用流程引擎
    阿里云记录保存
    关于计算机找不到vcomp140.dll无法继续执行怎么修复
    ES6中的set与map
    pytest+requests+allure自动化测试接入Jenkins学习
    Composition API (setup)&& Options API
    如何入驻抖音本地生活服务商,附上便捷流程!
    宣泰医药通过注册:拟募资6亿 联和投资是大股东
    【GlobalMapper精品教程】012:WGS84转2000地理坐标系与平面坐标系
  • 原文地址:https://blog.csdn.net/wq897387/article/details/128094725