内核编译:生成modules.dep和map文件

Mar*_*ter 3 debian kernel-modules linux-kernel

我正在 Debian Stretch 上编译 linux 内核:

cd linux-4.9.59/
make menuconfig
make
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。

通常,我会发出make modules_install, 将模块复制到/lib/modules/.

但是这个内核是为另一台机器准备的,所以我不想在本地复制模块。此外,我不是以 root 身份编译的,所以/lib/modules/无论如何写入都行不通。

export INSTALL_MOD_PATH="../MY_NEW_KERNEL"
mkdir -vp "${INSTALL_MOD_PATH}

make modules_install
Run Code Online (Sandbox Code Playgroud)

以上将新编译的模块复制到目录../MY_NEW_KERNEL/lib/modules/. 但它不会生成 modules.dep 和 map 文件../MY_NEW_KERNEL/lib/modules/

通常,如果这是当前正在运行的内核,我可以运行depmod以在/lib/modules/. 但是我没有在当前机器上运行这个内核。

甚至当我将 bzImage 和模块复制到目标机器时,我也必须先重新启动到新内核,然后运行depmod.

但问题是,内核无法启动,因为它找不到模块,因为我没有运行depmod.

depmod当内核当前未运行时,如何运行内核模块?

A.B*_*A.B 5

要回答您的问题,这应该有效。System.map 是在刚刚构建的源目录中创建的,并且是必需的:

$ depmod -b "$INSTALL_MOD_PATH" -F System.map 4.9.59
Run Code Online (Sandbox Code Playgroud)

其中 4.9.59 是新的非运行内核版本。

现在,即使是普通的 vanilla linux 内核源代码也允许构建 debian 包。

$ make help|grep deb
  deb-pkg             - Build both source and binary deb kernel packages
  bindeb-pkg          - Build only the binary kernel deb package
Run Code Online (Sandbox Code Playgroud)

例如:代替makemake modules_install(作为普通用户,不需要 root):

stretch-amd64:~/linux-source-4.13.10$ make bindeb-pkg -j4
Run Code Online (Sandbox Code Playgroud)

[……以后……]

stretch-amd64:~/linux-source-4.13.10$ $ ls -1 ../*4.13.10*deb
../linux-headers-4.13.10_4.13.10-1_amd64.deb
../linux-image-4.13.10_4.13.10-1_amd64.deb
../linux-libc-dev_4.13.10-1_amd64.deb
Run Code Online (Sandbox Code Playgroud)

当然,这可能需要一些额外的Debian软件包,喜欢dpkg-devfakeroot和一些相关的,但如果目标是一个debian过,那是那么也许更容易安装在那里。