Qemuを使用してLinuxカーネルの開発/ハッキングを学び、Linux(2.6.34.3)のブートプロセスをデバッグしたいと考えています。私はARMの用途の広いプラットフォーム用にコンパイルし、Codesourcerysarm-none-eabiクロスコンパイラーを使用しています。gdbserverを使用してビルドおよびデバッグするための環境としてEclipseを使用しています。
そのため、qemuでカーネルを正常にビルドして実行するように管理しましたが、問題は、ブートプロセス(アドレス0)でデバッガーにソースコードが表示されず、逆アセンブリコードしか表示されないことです。ただし、init / main.c(0xC0000000を超えるアドレス)で仮想メモリに切り替えると、ソースコードが表示され、ソースコードを確認して、コードをステップスルーできます。何故ですか?最初からそれが欲しいです。
Linuxの起動プロセスをデバッグする方法に関するヒントはありますか?グーグルのすべてのガイドはカーネルをデバッグする方法を示していますが、それらはすべてstart_kernel()(init / main.cにあります)から表示され、ブートプロセスの最初(arch / arm / boot / compressed / head)からは表示されません。 S)。経験のある方はどうぞよろしくお願いします!
ルートフォルダのSystem.mapを調べたところ、c0004000(仮想アドレスが開始する場所)からのもののシンボルのみがあります。デバッグ情報を取得するためにvmlinuxをgdbserverにロードします。おそらくそれがソースがない理由ですか?