Полный редит:
Вы можете изменить процесс Make в исходном коде ядра для использования
-n, --just-print, --dry-run, --recon
Конечным результатом этого является то, что компилятор или любой исполняемый файл никогда не вызывается. Он просто подделывает его и говорит вам, что он сделает .
Опции и grep файлы из этого без создания источника. Это может быть так же просто, как настройка среды MAKE в оболочке для использования указанных выше параметров. Затем просто извлеките все команды компилятора, включающие файлы .c и .h. Загрузите исходный код ядра для 2.6.29.2, чтобы узнать, как это можно сделать. Изменить, чтобы прийти.
удачи
Отпишись, как ты поживаешь. Возможно выложите шелл-скрипт! :)
Followup
Строка 13 исходного кода ядра 2.6.29.2 включает в себя /2.6.19.2/Makefile
# Do not:
# o use make's built-in rules and variables
# (this increases performance and avoids hard-to-debug behaviour);
# o print "Entering directory ...";
MAKEFLAGS += -rR --no-print-directory
# We are using a recursive build, so we need to do a little thinking
# to get the ordering right.
Редактирование переменной MAKEFLAGS
для включения флагов dryrun должно позволить вам сохранить выходные данные конкретной конфигурации make, а затем выполнить grep позже. ала make> save.txt
Я изменил свой на
MAKEFLAGS += -rR --no-print-directory --just-print
Например (может быть намного лучше):
[aiden@host linux-2.6.29.2]$ \
make > build_out.txt; grep -o -E "[a-zA-Z0-9_-]+\.[ch]" build_out.txt
Не идеально, но сработало для меня хакерским способом и должно помочь вам. Мы надеемся, что тот же базовый процесс будет применен после слепого создания с настроенным ядром.
предупреждение
Без поддержки специфичных для архитектуры наборов инструментов или запуска Make на целевой архитектуре некоторые файлы ASM и специфичные для архитектуры отличаются от истинной сборки.
редактировать из комментария
Чтобы подавить ошибку ld, вам нужно найти следующий раздел (или аналогичный) в файле make вашего ядра.
# Make variables (CC, etc...)
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
Вам нужно выполнить шаги по настройке, чтобы сконфигурировать источник, прежде чем пытаться перечислить исходные файлы, использованные на предыдущих шагах (конвейерная обработка и очистка от пробного запуска), чтобы вы могли внести свои изменения в Makefile.enum
и использовать это после того, как вы выполните обычные шаги настройки (независимо от архитектуры, некоторые файлы типа config.h должны быть сгенерированы. Так что приведите исходный код ядра к точке, где вы собираетесь выполнить фактическую компиляцию, модули и все остальное). Уф!
Теперь, когда вы выполняете fake-make для перечисления исходных файлов, после публикации исходной конфигурации ядра (которая задает драйверы / модули, что угодно) LD завершится сбоем, как вы обнаружили. Вы можете изменить LD из
LD = $(CROSS_COMPILE)ld
до
LD = -$(CROSS_COMPILE)ld
Обратите внимание на символ «-». Это говорит Makefile игнорировать предупреждения. Очевидно, что вы пытаетесь сделать, это необычно, но довольно круто :) Дальнейшие ошибки можно подавить, найдя раздел Makefile и настроив выполненные команды. Я предлагаю вам очень дружить с Makefiles, так как вам может потребоваться изменить оператор IF позже. После того, как вы все разобрались, у вас будет «тупой» make-файл, который будет выплевывать файлы .c, чтобы вы могли сделать
make | grep -E "[a-zA-Z0-9_-]+\.[ch]"
Или что угодно.
У меня также есть классное предложение для проверки ваших результатов ... фактически собрать ядро ... но использовать API inotify Linux (вы можете получить привязки Python здесь http://pyinotify.sourceforge.net/) и наблюдать за событиями файловой системы в компиляции окно (например, файлы .c, читаемые gcc). Затем сравните это со своим списком из «тупого» make-файла.
Хорошо, я надеюсь, что это не слишком большая вафля! удачи