【问题标题】:Failied to building Linux kernel module for specific kernel version无法为特定内核版本构建 Linux 内核模块
【发布时间】:2018-11-27 16:30:02
【问题描述】:

我正在尝试为 linux 4.15.0-23-generic 构建一个 LKM。我正在使用以下命令来制作它。

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

很遗憾,make 无法获取正确的头文件。

警告:“unwind_get_return_address_ptr”[/home/probir/hyperf/hyperf/hyperf.ko] 未定义! 警告:“__kernel_text_address”[/home/probir/hyperf/hyperf/hyperf.ko] 未定义! make[1]: 离开目录'/usr/src/linux-headers-4.15.0-23-generic'

头文件位于以下目录。

/usr/src/linux-headers-4.15.0-23-generic/arch/x86/include/asm/unwind.h

/usr/src/linux-headers-4.15.0-23-generic/include/linux/kernel.h

为什么即使给出了正确的版本,make 也找不到标头?

【问题讨论】:

  • 标题与此完全无关。
  • 您能详细说明一下吗?
  • 如果缺少标头,您会收到一条非常直接的错误消息,以您不能错过的方式谈论缺少的标头。由于您收到的是完全不同类型的消息,因此没有缺少标题。
  • 另见this
  • 谢谢,得到我的答复。

标签: linux kernel-module


【解决方案1】:

这些函数(unwind_get_return_address_ptr__kernel_text_address不导出(通过EXPORT_SYMBOL 左右),因此它们不能被模块使用。只有编译到内核中的代码本身可以使用给定的符号。

【讨论】:

  • 说它们不能被模块使用是不正确的。这些符号需要在使用前找到 (kallsyms_lookup_name)。
  • @ProbirRoy:严格来说,你是对的。但是使用kallsyms_lookup_name,您几乎可以使用任何东西,包括不打算(由内核开发人员)在外部使用的东西。所以我认为这里不需要关于该功能的说明。
猜你喜欢
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
相关资源
最近更新 更多