Linuxカーネルのソースレベルのデバッグ

ツールを読んで、Linuxカーネルのソースコード

      もちろん窓好ましい供給源の洞察のうち、Linuxのではなく、何のソース洞察ような良いツールはありませんが、そこに選択肢がたくさんありますが、絶対に一部の人々はvimの+のctags + cscopeの組み合わせを選択します感じて、いくつかの人々がいるワインを選択しますか、 vimの+のctags + cscopeのためのコードリーダのためのコースのソース洞察または選択navigatrorは、組み合わせはかなり良いオプションですが、私は日食を使用するときに、ソースコード読み取りツールがそうであるように、Linux環境で個人的な感情を日食vimの+のctags + cscopeの多くの方が簡単の組み合わせより。

     以下の構成は、EclipseのLinux環境スキームを実装されています。

      ダウンロード日食:http://eclipse.org/downloads/?osType=linux

      Eclipse環境設定プログラム:http://forum.ubuntu.org.cn/viewtopic.php?t=183803

二日食+ QEMUもLinuxのソースコードコンパイラとデバッガ

       最初はインサイトのデフォルトサポートを削除し、より多くの、しかし、10.04 Ubuntuのバージョン以上のインタフェースに比べて、より良いinsgihtカーネルが使用するQEMU +洞察やQEMU + DDDの組み合わせを、デバッグ、洞察は、ソースコードコンパイラのインストールのみをダウンロードすることができ、そして、洞察力は、更新に非常に遅いです。誰かがLinuxカーネルのソースコードコンパイラおよびデバッグ日食+ QEMUを行う見るために前に長い時間が、私は最終的にすべての後に、デバッガの日食は非常に強力ですが、試してみる時間を吸っています。

      ツールの組み合わせ:  C / C ++のLinux開発者のためのEclipse IDE   + QEMU-0.12.3(好ましくはKVMで、残念ながらマシンが古すぎると、ハードウェアの仮想化をサポートしていません)

 

1.まず、私は、Linux-2.6.32.tar.bz2を選択したカーネルソースwww.kernel.orgを、ダウンロードする必要があります。私は、ターミナルで次のコマンドを入力して、自分のホームディレクトリにダウンロードします。

$カドミウム(バックホームディレクトリ)

$タールXFのlinux-2.6.32.tar.bz2(ソースを抽出)

$ MKDIRのlinux-2.6.32-OBJ(カーネルコンパイルされたオブジェクトファイルの出力ディレクトリを作成します)

$カドミウムのlinux-2.6.32(カーネルソースツリーのルートディレクトリ)

$くださいO =〜/のlinux-2.6.28-OBJ menuconfigの(ここでは、カーネルを設定すると、カーネルは、設定ファイル〜/のlinux-2.6.32-OBJディレクトリの.configを生成)

$メイクmrproper 

 

2.次は、オープンelicpseをWE、ウェルカム画面があるとき、あなたが最初に開きました、

私たちは、ようこそ画面をオフにする権利上のワークベンチの画像をクリックしてください。日食CDTは、C / C ++のIDE非常に強力であるため、それは自動的にデフォルトの解像度のプロジェクトのソースコードになり、プロジェクトをコンパイルし、インテリジェントなメッセージを生成します。あなたがそれらを閉じたいので、しかし、我々は一時的にカーネルプロセスをデバッグするので、これらの機能を使用することはありません。

