Makefile: нет правила, чтобы сделать цель '/constants.py.in' необходимой для '/constants.py'. Останавливаться

В настоящее время я работаю над машиной 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 во время отладки.


person sharlit mals    schedule 14.06.2021    source источник
comment
Каким направлениям вы следуете? Есть ли в этом каталоге сценарий настройки или файл README?   -  person stark    schedule 14.06.2021
comment
Его нет, содержимое каталога используется в качестве пакета python, используемого для импорта необходимых файлов *.py, но в каталоге находится файл Makefile и Constants.py.in, в настоящее время работающий над выяснением того, что означает FORCE и если правильно написано   -  person sharlit mals    schedule 14.06.2021
comment
Я следил за ошибками vmlinux-gdb.py и понял, что для работы скрипта gdb файл console.py.in должен быть встроен в файл *.py.   -  person sharlit mals    schedule 14.06.2021
comment
Причина ошибки в том, что переменная obj в пути $(obj)/constants.py не задана (раскрывается в пустую строку). Вот почему он, кажется, смотрит на /constants.py. Этот make-файл не предназначен для непосредственного запуска. Он предназначен для запуска в качестве компонента системы сборки ядра Linux. Эта система сборки установит переменные obj и src и другие важные вещи, а затем включит этот make-файл. Я недостаточно знаю об этом проекте, чтобы помочь больше, чем это.   -  person MadScientist    schedule 14.06.2021
comment
Я вижу, спасибо большое! теперь мне просто интересно, как мне заставить свое ядро ​​​​создать скрипт для меня   -  person sharlit mals    schedule 14.06.2021


Ответы (1)


Запуск make scripts_gdb на верхнем уровне исходного дерева приведет к запуску нескольких других файлов Makefile и, в конечном итоге, к сборке constants.py. Вы увидите некоторые болтовню, подобную следующей:

builder@localhost:/tmp/linux/linux-5.4.125$ make V=1 scripts_gdb
make -f ./scripts/Makefile.build obj=scripts/basic
...
make -f ./scripts/Makefile.build obj=scripts/gdb
make -f ./scripts/Makefile.build obj=scripts/gdb/linux
  gcc -E -E -x c -P -Wp,-MD,scripts/gdb/linux/.constants.py.d ... \
    scripts/gdb/linux/constants.py.in > scripts/gdb/linux/constants.py ;\
  sed -i '1,/<!-- end-c-headers -->/d;' scripts/gdb/linux/constants.py
ln -fsn /tmp/linux/linux-5.4.125/scripts/gdb/vmlinux-gdb.py

После этого vmlinux-gdb.py можно будет использовать.

person Mark Plotnick    schedule 15.06.2021