В настоящее время я работаю над машиной Ubuntu 18.0.4.5 и пытаюсь понять весь процесс отладки ядра. Я столкнулся с необходимостью автоматического запуска скриптов GDB вместе с файлом vmlinux, особенно скрипта, находящегося в /usr/src/linux../scripts/gdb/vmlinux-gdb.py. Я убедился, что скрипт запускался при инициализации с файлом vmlinux и имел следующую ошибку
gdb vmlinux
File "/usr/src/linux-hwe-5.4-headers-5.4.0-42/scripts/gdb/vmlinux-gdb.py", line 34, in <module>
import linux.proc
File "/usr/share/gdb/auto-load/gdb/linux/proc.py", line 15, in <module>
from linux import constants
ImportError: cannot import name 'constants'
После возникновения этой ошибки я проверил каталог /usr/share/gdb/auto-load/gdb/linux, чтобы найти отсутствующий файл, и нашел только 2 связанных файла:
constants.py.in
Makefile
Внутри файла Constants.py.in был код C, смешанный с Python, и было указано, что сборка позаботится об этом. Точные файлы Makefile и Constants.py.in можно найти здесь для справки: https://elixir.bootlin.com/linux/v5.4/source/scripts/gdb/linux/Makefile https://elixir.bootlin.com/linux/v5.4/source/scripts/gdb/linux/constants.py.in
Первая попытка сборки привела к следующему:
make: *** No rule to make target '/constants.py.in', needed by '/constants.py'. Stop.
После некоторых проб и ошибок (у меня нет опыта работы с языком Makefile) я скопировал const.py.in в каталог /
и снова попытался построить и получил следующую ошибку:
make: *** No rule to make target 'FORCE', needed by '/constants.py'. Stop.
Я не понимаю, что это за FORCE
, похоже на какую-то конфигурацию makefile, но я не могу найти разумное объяснение или патч, те же ошибки возникают при попытке собрать что-либо под /usr/src/linux-.../
пытаясь понять, как исправить процесс сборки и, в конечном итоге, создать правильный файл const.py, который, надеюсь, станет последней частью работы vmlinux-gdb.py
во время отладки.
vmlinux-gdb.py
и понял, что для работы скрипта gdb файл console.py.in должен быть встроен в файл*.py
. - person sharlit mals   schedule 14.06.2021obj
в пути$(obj)/constants.py
не задана (раскрывается в пустую строку). Вот почему он, кажется, смотрит на/constants.py
. Этот make-файл не предназначен для непосредственного запуска. Он предназначен для запуска в качестве компонента системы сборки ядра Linux. Эта система сборки установит переменныеobj
иsrc
и другие важные вещи, а затем включит этот make-файл. Я недостаточно знаю об этом проекте, чтобы помочь больше, чем это. - person MadScientist   schedule 14.06.2021