DPDK 编译在 WSL2 Docker 桌面容器内失败

DPDK Compilation fails inside WSL2 Docker Desktop's containers

我无法在 docker 容器内编译 DPDK,运行 在 WSL2 下作为 VM(以及 windows 10 作为主机)。

背景

尝试在 wsl-container 中本地编译 DPDK,一些 DPDK 库曾经构建在远程本机 linux 机器上。

Docker文件运行编译安装了kernel headersGNU toolchain等各种依赖。分布是 CentOS7.

容器由 Docker Desktop

管理

版本在这里是无用的信息。

问题

跨 DPDK 版本的类似问题。 在 DPDK 20.11 中,使用 meason 构建系统,文件 kernel/linux/meason.build:

../kernel/linux/meson.build:23:1: ERROR: Problem encountered: Cannot compile kernel modules as requested - are kernel headers installed?

如果我编译 DPDK 的不同 DPDK 版本或使用其他构建系统 (makefile) 构建,我会得到相同错误的变体。

内部 /lib/modules 没有带有 WSL2“uname -r”输出的条目。

虽然WSL2有/lib/modules/5.4.72-microsoft-standard-WSL2(作为一个软link),这个软link并没有出现在容器中

解决方案是将此行添加到 Dockerfile*:

RUN ln -s /lib/modules/$(ls /lib/modules/) /lib/modules/$(uname -r)

*(假设在 /lib/modules 上只找到一个条目,并且该条目存在 /usr/src/kernels。)

另一个解决方案(我没有测试)是 运行 容器:

docker run --name test  -v /usr/src/kernels:/usr/src/kernels and -v /lib/modules/:lib/modules -dt image-name

假设您的主机已经安装了内核头文件并且可以找到它们(即找到 /usr/src/kernels/XXX/ 并且 /lib/modules/XXX/build softlink 没有损坏)