5

Ich arbeite an einem Linux-Kernel-Modul für einen 2.6.x-Kernel und ich muss die Assembly-Ausgabe anzeigen, obwohl es derzeit als eine temporäre Datei gelöscht wird und Afterwords. Ich möchte die Assembly-Ausgabe mit meiner C-Quelldatei gemischt haben, damit ich leicht nachvollziehen kann, wo mein Problem liegt. Dies ist für einen ARMv6-Kern und scheinbar objdump unterstützt diese Architektur nicht. Ich habe mein Makefile unten eingefügt.Wie asm Ausgabe von Linux-Kernel-Modul bauen

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 

Antwort

7

Objdump unterstützt diese Architektur. Ihre ausführbare Datei heißt arm-none-linux-gnueabi-objdump

+0

So tut es, ich war mit dem w Rong eins. Sobald ich das in meiner Toolchain verwendet habe, funktioniert es perfekt und produziert die Ergebnisse, die ich wollte. –

5

Angenommen gcc und der GNU-Assembler können eine lesbarere Ausgabe als objdump haben. Sagen Sie den Assembler seinen Zwischencode mit Fahnen zu gcc behalten:

-Wa,-alh=basename.s 

Und um basename die eigentliche Quelle Dateinamen sagen sein müssen machen:

-Wa,-alh=$<.s 

die Berge von foo verlassen wird. cs-Dateien, die Ihr Quellverzeichnis umgeben. Das große Problem hier ist, dass die Art, wie gcc arbeitet, temporäre Dateien zwischen Code-Generierung und Assemblierung verwendet. Ich kann keinen Weg finden, gcc zu veranlassen, seine Zwischenprodukte zu speichern, aber der Assembler ist glücklich, einen Eintrag für Sie zu speichern.

dieses Arguments in die Makefile CFLAGS Ersten ist für den Leser als Übung (weil ich irgendwie hasse „make“ und Hass „Gnu-Info“ noch mehr.

+0

Das funktioniert fast. Ich bin mit einer xxfile1xx.mod.c.s Datei gelandet, die aussieht wie ich will. Ich brauche aber die xxfile1xx.cs Datei. –

1

Um eine Assemblersprache Auflistung meines Linux-Kernel zu bekommen Module, habe ich die Assembler-Schalter mit den Kernel-scripts/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

Sie könnten die Flagge "-save-temps" zu gcc versuchen. Es ist für mich in meinem eingebetteten Projekt arbeitet, ich haven‘ t versuchte es auf Kernel-Builds