まず、ウィンドウ - > Preferences->一般 - >ワークスペースをビルドの自動オプションが削除されますに行ってきました。

 そして、ウィンドウ - > Preferences-> C / C ++へ - >インデクサ、ノーインデクサへの高速デフォルトのC / C ++インデクサー。

 その後、我々は新しいプロジェクトを作成し始めました。

 メニューから、[ファイル] - >新規 - >プロジェクト... - > C / C ++ - > Cプロジェクトや[次へ]をクリックします。

 その後、ダイアログボックスは、Linuxのカーネルとしてプロジェクト名]列で、プロジェクト名に塗りつぶしを表示されます。その後、使用するデフォルトの場所のオプションがオフにチェックします。場所では、カラムは、単にカーネルのソースパスを抽出いっぱい。プロジェクトの種類を選択メイクファイルプロジェクト] - > [空のプロジェクト。以下のようにLinuxのGCCツールチェインは、最終的な結果を選択します:

 

そして、次のボタンをクリックし、次のダイアログボックスが表示されます。今回はプロジェクトのデフォルト設定は完全に我々の要求を満たしていないため。プロジェクトの設定ダイアログを開き、[詳細設定]ボタンをクリックして、私たちはそう。我々は右の私たちは、[設定]タブの下のビルダーを使用するデフォルトのビルドコマンドがオフにチェックしますページの対応では、C / C ++ビルドオプションの左側を選択し、次に作るための新しいビルドコマンドを指定するO = /ホーム/ XXX / 。のlinux-2.6.28-OBJし、ファイルシステム内のビルドの場所をクリックしてください... /home/xxx/linux-2.6.28-obj最終結果のためのOBJファイルの出力ディレクトリを変更するにはボタンの下に示すように:

その後、動作オプションとページをクリックし、スペース内のすべての(インクリメンタルビルド)のビルドを変更するには、以下の変更は、(デフォルトのコマンドターゲット明確なカーネルOBJファイルである)mrproperのためにきれいになります。何とかした後、以下に示します:

今度は、カーネルをコンパイルすることができます。カーネルをコンパイルを開始するには、Ctrl + B。

 

カーネルをコンパイルしました。/home/xxx/linux-2.6.32-obj/arch/x86/boot/にイメージ、bzImageの大きなカーネル画像の下に生成されました。

 我々はxtermの下で実行する仮想マシンをQEMUこの時点で、次のように、コマンドラインは次のとおりです。

$ qemuの-s -S -hda〜/ Linuxの-0.2.img -kernel /home/xxx/linux-2.6.32-obj/arch/x86/boot/bzImage -appendルート=は/ dev / hdaに

 我解释一下这个命令行上的参数。

 -s 选项表示我们运行虚拟机时将1234端口开启成调试端口,供eclipse网络调试时使用

-S 选项表示我们启动虚拟机时要“冻住”虚拟机,等待调试器发出继续运行的命令。

-hda ~/linux-0.2.img 表示我们要运行时的硬盘 (这个文件可以在http://wiki.qemu.org/Download下到)
-kernel /home/xxx/linux-2.6.32-obj/arch/x86/boot/bzImage 表示我们要调试的内核镜像

-append root=/dev/hda 表示我们要传递给内核的参数(这里你可能感觉有点奇怪为啥是/dev/hda而不是/dev/hda1或是/dev/hda2呢?因为这个镜像仅仅是一个分区的二进制镜像,不是整个硬盘的镜像)

启动后,你会看到屏幕黑黑的啥也没有。因为我们指定了-S参数把虚拟机给“冻”住了。

 继续回到eclipse中,这时候我们在菜单中选择Run -> Debug Configurations ,这时候打开一个配置页面。然后我们在C/C++ Application上双击鼠标,这时在右侧的页面弹出了debug配置选项,然后我们在project一栏选择 linux-kernel ,在下面的C/C++ Application中填入/home/xxx/linux-2.6.32-obj/vmlinux,如下图所示:

然后我们单击Debugger选项页,将Debugger改为 GdbServer Debugger . 将Stop on startup at 改为start_kernel,将Connection子选项页下的Type改为TCP将Port number改为1234,最终如下图所示:

 然后单击Debug按钮开始调试!这时候Eclipse会提示我们切换 Perspective ,选择是,不再提示。

这时候就开始调试内核,而且是源码级的调试!如下图:

总结:不知道是我机器烂还是咋地,eclipse+qemu虽然调试信息更加详细,eclipse的调试器也足够强大,但是每次调试前都要进行编译,时间太久了,等不起!! 哪位大侠可知道如何每次调试不要编译!!

おすすめ

転載: www.cnblogs.com/cfas/p/12286080.html
おすすめ