如何从多个源编写和编译内核模块? (警告:“do_function”[... main.ko] undefined)

时间:2014-04-29 05:55:02

标签: c makefile kernel kernel-module

我想将内核模块与源分开。但是我无法正确编译它。

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'

解决这个问题的任何解决方案?

0 个答案:

没有答案