5

Estoy trabajando en un módulo kernel de Linux para un kernel 2.6.x y necesito ver el resultado del ensamblado, aunque actualmente se está haciendo como un archivo temporal y como contraseñas borradas. Me gustaría que la salida de montaje se mezcle con mi archivo fuente C para que pueda rastrear fácilmente dónde está mi problema. Esto es para un núcleo ARMv6 y aparentemente objdump no es compatible con esta arquitectura. He incluido mi archivo MAKE a continuación.Cómo mantener la salida de ASM del módulo de kernel de Linux compilación

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 

Respuesta

7

Objdump apoya esa arquitectura. Su ejecutable se llamará arm-none-linux-gnueabi-objdump

+0

Lo que hace, estaba usando w Uno. Una vez que utilicé el que está en mi cadena de herramientas, funciona perfectamente y produce los resultados que quería. –

5

Suponiendo que gcc y el ensamblador gnu se puede obtener una salida más legible que objdump. Decirle al ensamblador para conservar su código intermedio usando banderas de gcc:

-Wa,-alh=basename.s 

Y para conseguir basename a ser el nombre del archivo fuente real que necesita para decirle que:

-Wa,-alh=$<.s 

que dejará montones de foo. archivos cs que se encuentran alrededor de su directorio de origen. El gran problema aquí es que la forma en que funciona gcc utiliza archivos temporales entre la generación y el ensamblaje del código. No puedo encontrar una manera de hacer que gcc guarde sus productos intermedios, pero el ensamblador está feliz de esconder una lista para usted.

Conseguir que el argumento en el Makefile CFLAGS se deja como ejercicio para el lector (porque yo un poco odio "hacer" y odio "GNU info" aún más.

+0

Esto casi funciona. Terminé con un archivo xxfile1xx.mod.c.s que se parece a lo que quiero. Sin embargo, necesito el archivo xxfile1xx.c.s. –

1

Para obtener una lista de lenguaje ensamblador de mi núcleo de Linux módulos, que añaden los interruptores de ensamblador a las secuencias de comandos 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

Usted podría intentar la bandera "-save-temps" para gcc. funciona para mí en mi proyecto incrustado, no he lo intenté en las compilaciones del kernel.

Cuestiones relacionadas