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

标签 linux build makefile kernel kernel-module

我正在尝试针对文件系统上的任何源代码树编译模块,但我在使用 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'

我尝试了很多文档,但都没有成功。如果有任何帮助,我将不胜感激。

最佳答案

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

生成文件——

# 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 -->to.--> 你的 sr-code KERNEL_SOURCE := <path to compiled-src-code>

有关更多信息,请在下面找到

while building kernel modules why do we need /lib/modules?

A simple program on linux device driver

How to make a built-in device driver in linux

关于linux - 针对文件系统上的任何内核源代码树编译树外内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22368264/

相关文章:

linux - 条件内的 Makefile 目标

linux - 在 Ubuntu 上运行 Tensorflow 出现语法错误

linux - 用于 Linux 的混合互斥库

testing - 为什么在 Appium 自动化测试中 android debug build 比 android release build 更常用?

Java 构建路径

makefile - 编译OpenSSL时.rodata和-fPIC是什么意思?

c - 制作简单的linux内核模块

python - AWS boto3 列出代码管道

linux - cd 的奇怪命令提示符行为

ubuntu - 如何覆盖 dpkg-buildflags CFLAGS?