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

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

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

cd linux-4.9.59/
make menuconfig
make

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

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

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

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

make modules_install

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

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

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

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

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

答案1

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

$ depmod -b "$INSTALL_MOD_PATH" -F System.map 4.9.59

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

现在,即使是普通的 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

e,g:代替makeand make modules_install(作为普通用户,不需要 root):

stretch-amd64:~/linux-source-4.13.10$ make bindeb-pkg -j4

[……很久以后……]

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

当然,这可能需要一些额外的 debian 软件包,例如dpkg-devfakeroot一些相关的软件包,但如果目标也是 debian,那么在那里安装它可能会更容易。

相关内容