我目前的主机系统运行的是Mac OS和docker。我的Mac主机系统生成了一个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 2docker容器没有内核标头。
当我尝试运行时:
$> 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容器中构建内核模块?
谢谢!
发布于 2021-11-26 13:53:50
也许为时已晚,但为了在容器中构建内核模块,您应该在特权模式下执行容器。
除了依赖kernel-devel和kernel-headers之外,内核还应该为您特定的内核版本构建,因此您应该创建一个卷来将host:/lib/modules链接到您的_container:/lib/modules。
一个好的起点应该是https://projectatomic.io/blog/2018/06/building-kernel-modules-with-podman/。
发布于 2022-01-18 18:47:58
Docker容器没有自己的内核;它们使用Docker主机的内核。因此,当您运行uname命令时,您看到的结果就是底层Docker主机的结果。您可以通过比较Docker主机上的uname -a结果和Docker容器中的结果来验证这一点。
这很可能是make和apt install都失败的原因。
我不确定您正在尝试构建的特定模块,以及它是否具有任何其他依赖项。通常,如果Docker容器中有内核源代码,则可以在Docker容器中构建内核模块。尝试在您的apt install命令中使用特定版本的内核,而不是使用/依靠uname命令。然后是$ make -C <path_to_kernel_src> M=$PWD
请参考我刚刚发布的另一个问题的this答案。
https://stackoverflow.com/questions/62455239
复制相似问题