Debian
核心編譯:生成 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
當核心目前未執行時,如何執行核心模組?
要回答您的問題,這應該有效。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:代替
make
andmake 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-dev
和fakeroot
一些相關的,但如果目標也是 debian,那麼在那里安裝它可能更容易。