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の場合はそこにインストールする方が簡単です。