私はuCOSやThreadXなどの組み込みオペレーティングシステムの仕事をしてきました。 Linuxでアプリケーションを作成しましたが、今ではLinuxカーネルを学び始める予定です。環境についていくつかの質問があります。
どのディストリビューションが最高のディストリビューションで、使いやすいカーネル開発ツールを備えたディストリビューションは何ですか? (私はこれまでRHELとFedoraを使用していました。これに満足していますが、Ubuntuにもカーネルを簡単にコンパイルできる組み込みスクリプトがあるようです。
make_kpkg
)カーネルのデバッグに最適な設定を説明できますか?他の組み込みオペレーティングシステムをデバッグするときは、シリアルポートを使用して進行状況、JTAGなどをダンプします。 Linuxカーネル開発者はどの設定を使用しますか? (シリアルポートを備えたテストベンチPCは私のニーズに十分ですか?それでは、シリアルポートにダンプするようにカーネルをどのように設定しますか?)カーネルメッセージを自分のラップトップから読み取るシリアルコンソールにリダイレクトする予定です。
カーネルコードのデバッグとトレースに最適なツールは何ですか?述べたように、シリアルコンソールは唯一の方法ですか?それともPC用のIDE / JTAGインターフェースがありますか?
答え1
Linuxカーネル開発の個人的な好みはDebianです。今あなたの視点では:
お分かりのように、UbuntuはすでにDebianにある以上の開発を簡素化するためにカーネルに新機能を提供しません。たとえば、make_kpkgはUbuntuではなくDebianの機能です。 Debian で一般的な Linux カーネル開発作業を開始するのに役立つリンクは次のとおりです。
カーネルデバッグを実行する最も簡単な方法は、QEMUとGDBを使用することです。始めるのに役立ついくつかのリンク:
- http://files.meetup.com/1590495/debugging-with-qemu.pdf
- http://www.cs.rochester.edu/~sandhya/csc256/locationments/qemu_linux.html
ただし、実際のシリアルデバッグと実際のハードウェアの使用がより良いいくつかのシナリオ(たとえば、特定のハードウェア問題のデバッグなど)では、このアプローチは適切ではないことに注意する必要があります。これには、次のものを使用できます。韓国GDB(イーサネットでも動作します)。韓国開発銀行また良い選択です。さて、KGDBとKDBはどちらもマージLinuxカーネルを入力してください。この二人の男についてもっと知るここ。もう一つの素晴らしい方法は次のとおりです。ユーザーモードLinuxカーネル。他のプロセスと同様に、ユーザーモードでカーネルを実行します。他のプログラムと同じようにデバッグできます。(はい)。ユーザーモードLinuxの詳細ここ。 2.6.0以降、UMLはLinuxカーネルの一部であるため、次のようにUMLパターンでより高い公式カーネルバージョンを構築できます。次のようにしてください。
項目2を参照してください。残念ながら、各ツール/方法には長所と短所があるため、究極の最善の方法はありません。
答え2
i386ハードウェアに基づいていない組み込みプラットフォーム用に開発する場合は、クロスコンパイルが必要です。これエンデビアンこのプロジェクトは、PC(i386またはamd64)で複数のアーキテクチャ(ARM、m68k、MIPSなど)を開発するためのツールチェーンを提供します。つまり、Debian では単にリポジトリを追加し、選択したターゲットのツールチェーンを apt-get インストールできます。
答え3
JTAGプローブは存在しますが、かなり高価です(そしてそれを作る会社は独占契約を結んでいます)。カーネルコードをデバッグする最善の方法は、kvmまたはqemuで始まり、エミュレーションでgdbserverを使用することです。
答え4
デフォルトでは、すべてのメインラインディストリビューションはうまく機能する必要があります(それらは独自のディストリビューションを使用してクラックします)。より快適に感じるものを使用してください。