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)
假设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".