在Docker容器中创建/构建内核模块

hk8txs48  于 2023-01-29  发布在  Docker
关注(0)|答案(2)|浏览(307)

我目前有我的主机系统运行macos与docker。我有我的macos主机系统产卵一个docker容器。
派生的Docker容器当前正在运行ubuntu:19.10
我正在尝试在Docker容器内构建内核模块
当我奔跑

$> make

我得到...

Building coolMod driver...
make -C /lib/modules/`uname -r`/build M=/home/foo/coolMod modules
make[1]: *** /lib/modules/4.19.76-linuxkit/build: No such file or directory.  Stop.
make: *** [Makefile:43: coolMod.ko] Error 2

Docker容器没有内核头文件。
当我尝试运行时:

$> apt install linux-headers-$(uname -r)
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package linux-headers-4.19.76-linuxkit
E: Couldn't find any package by glob 'linux-headers-4.19.76-linuxkit'
E: Couldn't find any package by regex 'linux-headers-4.19.76-linuxkit'

如何安装内核头文件,以便从Docker容器中构建内核模块?
谢谢大家!

gcuhipw9

gcuhipw91#

也许会晚一些,但是为了在容器内构建内核模块,您应该在--特权模式下执行容器。
除了依赖项kernel-devel和kernel-header之外,内核应该为您的特定内核版本构建,因此您应该创建一个卷来将host:/lib/modules链接到your_container:/lib/modules。
一个好的起点应该是https://projectatomic.io/blog/2018/06/building-kernel-modules-with-podman/

jxct1oxe

jxct1oxe2#

Docker容器没有自己的内核;它们使用Docker主机的内核。因此,当您运行uname命令时,您看到的结果是底层Docker主机的结果。您可以通过比较uname -a在Docker主机上的结果与Docker容器中的结果来验证这一点。
这很可能是makeapt install都失败的原因。
我不确定您要构建的特定模块,以及它是否有任何其他依赖项。一般来说,如果Docker容器中有内核源代码,则可以在Docker容器中构建内核模块。请尝试在apt install命令中使用特定版本的内核,而不是使用/dependy on uname命令。然后执行$ make -C <path_to_kernel_src> M=$PWD
请参考我刚刚发布的另一个问题的this答案。

相关问题