5

Tôi đang làm việc trên một mô-đun hạt nhân Linux cho hạt nhân 2.6.x và tôi cần xem đầu ra lắp ráp, mặc dù nó hiện đang được thực hiện dưới dạng tệp tạm thời sau khi xóa. Tôi muốn có đầu ra lắp ráp hỗn hợp với tập tin nguồn C của tôi vì vậy tôi có thể dễ dàng theo dõi nơi mà vấn đề của tôi nằm. Đây là cho một lõi ARMv6 và rõ ràng objdump không hỗ trợ kiến ​​trúc này. Tôi đã bao gồm makefile của tôi dưới đây.Làm thế nào để giữ đầu ra asm từ xây dựng mô-đun hạt nhân Linux

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 

Trả lời

7

Objdump hỗ trợ kiến ​​trúc đó. Tệp thực thi của bạn sẽ được gọi là arm-none-linux-gnueabi-objdump

+0

Vì vậy, nó, tôi đã sử dụng w rong một. Một khi tôi sử dụng một trong toolchain của tôi nó hoạt động hoàn hảo và sản xuất các kết quả tôi muốn. –

5

Giả sử gcc và bộ kết hợp gnu có thể đọc được đầu ra dễ đọc hơn objdump. Cho lắp ráp để giữ lại mã trung gian của nó sử dụng cờ để gcc:

-Wa,-alh=basename.s 

Và để có được basename là tên tập tin nguồn thực tế bạn cần phải biết thực hiện:

-Wa,-alh=$<.s 

mà sẽ để lại đống foo. tệp cs nằm xung quanh thư mục nguồn của bạn. Vấn đề lớn ở đây là cách gcc hoạt động nó sử dụng các tệp tạm thời giữa tạo mã và lắp ráp. Tôi không thể tìm cách để làm cho gcc tiết kiệm trung gian của nó nhưng lắp ráp là hạnh phúc để stash một danh sách cho bạn.

Bắt rằng đối số vào các Makefile CFLAGS là trái như một bài tập cho người đọc (vì tôi kinda ghét "làm" và ghét "info gnu" thậm chí nhiều hơn.

+0

Điều này rất gần. Tôi đã kết thúc với một tập tin xxfile1xx.mod.c.s trông giống như những gì tôi muốn. Tuy nhiên, tôi cần tệp xxfile1xx.c.s. –

1

Để có được một danh sách ngôn ngữ lắp ráp các hạt nhân Linux của tôi mô-đun, tôi đã thêm các công tắc lắp ráp cho các kịch bản 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

Bạn có thể thử cờ "Save-temps" để gcc. Nó làm việc cho tôi trong dự án nhúng của tôi, tôi thiên đường' t đã thử nó trên hạt nhân xây dựng.

Các vấn đề liên quan