如何保持Linux内核模块构建的asm输出

Ken*_*arr 7 linux makefile linux-device-driver linux-kernel embedded-linux

我正在为一个2.6.x内核的Linux内核模块工作,我需要查看汇编输出,虽然它目前是作为临时文件完成的删除后的字.我想将汇编输出与我的C源文件混合在一起,这样我就可以轻松追踪问题所在.这是针对ARMv6内核的,显然objdump不支持这种架构.我在下面包含了我的makefile.

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
Run Code Online (Sandbox Code Playgroud)

Yan*_*min 7

Objdump确实支持该架构.您的可执行文件将被调用arm-none-linux-gnueabi-objdump


msw*_*msw 6

假设gcc和gnu汇编程序的输出比可读的更可读objdump.告诉汇编器使用gcc标志保留其中间代码:

 -Wa,-alh=basename.s
Run Code Online (Sandbox Code Playgroud)

并且要basename成为您需要告诉的实际源文件名:

 -Wa,-alh=$<.s
Run Code Online (Sandbox Code Playgroud)

这会在你的源目录周围留下成堆的foo.cs文件.这里的一个大问题是gcc的工作方式是在代码生成和汇编之间使用临时文件.我找不到让gcc保存其中间体的方法,但汇编程序很乐意为您存储列表.

将该参数纳入Makefile CFLAGS是留给读者的练习(因为我有点讨厌"制造"并且更讨厌"gnu info".