构建“源外树”内核模块

时间:2012-05-31 12:19:53

标签: linux kernel kernel-module

我正在linux下构建一个示例内核模块。模块源是“在内核树之外”。我从git获得了内核源代码树。但是配置内核需要时间。所以此刻我只是想针对我的发行版提供的内核头文件构建模块。

我的Makefile:

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


   $(info Building with KERNELRELEASE = ${KERNELRELEASE})
  obj-m := hello.o

但是停止报告我找不到等,这意味着找不到标题。

但文件在那里:

 $ls /lib/modules/$(uname -r)/build
 $arch  block  crypto  drivers  firmware  fs  include  init  ipc  kernel  lib  Makefile             Makefile.common  mm  Module.symvers  net  samples  scripts  security  sound  System.map  tools  usr  virt

我猜这是一个微不足道的问题。但我仍然无法找到解决方案。

提前致谢。

编辑:错误:

Building with KERNELRELEASE =
make -C /lib/modules/2.6.32-220.el6.x86_64/build/  M=/usr/local/src/kernel_mods
make[1]: Entering directory `/usr/src/kernels/2.6.32-220.el6.x86_64'
Building with KERNELRELEASE = 2.6.32-220.el6.x86_64
  LD      /usr/local/src/kernel_mods/built-in.o
  CC [M]  /usr/local/src/kernel_mods/hello.o
/usr/local/src/kernel_mods/hello.c:2:27: error: linux/modules.h: No such file or directory
/usr/local/src/kernel_mods/hello.c:21: error: expected declaration specifiers or â...â before string constant
/usr/local/src/kernel_mods/hello.c:21: warning: data definition has no type or storage class
/usr/local/src/kernel_mods/hello.c:21: warning: type defaults to âintâ in declaration of âMODULE_LICENSEâ
/usr/local/src/kernel_mods/hello.c:21: warning: function declaration isnât a prototype
/usr/local/src/kernel_mods/hello.c:22: error: expected declaration specifiers or â...â before string constant
/usr/local/src/kernel_mods/hello.c:22: warning: data definition has no type or storage class
/usr/local/src/kernel_mods/hello.c:22: warning: type defaults to âintâ in declaration of âMODULE_AUTHORâ
/usr/local/src/kernel_mods/hello.c:22: warning: function declaration isnât a prototype
/usr/local/src/kernel_mods/hello.c:23: error: expected declaration specifiers or â...â before string constant
/usr/local/src/kernel_mods/hello.c:23: warning: data definition has no type or storage class
/usr/local/src/kernel_mods/hello.c:23: warning: type defaults to âintâ in declaration of âMODULE_DESCRIPTIONâ
/usr/local/src/kernel_mods/hello.c:23: warning: function declaration isnât a prototype
make[2]: *** [/usr/local/src/kernel_mods/hello.o] Error 1
make[1]: *** [_module_/usr/local/src/kernel_mods] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.32-220.el6.x86_64'
make: *** [all] Error 2

1 个答案:

答案 0 :(得分:3)

我认为你打算这样做

#include <linux/module.h>

而不是

#include <linux/modules.h>