首页 > 解决方案 > mtrr_add() 函数导致“警告:“mtrr_add”[/path/to/module.ko] 未定义”

问题描述

我有一个内核模块,我正在尝试使用mtrr_add()函数。当我编译我的代码时,我得到WARNING: "mtrr_add" [/path/to/module.ko] undefined!. 我发现了一条邮件列表消息:https ://patchwork.ozlabs.org/patch/510277/ ,其中提到删除mtrr_add()并替换为arch_phys_wc_add(). 如果我理解正确,arch_phys_wc_add()是用于添加Write Combine (WC)类型。是否有任何替换功能mtrr_add()会添加writeback(WB)类型?或者任何解决方法?

我的初始化模块代码如下,

#include <asm/mtrr.h>
//#include <uapi/asm/mtrr.h>

static int __init car_init(void){
    printk(KERN_INFO "car module loaded\n");

   int mtrr_add_r =  mtrr_add(0xf7c20000, 4096, MTRR_TYPE_WRBACK,0); <-- throwing undefined warning
   //int mtrr_add_r = arch_phys_wc_add(0xf7c20000, 4096);
   printk( KERN_ALERT "mtrr_add_r: 0x%x\n",mtrr_add_r);
   set_cpus_allowed_ptr(current,&saved_cpu_mask);

   return 0; 
}

dmesg显示:

module_name: 未知符号 mtrr_add (err 0)

我的内核版本:Linux xxx 4.4.0-200-generic #232-Ubuntu SMP

gcc 版本:gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609

标签: linux-kernellinux-device-driverkernel-modulegcc-warning

解决方案


推荐阅读