Как сохранить вывод asm из сборки модуля ядра Linux - PullRequest
7 голосов
/ 25 мая 2010

Я работаю над модулем ядра 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

Ответы [ 4 ]

7 голосов
/ 25 мая 2010

Objdump поддерживает эту архитектуру. Ваш исполняемый файл будет называться arm-none-linux-gnueabi-objdump

6 голосов
/ 25 мая 2010

Предполагая, что gcc и ассемблер gnu могут иметь более читаемый вывод, чем objdump. Скажите ассемблеру, чтобы он сохранил свой промежуточный код, используя флаги для gcc:

 -Wa,-alh=basename.s

И чтобы basename было фактическим исходным именем файла, вы должны указать make:

 -Wa,-alh=$<.s

, который оставит кучу файлов foo.c.s, лежащих вокруг вашего исходного каталога. Большая проблема здесь в том, что gcc работает так, что использует временные файлы между генерацией кода и сборкой. Я не могу найти способ заставить gcc сохранить свои промежуточные продукты, но ассемблер с удовольствием спрятал список для вас.

Включение этого аргумента в Makefile. CFLAGS оставлено читателю как упражнение (потому что я ненавижу "make" и ненавижу "gnu info" еще больше.

2 голосов
/ 05 ноября 2011

Чтобы получить список моих модулей ядра Linux на ассемблере, я добавил ключи ассемблера в скрипты ядра / Makefile.build.

#cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
cmd_cc_o_c = $(CC) $(c_flags) -c -Wa,-alh=$<.lst -o $(@D)/.tmp_$(@F) $<
0 голосов
/ 01 октября 2012

Вы можете попробовать флаг "-save-temps" для gcc. Это работает для меня во встроенном проекте, я не пробовал его на сборках ядра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...