【问题标题】:Problems in building Linux kernel modules构建Linux内核模块的问题
【发布时间】:2017-04-08 00:55:46
【问题描述】:

我在 VMWare 上安装了 Ubuntu。我的目的是在其中构建内核模块。我是初学者。我写了一个基本模块。但我无法用“Makefile”编译它。我需要解决什么问题?

C文件(kernel.c)的内容:-

#include <linux/kernel.h>
MODULE_LICENSE("GPL");

makefile 的内容:-

obj-m+=kernel.o

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

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

【问题讨论】:

  • 请添加更多代码或详细信息您遇到什么问题?我在您的 Makefile 中注意到的一件事是,make 命令的开头应该有空格,例如all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
  • 发布代码真的太难了,不得不求助于图像文件吗?我认为当提问者在帖子中没有付出太多努力时,提供指导就更加困难了。你发布的图像总有一天会消失。这篇文章对未来的读者来说毫无价值。
  • @vinodmaverick 。我尝试了你建议的方式。它仍然有同样的问题。
  • @vinodmaverick :我在虚拟机上安装了 Ubuntu 14.04。然后安装'vim'。在主目录中,我创建了一个新目录并像上面一样创建了一个 Makefile,然后使用上面给出的内容创建了一个文件名 kernel.c。
  • TAB (\t) 是缺少的分隔符。 make -C /lib/modules... 行应该缩进制表符,而不是空格。

标签: c linux makefile linux-kernel


【解决方案1】:

Make 使用 TAB 作为分隔符,而不是空格。你的 Makefile 应该写成如下。

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

还应注意 ${PWD} 是一个环境变量。无需掏出钱来读取环境变量。

【讨论】:

  • 非常感谢。有效。不敢相信我被困在一个标签上 3 天。真的非常感谢。
猜你喜欢
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 2018-11-27
  • 2019-07-22
  • 1970-01-01
相关资源
最近更新 更多