Я работаю над модулем ядра Linux для 2.6.x ядро, и я должен просмотреть вывод блока, хотя это в настоящее время делается как временный файл удаленные послесловия. Я хотел бы иметь вывод блока, смешанный с моим исходным файлом C, таким образом, я могу легко проследить, где моя проблема заключается. Это для ядра ARMv6, и по-видимому objdump не поддерживает эту архитектуру. Я включал свой make-файл ниже.
ETREP=/xxSourceTreexx/
GNU_BIN=$(ETREP)/arm-none-linux-gnueabi/bin
CROSS_COMPILE := $(GNU_BIN)/arm-none-linux-gnueabi-
ARCH := arm
KDIR=$(ETREP)/linux-2.6.31/
MAKE= CROSS_COMPILE=$(CROSS_COMPILE) ARCH=$(ARCH) make
obj-m += xxfile1xx.o
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
Objdump поддерживает эту архитектуру. Ваш исполняемый файл будет называться arm-none-linux-gnueabi-objdump
Предполагая, что gcc и ассемблер gnu могут иметь более читаемый вывод, чем objdump
. Скажите ассемблеру, чтобы он сохранил свой промежуточный код, используя флаги для gcc:
-Wa,-alh=basename.s
. И чтобы получить basename
как фактическое имя исходного файла, вам нужно сообщить make:
-Wa,-alh=$<.s
, что оставит груды файлов foo.cs лежащий вокруг вашего исходного каталога. Большая проблема здесь в том, что gcc использует временные файлы между генерацией кода и сборкой. Я не могу найти способ заставить gcc сохранять свои промежуточные звенья, но ассемблер рад спрятать для вас листинг.
Внесение этого аргумента в файл Makefile CFLAGS оставлено как упражнение для читателя (потому что я ненавижу make и еще больше ненавижу gnu info.