一尘不染

针对文件系统上的任何内核源代码树编译树外内核模块

linux

我正在尝试针对文件系统上的任何源代码树编译模块,但Makefile出现问题。这是我针对指定内核使用的原始Makefile:

obj-m += new-mod.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

该Makefile可以正确编译,但目标是针对任何源代码树进行编译。我试过:

obj-m += new-mod.o

我以为假设了“全部:”,但出现错误:

make: *** No targets.  Stop.

我还添加了:

all:

到Makefile中,除了错误消息外没有其他区别:

make: Nothing to be done for `all'

我尝试了很多文档,但是没有运气。我将不胜感激任何帮助。


阅读 318

收藏
2020-06-07

共1个答案

一尘不染

goal is to have it compile against any source tree

你可以做到这一点 compiled source-code path

只需更换 make -C /lib/modules/$(shell uname -r)/build M=$PWD modules

有了这个

make -C <path-to-compiled-src-code> M=$PWD modules

make -C /home/vinay/linux-3.9 M=$PWD modules

试试下面的makefile

Makefile –

# if KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq (${KERNELRELEASE},)
obj-m := new-mod.o
# Otherwise we were called directly from the command line.
# Invoke the kernel build system.
  else
    KERNEL_SOURCE := /usr/src/linux
    PWD := $(shell pwd)
default:
      ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} modules

clean:
      ${MAKE} -C ${KERNEL_SOURCE} SUBDIRS=${PWD} clean
endif

在上面,您可以将KERNEL_SOURCE := /usr/src/linux-> 更改为->您的sr代码KERNEL_SOURCE := <path to compiled-src-code>

2020-06-07