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当内核当前未运行时,如何运行内核模块?
要回答您的问题,这应该有效。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)
例如:代替make和make 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-dev,fakeroot和一些相关的,但如果目标是一个debian过,那是那么也许更容易安装在那里。
| 归档时间: |
|
| 查看次数: |
2975 次 |
| 最近记录: |