如何解决DPDK 编译在 WSL2 Docker Desktop 的容器内失败
我无法在 docker 容器内编译 DPDK,在 WSL2 下作为 VM 运行(Windows 10 作为主机)。
背景
尝试在 wsl 容器中本地编译 DPDK,一些 DPDK 库曾经是在远程本地 linux 机器上构建的。
运行编译的 Dockerfile 已经安装了 kernel headers
、GNU toolchain
和其他各种依赖项。分布为 CentOS7
。
容器由 Docker 桌面管理
版本在这里是无用的信息。
问题
跨 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
(作为软链接),但是这个软链接并没有出现在容器中。
解决方案是将这一行添加到 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
软链接没有损坏)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。