Linuxカーネルをリモートでデバッグしようとしたときに問題が発生しました。
私の設定:
- ターゲットマシンは、デバッグ情報とKGDBを使用して構築されたカスタムカーネル4.3を含むUbnutu Linuxです。
- WindowsとCygwinがインストールされた開発マシンです。
Linux側のシリアルポートと開発システム側のUSBを使ってシステムに接続しています。ターゲットマシンで:insmodを使用してモジュールXをロードしました。
>cat /sys/module/X/sections/.text
0xffffffffc046e000
>cat /sys/module/X/sections/.bss
0xffffffffc04708c0
>cat /sys/module/X/sections/.data
0xffffffffc0470000
「一部のパラメータ」を使用してカーネルを起動する必要があることを読んでいましたが、Ubuntuでこれを行う方法をよく理解していないので、次のようにしました。
>echo "ttyS0,115200 > /sys/module/kgdboc/parameters/kgdboc
またこれを試しました:
echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc
それから
>echo g > /proc/sysrq-trigger
この時点で、Linuxシステムは停止します。これは良い現象です。 (gdbを待っています)cygwinを開いたWindowsシステムで、vmlinuxファイルとXoファイルをルートディレクトリに配置し、ソースコードを正しい場所に配置します。それから私は走った。
gdb ./vmlinux - b 115200
(gdb) add-symbol-file byt_adsp21479.o 0xffffffffc046e000 -s .bss 0xffffffffc04708c0 -s .data 0xffffffffc0470000
(gdb) set architecture i386:x86-64:intel
その後、カーネルモジュールにいくつかのブレークポイントを設定して実行しました。
(gdb) target remote /dev/ttyS7 which is COM8
有効で入場後
(gdb) continue
Linuxシステムは解放されますが、Linuxシステムでブレークポイントをトリガーする必要があるタスクを実行すると、開発システムに次のメッセージが表示されます。
[New Thread 3264]
Ignoring packet error, continuing...
Remote 'g' packet reply is too long: 0840000000000000000e00080847c0ffffffff000100c0000000000300000000000000bc3b63360088ffff0000000000000000a03b63360088ffff983b63360088ffff000063360088ffff2f944e2fbd3b000020c00a360088ffff000000000000000000000000000000000300000000000000000000000000000000ccd7ceff7f0000ede146c0ffffffff4602000010000000180000000000000000000000
最も奇妙なことは、ある時点で2つの機能を入力できましたが、同じエラーメッセージが表示されたことです。どんな問題がありますか?
ちなみに、私はシリアルを介したデバッグを放棄し、イーサネットを介したデバッグを試みたので、ここに行きました。http://sysprogs.com/VisualKernel/kgdboe/tutorial/ kgboeをダウンロードしてビルドしましたが、insmod kgdboe.koを実行しようとするとエラーが発生します。
insmod: Error: could not insert module kgdboe.ko : Unknown symbol module
dmesgを実行するとわかります。
kgdboe: Unknown symbol set_memory_rw (err 0)
自分の設定に基づいてカーネルモジュールをデバッグする方法を見つけるのに役立つ人はいますか?ありがとうございます!