5

Sto lavorando su un modulo kernel Linux per un kernel 2.6.x e ho bisogno di visualizzare l'output dell'assembly, anche se attualmente viene fatto come un file temporaneo e un afterwords eliminato. Mi piacerebbe che l'output dell'assieme venisse mixato con il mio file sorgente C in modo da poter facilmente individuare dove si trova il mio problema. Questo è per un core ARMv6 e apparentemente objdump non supporta questa architettura. Di seguito ho incluso il mio makefile.Come mantenere l'output asm dal modulo del kernel Linux build

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 

risposta

7

Objdump supporta tale architettura. Il tuo eseguibile si chiamerà arm-none-linux-gnueabi-objdump

+0

Così fa, stavo usando il w uno. Una volta che ho usato quello nella mia toolchain funziona perfettamente e ha prodotto i risultati che volevo. –

5

Supponendo che gcc e l'assemblatore di GNU abbiano un'uscita più leggibile di objdump, si può avere. Dite al assemblatore di mantenere la sua codice intermedio con bandiere a GCC:

-Wa,-alh=basename.s 

E per arrivare basename per essere il nome del file sorgente effettiva è necessario dire fare:

-Wa,-alh=$<.s 

che lascerà pile di foo. file CS che si trovano nella directory di origine. Il grosso problema qui è che il modo in cui gcc funziona utilizza file temporanei tra generazione e assemblaggio del codice. Non riesco a trovare un modo per far sì che gcc salvi i suoi prodotti intermedi, ma l'assemblatore è felice di mettere in vendita un elenco per te.

Ottenere tale argomento nel Makefile CFLAGS è lasciato come esercizio per il lettore (perché ho un pò odio "fare" e odio "info GNU" ancora di più.

+0

Questo quasi funziona. Ho finito con un file xxfile1xx.mod.c.s che sembra quello che voglio. Ho bisogno comunque del file xxfile1xx.c.s. –

1

Per ottenere un elenco linguaggio assembly del mio kernel Linux i moduli, ho aggiunto gli interruttori assembler per gli script del kernel/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

Si potrebbe provare il flag "-save-temps" per gcc. funziona per me nel mio progetto embedded, mi rifugio' lo ho provato con il kernel build