2012-04-20 43 views
5

Tôi cố gắng để biên dịch hạt nhân Linux: http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.htmlBiên dịch Linux kernel - hello world

tôi có một chương trình thế giới hello đơn giản hello-1.cpp

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

int init_module(void) 
{ 
    return 0; 
} 

void cleanup_module(void) 
{ 
} 

Nhưng tôi đang cố gắng để xây dựng nó sử dụng Makefile:

obj-m += hello-1.o 

all: 
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean: 
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

Tôi gặp một vài lỗi.

make -C /home/pacman/linux-2.6.34.11/2.6.35.6-45.fc14.i686/build M=/home/pacman/p1 modules 
make: *** /home/pacman/linux-2.6.34.11/2.6.35.6-45.fc14.i686/build: No such file or directory. Stop. 

thực hiện: * [tất cả] Lỗi 2

Tôi quên để xác định cái gì?

+0

Trong trường hợp của tôi ví dụ biên soạn một cách chính xác. Trong trường hợp của bạn thư mục xây dựng mà bạn đang đi qua như một đối số để thực hiện không được tìm thấy. Hãy thử làm theo hướng dẫn trong [trang web] này (http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html) để xem nó có giải quyết được vấn đề của bạn hay không và bạn có thể tìm kiếm dir của phiên bản hạt nhân của bạn và vượt qua nó như là một đối số của thực hiện. – bacchus

+0

Khi tôi liệt kê các nội dung của – user289925

+0

Trong thư mục /home/pacman/linux-2.6.34.11 tôi có thể thấy thư mục hoặc tệp xây dựng không? Tôi có một tập tin Kbuild. – user289925

Trả lời

1

Đổi tên hello-1. cpp để hello-1. c (module phải được viết bằng C) và thêm các dòng:

module_init(init_module); 
module_exit(cleanup_module);