2010-10-31 39 views
5

tôi cố gắng biên soạn mô-đun hạt nhân Linux đơn giản:mô-đun Linux kernel biên dịch

#include <linux/module.h>  
#include <linux/kernel.h>  

int init_module(void) 
{ 
     printk("Hello world 1.\n"); 
     return 0; 
} 

void cleanup_module(void) 
{ 
     printk(KERN_ALERT "Goodbye world 1.\n"); 
} 

makefile của tôi:

obj-m = testmodule.o 
KVERSION = $(shell uname -r) 
all: 
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 
clean: 
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean 

Bây giờ tôi không có lỗi trong file .c tôi.

Nhưng khi tôi cố gắng thực hiện trong thiết bị đầu cuối: thực hiện: Không có gì để được thực hiện cho `tất cả '.

Có vấn đề gì?

Cảm ơn bạn.

Trả lời

5

Lệnh mặc định trong makefile của bạn là

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

Đó chỉ thị thực hiện để cd vào/lib/modules/$ (KVERSION)/xây dựng và chạy

make module m=YOUR_CURRENT_DIR 

Đổi lại, makefile đó là không tìm thấy gì để làm. Có lẽ, makefile đó hy vọng sẽ tìm thấy một số cấu trúc cụ thể trong thư mục hiện tại của bạn.

Bạn cần đọc kỹ hơn bất kỳ hướng dẫn nào đã dẫn bạn thiết lập makefile này.

+1

tôi đã cùng một vấn đề. Làm việc tốt khi đặt lệnh trong dòng lệnh, không sử dụng 'make'. Hóa ra trình soạn thảo của tôi đặt dấu cách thay vì các tab khi sao chép 'Makefile'. –

0

Bạn thực sự không cung cấp đủ thông tin để xác định câu trả lời đúng, nhưng tôi sẽ cung cấp cho bạn một số điều cần xem xét.

Bạn đang biên soạn nó như thế nào? Bạn có đường dẫn bao gồm chính xác trong bản dựng của mình không? Đường dẫn xây dựng được chỉ định với tùy chọn -I để gcc. Hãy chắc chắn rằng bạn đang trỏ đến cây nguồn kernel của bạn.

Bạn đã xây dựng hạt nhân chưa? Khi bạn thực hiện make, một số thứ nhất định sẽ được thiết lập cho phép bạn tạo. Làm make không xây dựng mọi thứ (như mô-đun) nhưng sẽ thiết lập công cụ ban đầu cho bạn.

0

Đảm bảo rằng bạn đã phân phối các gói phát triển/tiêu đề hạt nhân được cài đặt cung cấp các tệp này bao gồm.

Nếu chúng được cài đặt, hãy tìm nơi chứa các tệp này trên máy tính của bạn và thêm các thư mục này vào trình biên dịch của bạn bao gồm đường dẫn tìm kiếm (tùy chọn -I).

0

Điều này là do Makefile của bạn không chứa tab trước khi đưa ra thực hiện lệnh

make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

Vì vậy, thường tập tin của bạn nên được như dưới đây:

obj-m = test.o                 

KVERSION = $(shell uname -r)              

all:                    
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules     
clean:                   
     make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean 
Các vấn đề liên quan