我想将内核模块与源分开。但是我无法正确编译它。
print_hello.h
#ifndef PRINT_HELLO_H_
#define PRINT_HELLO_H_
void print_hello(void);
#endif /* PRINT_HELLO_H_ */
print_hello.c:
#include <linux/kernel.h>
#include "print_hello.h"
void print_hello(void) {
printk("Hello, World!\n");
}
main.c中:
#include<linux/module.h>
#include<linux/version.h>
#include<linux/kernel.h>
#include<linux/init.h>
#include "print_hello.h"
int hello_init(void) {
print_hello();
return 0;
}
module_init(hello_init);;
MODULE_LICENSE("GPL");
生成文件:
obj-m += main.o
main-objs := print_hello.o main.o
all:
make -C /lib/modules/3.2.51/build M=$(PWD) modules
clean:
make -C /lib/modules/3.2.51/build M=$(PWD) clean
但是当我编译这个程序时会发生这个错误:
root@linux:r# make
make -C /lib/modules/3.2.51/build M=/home/root/hello modules
make[1]: Entering directory `/usr/src/build'
CC [M] /home/root/hello/main.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "print_hello" [/home/root/hello/main.ko] undefined!
LD [M] /home/root/hello/foo.ko
make[1]: Leaving directory `/usr/src/build'
解决这个问题的任何解决方案?