yocto编译链交叉编译DPDK

一、背景

之前编译过老版的dpdk,听说新版的dpdk编译都使用meson、ninja工具编译,和以前的方法不太一样,一直想体验一下。而且最近工作需要使用yocto的编译链,所以就尝试配置yocto的编译链来交叉编译下dpdk。

二、编译前准备

我的环境是ubuntu 20.04

安装meson ninja

pyelftools

apt-get install python3-pyelftools

Python 3.5 or later

libnuma-dev

libelf

从dpdk官网下载了dpdk-stable-20.11.4版本。

这些网上都有。

三、主机编译

Build libraries, drivers and test applicmeson buildations.

meson build
ninja -C build

meson build命令后,创建build目录,ninja命令编译后的结果文件都在这个目录中

也可以部分编译

 meson -Dexamples=all build
 ninja -C build

第一次配置编译目录后,可以重新配置目录,查看支持哪些配置参数可以使用

meson configure查看支持的配置

可以重新配置使能内核模块的编译,指定内核编译目录

build目录中修改配置,

meson configure -Denable_kmods=true -Dkernel_dir=/home/oem/test/

注意:其中kernel默认会查找的目录会为/home/oem/test/build

退到上一级目录,编译

ninja -C build

主机编译默认的机器类型为-Dplatform=native

上面这些官网文档介绍的很全。

四、使用YOCTO交叉编译链

使用yocto编译链交叉编译的格式为:

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

ninja -C cross-build

上面这个编译命令的关键就在于<target_machine_configuration>,刚开始没搞懂这个文件是个什么类型的文件,编译不成功。后来经过仔细查看官网文档后,发现dpdk的源码目录下有config/x86/cross-mingw,猜测这个文件就属<target_machine_configuration>,参考格式配置之后,出现找不到标准头文件如stdio.h之类的文件的错误,说明交叉编译的头文件路径配置的不对,说明配置方法不对,经过再查看官网文档,创建文件config/x86/cross-yocto

[binaries]

c_args = [-target, x86_64-poky-linux, --sysroot, /home/oem/toolchain-test/sysroots/skylake-64-poky-linux]

c_link_args = [-target, x86_64-poky-linux, -fuse-ld=lld, --sysroot, /home/oem/toolchain-test/sysroots/skylake-64-poky-linux, --gcc-toolchain=/home/oem/toolchain-test/sysroots/x86_64-pokysdk-linux/usr/bin]

[host_machine]

system = linux

cpu_family = x86_64

cpu = skylake

endian = little

这个文件就是yocto交叉编译DPDK的关键,也是本文的关键。

有了这个文件后,就可以编译了

使能yocto交叉编译变量

source ~/toolchain-test/environment-setup-skylake-64-poky-linux

配置工程

meson -Denable_kmods=true -Dkernel_dir=/home/oem/test/  yocto-cross-build --cross-file config/x86/cross-yocto

编译

ninja -C yocto-cross-build
经验分享 程序员 微信小程序 职场和发展