我正在尝试为Linux4.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]未定义!
警告:“内核文本地址”[/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找不到头,即使给出了正确的版本?
最佳答案
这些函数(unwind_get_return_address_ptr和__kernel_text_address)不导出(通过EXPORT_SYMBOL
或其他方式),因此不能由模块使用。只有编译成内核本身的代码才能使用给定的符号。