Отладка ядра - vm linux -gdb.py не запускается на gdb - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь удаленно отладить ядро ​​Linux. Я создал виртуальную машину (используя VMware) и подключился к ней из своего P C с помощью gdb, и все работает нормально.

Проблема в том, что gdb не удается загрузить vm linux -gdb.py скрипт. Я попытался добавить его с помощью команды source на GDB и получил следующую ошибку:

Traceback (most recent call last):
  File "~/workspace/kernels/default-kernel/scripts/gdb/vmlinux-gdb.py", line 28, in <module>
ImportError: No module named 'linux'

Дерево каталогов:

drwxr-xr-x  2 iofek iofek 4096 Mar 22 19:59 linux
-rwxr-xr-x  1 iofek iofek  577 Mar 22 19:43 Makefile
-rwxrwxr-x  1 iofek iofek    0 Mar 22 19:43 modules.order
-rwxr-xr-x  1 iofek iofek  759 Mar 22 20:00 vmlinux-gdb.py

Теперь я не могу понять почему модуль не может найти каталог linux. Я обновил PYTHONPATH, а также добавил путь, используя sys.path.append. Кроме того, все файлы в linux имеют права доступа.

Есть идеи?

1 Ответ

0 голосов
/ 17 апреля 2020

Краткий ответ

Никогда не используйте ... linux ... / scripts / gdb / vm linux -gdb.py. Используйте файл vm linux -gdb.py, который находится в каталог root вашего вывода сборки ядра вместе с файлом vm linux.

Если этот файл не существует, вам необходимо:

Activate CONFIG_GDB_SCRIPTS in your kernel configuration


Длинное руководство

Сначала убедитесь, что gdb-скрипты будут созданы во время сборки ядра:

make menuconfig
Enable CONFIG_GDB_SCRIPTS
make

Затем выясните, использует ли ваша сборка ядра отдельную версию создайте выходную папку, а затем следуйте ОДНОЙ (xor) из следующих глав:

Либо: сборка на месте без двоичного файла сборки dir

Если вы собираете ядро ​​с помощью файлов .o и .ko Загроможденный внутри исходного кода (например, Ubuntu рекомендует его на wiki.ubuntu.com ), вы можете перейти в исходную папку root, например, предположим, что вы встроили в папку ~ / gdbenv, Запустите GDB оттуда, а затем загрузка будет возможна из коробки:

cd ~/gdbenv
gdb ./vmlinux
(gdb) add-auto-load-safe-path ~/gdbenv
(gdb) source ~/gdbenv/vmlinux-gdb.py

Или: Когда ваш способ построения ernel выводит двоичные файлы в отдельном каталоге сборки

Это делается, например, в сборке Yocto, где все двоичные файлы оказываются в другой папке, не смешанной с исходной папкой. В таких средах вам нужно собрать все вместе в одной среде (vm linux, gdb-scripts и, возможно, исходные коды ядра).

tar -xf ~/Downloads/linux-blabla.tgz -C ~/gdbenv       (optional)
cp .../build/vmlinux-gdb.py ~/gdbenv
mkdir ~/gdbenv/scripts
cp -r .../build/scripts/gdb ~/gdbenv/scripts
cp .../build/vmlinux ~/gdbenv

Then procede like in the preceeding chapter (cd ~/gdbenv, gdb ./vmlinux ...)
...