重要な要約: "make deb-pkg"を使用してLinux(Debian)カーネルをコンパイルした後、.configを少し変更した後にどのように新しいカーネルを作成できますか?
こんにちは、
次のようにカーネルをコンパイルしようとしています。https://www.debian.org/doc//manuals/debian-handbook/sect.kernel-compilation.pl.html。まあ、私はやった。時間がかかってインストールしましたが、起動できませんね。
だからもう一度やり直してください。 .configを編集し、新しいものをコンパイルしたいと思います。ただし、最初から始めて全体を削除してコンパイルしないと、これを行う方法はありません。ただ「作る」ということは何もしないようです。私の言葉は、何かをしましたが、Linuxのイメージを変えませんでした。以前に作成されたファイルをすべて削除せずに「make deb-pkg」のみを実行すると、エラーが返されます。
私はそれを検索しましたが、私が見つけた答えはすべて「make deb-pkg」を使用する前のように見え、うまくいきませんでした。
ありがとうございます。
答え1
リンクされたマニュアルの8.10.4章の始めから:
再建前の清掃に注意してください
ディレクトリ内ですでに一度コンパイルして最初からすべてを再構築するには(たとえば、カーネル構成を大幅に変更したため)、コンパイルされたファイルを削除する
make clean
ために実行する必要があります。
デフォルトでは、このmake
コマンドはMakefileで定義されている単純な一連の規則を使用します。たとえば、ルールはファイルがファイルX
からビルドされ、次を使用すると言うことができますA
。B
C
これら注文する。ファイルをX
再構築する必要があるかどうかを判断するときは、通常、make
ファイルが存在するか、存在する場合はX
ソースファイルより古いか、A
存在しないか、そのファイルのいずれかより古いかどうかを確認します。ソースを削除すると再構築されます。B
C
X
および/または構築に関するA
他の規則がある場合は、再帰的に等を決定する前に最初に評価されます。B
C
X
(数十年間、このmake
コマンド、特にGNUバージョンは多くの拡張を蓄積してきましたが、これは動作の基本的なアイデアのままです。)
「.configでマイナーな変更」を行ったと言われました。一部の.config
オプションは、ビルドする新しいモジュールを有効/無効にします。たとえば、以前に無効にしたモジュールを有効にすると、*.ko
以前に存在しなかった新しいファイルが存在しなければならず、カーネルMakefileシステムで検出される可能性が高くなります。
ただし、他のオプションは、#ifdef
特定のブロックを有効/無効にするか、個々のソースコードファイルの特定の値を変更することによってのみ#define
変更が発生します。これはカーネルMakefileシステムでは簡単には検出できません。
したがって、以前のカーネル構成が何であるかを正確に知らないままそしてこれが既知の問題か予想される問題か、正確なオプションを変更しても機能する必要がある問題であるかどうかを知る方法はありません。
カーネルMakefileシステム自体はかなり複雑です。カーネル構成オプションの変更のすべての可能な組み合わせを数学的に完全な方法で処理するには複雑すぎる可能性があります。すべての構成変更が適用されるように注意するには間違いがあります。時々、これは最適なものより多くのファイルを書き換えることができます。設定の変更はinclude/generated/autoconf.h
に含まれているものを更新しinclude/linux/kconfig.h
、デフォルトで含まれているため、デフォルトではすべてが再構築されます。
上記の引用によると、推奨される手順は「再実行する前に実行」NOTE
です。make deb-pkg
make clean
同様のことを経験しましたmake deb-pkg
。私の記憶が正しい場合、再実行中に発生したエラーは、実際のカーネルのコンパイルよりも.debパッケージのビルドステップに関連していたようです。