如何为新编译的内核创建 Linux 头文件?

Mil*_*avi 2 linux debian kernel-modules

在 Debian 中,当我想编译我的内核模块时,我需要安装linux-header-*软件包,然后我需要编写makefile如下代码:

obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)

但是现在我已经从 kernel.org 下载了特定的 kenel 并编译它。那么我怎样才能解决我的KDIR变量makefile

我想知道,Debian 维护者如何创建linux-header-*软件包?

gol*_*cks 5

你不必。

KDIR := /lib/modules/$(shell uname -r)/build
Run Code Online (Sandbox Code Playgroud)

假设您正在为当前运行的内核构建一个模块,因为它用于$(shell uname -r)完成路径。当您构建内核并运行 时make modules_install,模块被复制到相应的目录中/lib/modules——这将匹配该uname -r内核的输出。

build子目录是内核源代码树的链接。所以不要抹去,很明显。

如果您正在编译与运行内核不同的内核,只需将其设置KDIR为构建它的源目录。

  • 事实上,`build` 甚至根本不需要存在就可以使系统工作。但是如果你想在运行的内核中使用那个 makefile,它就可以了。如果发行版`/lib/modules/Xx-whatever` 中有一个构建目录,那么无论它是什么,它至少是源代码树的*部分* —— 当您安装“内核源”包时,它可能会被安装。如果它是空的或不存在,那是因为你还没有安装这样的包。但是,如果您是从自己下载的源构建的,则不需要它。无论如何都不会涉及发行版的东西。 (2认同)