Linux &引用;不同意symbol“的版本”;更改结构spi_设备后

Linux &引用;不同意symbol“的版本”;更改结构spi_设备后,linux,kernel,spi,Linux,Kernel,Spi,我正在使用我的RPi4学习SPI设备驱动程序。我在spi.h中的struct spi_device中添加了一个成员变量,以查看我在DTS(设备树源)中添加的变量是否按预期在spi.c中出现: struct-spi\u设备{ 结构设备开发; 结构spi_控制器*控制器; 结构spi_控制器*主控制器; u32最大转速(赫兹);; u32调试\u sheld;//-->用于测试。。 // ....} 然后,我编译内核以查看spi.c和spidev.c中发生的情况,就像这样,重新启动我的RPi4,并

我正在使用我的RPi4学习SPI设备驱动程序。我在spi.h中的
struct spi_device
中添加了一个成员变量,以查看我在DTS(设备树源)中添加的变量是否按预期在spi.c中出现:

struct-spi\u设备{
结构设备开发;
结构spi_控制器*控制器;
结构spi_控制器*主控制器;
u32最大转速(赫兹);;
u32调试\u sheld;//-->用于测试。。
// ....}
然后,我编译内核以查看spi.c和spidev.c中发生的情况,就像这样,重新启动我的RPi4,并尝试加载spidev.ko模块。但是,这种错误会发生:

$sudo insmod spidev.ko
insmod:错误:无法插入模块spidev.ko:无效参数
我使用
dmesg
检查了内核日志:

[ 81.717199] spidev: disagrees about version of symbol spi_sync
[ 81.717211] spidev: Unknown symbol spi_sync (err -22)
[ 81.717248] spidev: disagrees about version of symbol spi_setup
[ 81.717257] spidev: Unknown symbol spi_setup (err -22)
[ 81.717278] spidev: disagrees about version of symbol __spi_register_driver
[ 81.717287] spidev: Unknown symbol __spi_register_driver (err -22)
[ 81.717311] spidev: disagrees about version of symbol spi_slave_abort
[ 81.717320] spidev: Unknown symbol spi_slave_abort (err -22)
[ 310.352225] spidev: disagrees about version of symbol spi_sync
[ 310.352237] spidev: Unknown symbol spi_sync (err -22)
[ 310.352274] spidev: disagrees about version of symbol spi_setup
[ 310.352283] spidev: Unknown symbol spi_setup (err -22)
[ 310.352305] spidev: disagrees about version of symbol __spi_register_driver
[ 310.352314] spidev: Unknown symbol __spi_register_driver (err -22)
[ 310.352338] spidev: disagrees about version of symbol spi_slave_abort
[ 310.352347] spidev: Unknown symbol spi_slave_abort (err -22)
[ 649.449228] spidev: disagrees about version of symbol spi_sync
[ 649.449244] spidev: Unknown symbol spi_sync (err -22)
[ 649.449291] spidev: disagrees about version of symbol spi_setup
[ 649.449303] spidev: Unknown symbol spi_setup (err -22)
[ 649.449332] spidev: disagrees about version of symbol __spi_register_driver
[ 649.449343] spidev: Unknown symbol __spi_register_driver (err -22)
[ 649.449375] spidev: disagrees about version of symbol spi_slave_abort
[ 649.449386] spidev: Unknown symbol spi_slave_abort (err -22)

当我在spi.c或spidev.c中更改某些内容时,没有出现任何问题,但我不知道为什么在修改
struct spi\u device
时会出现这种情况。有人能帮我解决这个问题吗?

您的驱动程序调用
spi\u sync
spi\u setup
和其他功能。您希望这些函数能够与新的spi_设备一起工作,并带有附加字段

但是这些函数已经编译过了,并且可以使用旧的spi_设备结构(没有附加字段)

这就是“不同意symbol版本”消息的意思:很可能,从代码中调用这些函数将无法正常工作


您需要重新编译这些函数(即,重建内核),或者保持
spi_设备
结构不变,而不是使用其他方式存储附加信息。

谢谢您的评论。根据您的评论,我明确删除了spi.o、spidev.ko和spidev.mod.*文件,并再次编译内核,希望它们与我修改的struct spi_设备重新链接。但问题依然存在。我明白你的意思,但这似乎是另一回事。而且,正如您所知,一旦头文件中的内容被更改,源代码就会被重新编译(或重新链接),这就是为什么我之前在编译内核时没有删除上面的那些文件,并且修改了struct spi_device。我会错过什么吗?谢谢。你已经重新编译了内核并加载了它(从中引导),不是吗
insmod
将模块插入当前加载的内核。
uname-r
的输出是什么?正确。在重新编译内核之后,我尝试使用insmod加载spidev.ko。无论对struct spi_设备进行了何种修改,内核版本都与5.4.59-v7l+相同。