カーネルハッキング環境


22

私は、uCOS、ThreadXなどの組み込みOSで作業してきました。Linuxでアプリをコーディングしましたが、今はLinuxカーネルの学習を開始する予定です。環境に関する質問はほとんどありません。

  1. カーネル開発用の使いやすいツールを備えた最適なディストリビューションはどれですか?(これまで私はRHELとFedoraを使用していました。これらに満足していますが、Ubuntuにはmake_kpkgなどの簡単なカーネルコンパイル用の組み込みスクリプトもあるようです)

  2. カーネルデバッグの最適な設定について説明してください。他の組み込みOSのデバッグ中、進行状況やJTAGなどをダンプするためにシリアルポートを使用しました。Linuxカーネル開発者はどのようなセットアップを使用しますか?(シリアルポートを備えたテストベッドPCは私のニーズに十分ですか?はいの場合、カーネルをシリアルポートにダンプするように構成する方法は?)カーネルメッセージをラップトップで読み取られるシリアルコンソールにリダイレクトすることを計画しています。

  3. カーネルコードのデバッグとトレースに最適なツールは何ですか?前述したように、シリアルコンソールが唯一の方法ですか?または、PC用のIDE / JTAG種類のインターフェイスがありますか?


3
#1については、Linus自身がFedoraを使用しているため、おそらく何かを言っています。このトピックについて本当に答えを出すのに十分な知識はありませんが、他の人の言うことに興味があります。
jonescb

1
make_kpkgは、UbuntuのベースとなっているDebianと私のお気に入りのディストリビューションに由来します;)
アカウントを削除しました

回答:


14

Linux Kernel開発の個人的な趣味はDebianです。あなたのポイントのために:

  1. おそらくご想像のとおり、Debianですでに利用可能なものを除いて、Ubuntuは開発を容易にするためにカーネルに新しいものをもたらしません。たとえば、make_kpkgはDebianの機能であり、Ubuntuではありません。Debianでの一般的なLinuxカーネル開発タスクを開始するためのリンクを次に示します。

  2. カーネルデバッグを行う最も簡単な方法は、QEMUとGDBを使用することです。始めるためのリンク:

    ただし、この方法は、特定のハードウェアの問題のデバッグなど、物理シリアルデバッグと実際のハードウェアを使用したほうがよい特定のシナリオでは実行できないことに注意する必要があります。このために、KGDBを使用できます(イーサネットを使用しても機能します)。KDBも良い選択です。ああ、ところで、KGDBとKDBの両方がLinuxカーネルに統合されました。これら2つについては、こちらをご覧ください。非ハードウェア関連の問題に対して素晴らしい動作をする別のクールな方法は、ユーザーモードLinuxカーネルを使用することです。他のプロセスと同様にユーザーモードでカーネルを実行すると、他のプログラムと同じようにデバッグできます)。ユーザーモードLinuxの詳細こちら。UMLは2.6.0以降、Linuxカーネルの一部です。したがって、以下の手順に従って、 UMLモードにそれ以上の公式カーネルバージョンをビルドできます

  3. アイテム2を参照してください。残念なことに、各ツール/メソッドには長所と短所があるため、ここには究極の最良の方法はありません。


ありがとう!詳細な返信用。ところで私はカーネルのfsとbioサブシステムに興味を持っています。どの種類のセットアップが私に最適でしょうか?
rajaganesh87

UMLとQEMUはおそらく無料です。ファイルシステムを無料で簡単にプレイできるからです。
シンノック

非常に良いリンク、ただ一つのこと。私のお気に入りもdebianですが、カーネル開発はどんなディストリビューションでも作成できます。スラックはバニラカーネルを使用しているため、純粋主義者にとっては最良の方法かもしれませんが、構成は悪いものではなく、ベストを見つけることができます。
D4RIO

さらに便利なリンクがいくつか見つかりました。[リンク1](ibm.com/developerworks/linux/tutorials/l-kernelhack1/index.html)[リンク2](ibm.com/developerworks/linux/tutorials/l-kernelhack2/index。 html
rajaganesh87

6

i386ハードウェアに基づいていない組み込みプラットフォーム向けに開発している場合は、クロスコンパイルする必要があります。Emdebianプロジェクトは、PC上で多くのアーキテクチャ(ARM、m68kの、MIPSおよびそれ以上)(I386またはAMD64)のために開発するツールチェーンを提供します。つまり、Debianでは、リポジトリを追加して、選択したターゲットのツールチェーンをapt-getインストールするだけです。


3

JTAGプローブは存在しますが、これらはかなり高価です(そして、それらを構築する企業は独占的な契約を持っています)。カーネルコードをデバッグする最良の方法は、エミュレーション内でgdbserverを使用してkvmまたはqemuで起動することです。


さらに良いことに、ユーザーモードLinuxを使用します。通常のユーザーランドプロセスとしてのLinux。
フォンブランド

0

基本的に、メインラインディストリビューションはこれでうまく機能します(独自のディストリビューションを使用してハッキングします)。より快適に感じるものを使用してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.