linux - 我在 linux 3.2.28 上的自定义模块如何调用 print_cpu_info?

标签 linux linux-kernel

我将实现我的自定义模块,其中使用 print_cpu_info() 打印 CPU 信息。为了调用 print_cpu_info(),我包含了所需的头文件,但它不起作用。这是我的模块。

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/alternative.h>
#include <asm/bugs.h>
#include <asm/processor.h>
#include <asm/mtrr.h>
#include <asm/cacheflush.h>
extern struct cpuinfo_x86 boot_cpu_data;
int cpuinfox86_init(void)
{

    print_cpu_info(&boot_cpu_data);
    return 0;

}

void cpuinfox86_exit(void)
{
    printk("good bye cpu\n");
}

module_init(cpuinfox86_init);
module_exit(cpuinfox86_exit);
MODULE_LICENSE("GPL");

编译这个模块后,我得到

make -C /lib/modules/3.2.28-2009720166/build  SUBDIRS=/home/tracking/1031_oslab modules
make[1]: Entering directory `/usr/src/linux-3.2.28'
  CC [M]  /home/tracking/1031_oslab/module.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "print_cpu_info" [/home/tracking/1031_oslab/module.ko] undefined!
  CC      /home/tracking/1031_oslab/module.mod.o
  LD [M]  /home/tracking/1031_oslab/module.ko
make[1]: Leaving directory `/usr/src/linux-3.2.28'

有什么想法吗?

最佳答案

"print_cpu_info"不是导出符号,所以不能被模块使用。但是,您可以使用导出的“kallsyms_lookup_name”来获取“print_cpu_info”的地址,并使用函数指针执行函数调用。

关于linux - 我在 linux 3.2.28 上的自定义模块如何调用 print_cpu_info?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19691123/

相关文章:

Android 对有类 Qdisc 的支持 'Prio'

linux - 设备映射器的“ioctl”签名

c - 为什么 select 不向带有缓冲数据的文件描述符发出信号?

python 从内核日志中读取最后三行

linux - 如何将所有互联网流量重定向到同一工作站中的本地代理

linux - 如何使用 Bash 读取特定行和特定字段?

r - 如何列出和选择旧版本的 R

c++ - 如何在 Linux 系统上以编程方式清除 C++ 中的文件系统内存缓存?

c - Linux 内核模块 - 打开创建的字符设备导致错误

c - Linux 是否为僵尸进程保留内核堆栈?