Getting Started Guide for Linux(4)交叉编译用于ARM64的DPDK

官方文档查看地址:
http://doc.dpdk.org/guides/linux_gsg/cross_build_dpdk_for_arm64.html
PDF下载地址:
https://www.intel.com/content/www/us/en/embedded/technology/packet-processing/dpdk/dpdk-getting-started-guide.html

本篇难度系数:
翻译:☆☆☆☆☆
理解:★★☆☆☆

4.交叉编译用于ARM64的DPDK
本章描述如何从x86构建主机交叉编译用于ARM64的DPDK。

请注意
虽然建议在ARM64上原生构建DPDK(就像x86一样),但是也可以为ARM64交叉构建DPDK。为此使用了ARM64交叉编译GNU工具链。

4.1得到交叉工具链
最新的交叉编译工具链可以从https://developer.arm.com/open-source/gnu-toolchain/gnu-a/downloads下载。

下面是获取8.2版本的步骤,这是撰写本文时最新的版本。

wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.2-2019.01/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu.tar.xz

4.2解压缩并添加到路径中

tar -xvf gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu.tar.xz
export PATH=$PATH:<cross_install_dir>/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu/bin

请注意
有关主机需求和其他信息,请参考发布说明部分:https://releases.linaro.org/components/toolchain/binaries/

4.3获取必备库
大多数现代机器都需要NUMA,而非NUMA架构则不需要。

请注意要编译NUMA库,请运行libtool -version以确保libtool版本>= 2.2,否则编译将失败,并出现错误。

git clone https://github.com/numactl/numactl.git
cd numactl
git checkout v2.0.11 -b v2.0.11
./autogen.sh
autoconf -i
./configure --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc --prefix=<numa install dir>
make install

numa头文件和lib文件分别在< numa install dir >下的include和lib文件夹中生成。

4.4使用NUMA支持增强交叉工具链
请注意这种方法是可选的,另一种方法是使用额外的CFLAGS和LDFLAGS,如下面的Configure and cross compile DPDK Build中描述。

复制NUMA头文件和库到交叉编译器的目录:

cp <numa_install_dir>/include/numa*.h <cross_install_dir>/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu/bin/../aarch64-linux-gnu/libc/usr/include/
cp <numa_install_dir>/lib/libnuma.a <cross_install_dir>/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.2/

4.5配置并交叉编译DPDK构建
要配置构建,请选择目标配置之一,比如arm64-dpaa2-linux-gcc和arm64-thunderx-linux-gcc。

make config T=arm64-armv8a-linux-gcc

要交叉编译,无需编译内核模块,可以使用以下命令:

make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n

要交叉编译,包括内核模块,需要通过设置RTE_KERNELDIR指定内核源树:

make -j CROSS=aarch64-linux-gnu- RTE_KERNELDIR=<kernel_src_rootdir> CROSS_COMPILE=aarch64-linux-gnu-

要编译非numa目标,无需编译内核模块,可以使用以下命令:

make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n CONFIG_RTE_LIBRTE_VHOST_NUMA=n CONFIG_RTE_EAL_NUMA_AWARE_HUGEPAGES=n

请注意

  1. 应该添加EXTRA_CFLAGS和EXTRA_LDFLAGS来分别包含NUMA头文件和链接库,如果跳过了上述使用NUMA支持来增强交叉工具链的步骤,则工具链没有使用NUMA支持来增强。
  2. 应该在EXTRA_CFLAGS中添加“-isystem <numa_install_dir>/include”,否则numa.h文件将会出现大量编译错误,如Werror=cast-qual、Werror=strict-prototype和Werror=old-style-definition。
    例子如下:
    make -j CROSS=aarch64-linux-gnu- CONFIG_RTE_KNI_KMOD=n CONFIG_RTE_EAL_IGB_UIO=n EXTRA_CFLAGS="-isystem <numa_install_dir>/include" EXTRA_LDFLAGS="-L<numa_install_dir>/lib -lnuma"

4.6介子交叉编译DPDK
要在所需的目标机器上交叉编译DPDK,可以使用以下命令:

meson cross-build --cross-file <target_machine_configuration>
ninja -C cross-build

例如,如果目标机器是arm64,我们可以使用以下命令:

meson arm64-build --cross-file config/arm/arm64_armv8_linux_gcc
ninja -C arm64-build
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值