私はLinuxカーネルのプログラミングを始めており、これまで何度も成功して独自のカーネルを構築してきました。しかし、インターネット上で見つけたステップバイステップのガイドを使って行いましたが、ビルドプロセス中に何が起こっているのか実際には理解していませんでした。これまで私はカーネルを構築するいくつかの異なる方法を見つけました。一つは:
make-kpkg -j5 --initrd kernel-image kernel-headers
私が理解したのは、make-kpkgはカーネル関連のエントリを構築してパッケージ化するために設計されたDebianプログラムです。 --initrdは、initrdイメージを自動的に生成するために使用されます。最後の2つのパラメータ(カーネルイメージとカーネルヘッダ)の目的は何ですか?
カーネルを構築する別の方法は次のとおりです。
make deb-pkg
このコマンドは最初のコマンドと比較して何をしますか?
また、このガイド、カーネルの構築は次のように実行されます。
fakeroot debian/rules clean
fakeroot debian/rules binary-headers binary-generic
Ubuntuでカーネルを構築するための推奨される方法は何ですか?上記のコマンドのいずれかを実行すると、正確に何が起こりますか?上記のいずれかのコマンドで実行されるすべての操作を手動で実行するには、どのような手順を実行する必要がありますか?
答え1
make-kpkg
パッケージのコマンドですkernel-package
。使用されるDebianディストリビューションで提供されるカーネルパッケージの公式パッケージングインフラストラクチャに参加してください。 Debian ディストリビューションの現在のカーネルパッケージマネージャが使用を中止することを決めたため、この目的には使用されなくなりました。ただし、パッケージ作成者はパッケージのメンテナンスをkernel-package
中断していないため、依然として自分で作成することをお勧めします。 Debian カーネルの公式サポート方法のパッケージ版です。これにはいくつかのオプションとターゲットがあります。最も重要なのは質問で言及したことです。つまり、kernel-image
(プロセスで選択したカーネルとモジュールを含むパッケージをビルドしますmake config
)、kernel-headers
(出力をコンパイルする場合はインクルードファイルが含まれています。-of-treeモジュールが必要になる場合があります)。パッケージkernel-package
は一緒にリリースされたDebian(またはUbuntuなどの派生バージョン)の一部として保持されているため、Debianインフラストラクチャが変更されると、最新バージョンが更新され、それを統合してそのバージョンkernel-package
のDebianに同梱されます。したがって、kernel-package
パッケージで作成されたカーネルパッケージは、常にそのパッケージが作成されたDebianのバージョンに最適です。ただし、Linuxカーネルの内容が画期的な方法で変更された場合、kernel-package
Debian安定リリース用のカーネルパッケージを更新するのはやや複雑になる可能性があります。
make deb-pkg
Linuxカーネルビルドインフラストラクチャのターゲットです。 Debian 開発者からパッチを受け取りますが、Debian 内で維持されていないため、ビルドするカーネルバージョンを作成するときは常に最新のツールと戦略を使用してください。これは、場合によっては、以前のディストリビューションでまだ利用できなかったツールを使用しようとする可能性があることを意味します。 Debian 内でメンテナンスされていないため、カーネルパッケージを作成する正式にサポートされている方法ではありませんが(少なくとも Debian の観点からはそうではありません)、Debian に関連する人がほとんどメンテナンスを行うため、使用できないと疑う理由はありません。効果。
どの方法を選択しても、選択の問題に過ぎません。パッケージビルドオプションの特別な結果に多くの投資をしない限り、両方の方法がうまく機能します。