私の個人的な Linux カーネル開発の好みは Debian です。ポイントはこちら:
<オール>ご想像のとおり、Ubuntu は、Debian で既に利用可能なものを除いて、開発を容易にするためにカーネルに新しいものを何ももたらしません。たとえば、 make_kpkg は Debian の機能であり、Ubuntu ではありません。 Debian で一般的な Linux カーネル開発タスクを開始するためのリンクがいくつかあります:
- 第 4 章 - Debian Linux カーネル ハンドブックの一般的なカーネル関連タスク
- 第 10 章 - Debian と Debian GNU/Linux FAQ のカーネル
カーネルのデバッグを行う最も簡単な方法は、QEMU と GDB を使用することです。開始するためのリンク:
- http://files.meetup.com/1590495/debugging-with-qemu.pdf
- http://www.cs.rochester.edu/~sandhya/csc256/assignments/qemu_linux.html
ただし、この方法は、特定のハードウェアの問題のデバッグなどの特定のシナリオでは実行できないことに注意してください。この場合、物理シリアル デバッグと実際のハードウェアを使用する方が適切です。これには、KGDB を使用できます (イーサネットでも動作します)。 KDB も良い選択です。ところで、KGDB と KDB の両方が Linux カーネルにマージされました。これらの 2 つの詳細については、こちらを参照してください。ハードウェア以外に関連する問題に対して非常に効果的なもう 1 つのクールな方法は、ユーザーモードの Linux カーネルを使用することです。カーネルを他のプロセスとしてユーザーモードで実行すると、他のプログラム (例) と同じようにデバッグできます。ユーザーモード Linux の詳細については、こちらをご覧ください。 UML は 2.6.0 以降の Linux カーネルの一部であるため、次の手順に従って、それより上の公式カーネル バージョンを UML モードにビルドできます。
項目 2 を参照してください。残念ながら、各ツール/方法には長所と短所があるため、ここには究極の最善の方法はありません。
i386 ハードウェアに基づいていない組み込みプラットフォーム用に開発している場合は、クロスコンパイルする必要があります。 Emdebian プロジェクトは、PC (i386 または amd64) 上の多くのアーキテクチャ (ARM、m68k、MIPS など) 向けに開発するためのツールチェーンを提供します。つまり、Debian では、リポジトリを追加して、選択したターゲット用のツールチェーンを apt-get インストールするだけです。
JTAG プローブは存在しますが、これらはかなり高価です (そして、それらを構築する会社は独占契約を結んでいます)。カーネル コードをデバッグする最良の方法は、エミュレーション内で gdbserver を使用して kvm または qemu で開始することです。