Kernel 警告:";spi“寄存器驱动程序”;未定义

Kernel 警告:";spi“寄存器驱动程序”;未定义,kernel,kernel-module,Kernel,Kernel Module,我即将编写我的第一个内核模块。然而,当我即将构建模块时,我得到一个奇怪的警告: "WARNING: "spi_register_driver" undefined" 如果我敢加载模块,此警告将以失败的insmod结束。我注意到,我还通过我想要使用的其他spi接口函数(如spi_sync)得到了这些警告。我不知道为什么会发生这些错误,因为头文件看起来不错 生成文件: obj-m += MS5611.o all: make -C /lib/modules/$(shell unam

我即将编写我的第一个内核模块。然而,当我即将构建模块时,我得到一个奇怪的警告:

"WARNING: "spi_register_driver" undefined"
如果我敢加载模块,此警告将以失败的insmod结束。我注意到,我还通过我想要使用的其他spi接口函数(如spi_sync)得到了这些警告。我不知道为什么会发生这些错误,因为头文件看起来不错

生成文件:

obj-m += MS5611.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 
初始化函数:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/sched.h>
#include <linux/mod_devicetable.h>
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/spi/spi.h>
#include <linux/of.h>
#include <linux/kthread.h>
#include <linux/time.h>
#include <linux/kfifo.h>
#include <linux/mutex.h>

// My Init function
int MS5611_init(void) {
  int iRet;
  int iDevID;

  printk(KERN_ALERT "Init MS5611: Creating device file.\n");

  INIT_KFIFO(_MS5611_REPORTS);
  iRet = spi_register_driver(&_MS5611_DRIVER);
  // ..
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
//我的初始化函数
int MS5611_初始(无效){
国际互联网;
int iDevID;
printk(KERN_警报“Init MS5611:创建设备文件。\n”);
初始KFIFO(MS5611报告);
iRet=spi_寄存器_驱动程序(&_MS5611_驱动程序);
// ..
}

您的内核可能没有使用SPI支持进行编译。或者,您没有加载SPI模块

SPI\u寄存器\u驱动程序是GPL符号。您需要将模块许可为GPL,否则无法访问这些符号。为此,请使用模块许可证(“GPL”)。最后,我尝试用SPI支持重建它。至少我是这么想的,可能出了什么问题。ls/sys/bus/`如果你能看到
spi
,那么你应该拥有spi子系统