记录一次在x86 软件中使用dpdk 的历程(Makefile && gcc改成g++)

我们一台服务器上原本是用grub下预留内存的方式, 然后把物理地址在板卡上的配置文件中传给L1.

但是在客户的环境上服务器windriver上不是能预留内存的. 所以服务器上需要在testMxx程序中用dpdk的方式分配出内存, 然后,  把物理地址通过sdp虚拟的网口, 用socket 传给L1.

1. 开始的想法是, 把dpdk 编译好后, 把.a 连接进testMxx. 

修改makefile 增加: -L xx -lret_eal

编译都成功了, 在ld时, 发现rte_eal 中引用的内核函数是找不到的.

但是helloworld 编译的时候是找的到的. 所以想用helloworld的makefile来改

2. 使用dpdk 自带的helloworld 中的makefile. 增加testMxx的代码后, 发现编译的时候, 很多cpp的文件中的语法是识别不到的. 改makefile的时候, 要注意里边有两个分支, 可以删除了用else中的分支.

关键是要用: include $(RTE_SDK)/mk/rte.vars.mk
就是这个mk 文件中, 把所有dpdk的配置弄好了. 不会找不到dpdk的lib.

 现在分析为什么不能识别cpp 文件中语法. 猜测dpdk 用的是gcc 的编译器.

分析:$(RTE_SDK)/mk/rte.vars.mk 后发现里边会:

include $(RTE_SDK)/mk/target/generic/rte.vars.mk

里边会:

#
# toolchain:
#
#   - define CC, LD, AR, AS, ...

### DPDK 19.11 版本的安装与配置指南 #### 配置环境 为了成功构建和运行 DPDK (Data Plane Development Kit),需要先设置开发环境。对于 DPDK 19.11,可以通过传统的 `make` 工具或者较新的 `meson-ninja` 构建系统来完成编译工作。 在基于 Linux 的环境中,进入解压后的 DPDK 源码目录后,可以执行如下命令以初始化 SDK 环境: ```bash cd dpdk-19.11 make config T=x86_64-native-linux-gcc O=build ``` 上述命令中的参数解释如下: - 参数 `T=` 指定的是配置模板文件路径 (`RTE_CONFIG_TEMPLATE`),用于定义目标平台的具体属性[^1]。 - 参数 `O=` 则允许开发者自定义输出目录;如果不提供该选项,默认会将生成的目标文件存放在当前源码根目录下的子目录 `./build/` 中。 #### 编译过程 一旦完成了初始配置阶段之后,则可以直接调用 Makefile 来启动实际的编译流程: ```bash make -j$(nproc) ``` 这里 `-j$(nproc)` 表达式的作用在于充分利用多核处理器的优势加速整个编译进程,其中 nproc 命令返回 CPU 可用线程数从而动态调整并行作业数量. 另外一种推荐的方式是采用更现代化的 Meson 和 Ninja 组合来进行项目管理以及最终产物制造环节.[^2] #### 自制工具链支持 如果存在特殊需求比如交叉编译场景下需要用到定制化版本 GCC 或 Clang ,那么就需要额外关注一下是否能够兼容所选硬件体系结构 。即便如此,在大多数情况下仍然可以选择标准 x86_64 架构作为目标平台,并通过下面这条指令实现相应设定 : ```bash meson build --cross-file <path_to_cross_file> -Dconfig_dir=<your_config_directory> ninja -C build ``` 值得注意的一点是在此过程中可能还需要手动修改某些预设值以便更好地适配特定条件下的操作行为模式 .[^3] ```python import os def check_dpdk_env(): """Check if the environment variables are set correctly.""" required_vars = ['RTE_SDK', 'RTE_TARGET'] missing = [] for var in required_vars: if not os.getenv(var): missing.append(var) if missing: raise EnvironmentError(f"The following environment variable(s) must be defined: {missing}") check_dpdk_env() print("Environment is properly configured.") ``` 以上脚本可用于验证必要的环境变量是否已正确定义。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值