カーネルのコンパイル: module.dep 生成とファイルマッピング

カーネルのコンパイル: module.dep 生成とファイルマッピング

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/。ただし、module.depとマップファイルは生成されません。../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

makeはい、g:andの代わりに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

もちろん、これにはいくつかの関連パッケージdpkg-devなどの追加のDebianパッケージが必要な場合がありますが、ターゲットfakerootもDebianの場合はそこにインストールする方が簡単です。

関連情報