Debian

核心編譯:生成 modules.dep 和 map 文件

  • October 29, 2017

我正在 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當核心目前未執行時,如何執行核心模組?

要回答您的問題,這應該有效。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

$$ … way later … $$

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,那麼在那里安裝它可能更容易。

引用自:https://unix.stackexchange.com/questions/401138