无法插入某些Linux模块。各种错误

时间:2018-08-17 09:02:18

标签: linux module kernel

我正在尝试插入W1_ds2431.ko模块,该模块是Linux内核驱动程序的一部分。我确定它是针对正确的内核(4.9.0)构建的,因为它也是使用相同的工具构建的。

到目前为止,我已经设法插入了其他模块,例如w1_therm.ko和DMA模块,但是我只是无法插入想要的模块。

uname -a:

Linux zynq 4.9.0-xilinx-v2017.2 #1 SMP PREEMPT Tue Aug 7 20:15:30 CEST 2018 armv7l armv7l armv7l GNU/Linux

dmesg:

    [    1.194791] Driver for 1-wire Dallas network protocol.
    [    2.830092] w1_gpio: disagrees about version of symbol module_layout
    [    2.836798] w1_ds2431: disagrees about version of symbol module_layout

    [  641.626862] w1_therm: no symbol version for module_layout

sudo modprobe w1-gpio:(与w1_ds2431相同)

modprobe: ERROR: could not insert 'w1_gpio': Exec format error

modinfo w1_ds2431.ko:

alias:          w1-family-0x2D
description:    w1 family 2d driver for DS2431, 1kb EEPROM
author:         Bernhard Weirich <bernhard.weirich riedel.net>
license:        GPL
depends:        wire
intree:         Y
vermagic:       4.9.0-xilinx-v2017.2 SMP preempt mod_unload modversions ARMv7 p2v8 

lsmod:

Module                  Size  Used by
w1_therm                4468  0
axidmaio                9237  0

我不知道如何解决此问题。我尝试了各种方式插入这些模块。

1 个答案:

答案 0 :(得分:1)

记录下来,以及遇到此问题的任何其他人;该问题是由于设备树实施不正确引起的。内核调试有些误导。

我的dts文件条目现在看起来像:

    onewire_tm: onewire@0 {
            compatible = "w1-gpio";
            gpios = <&gpio0 9 0>;

            eeprom1: eeprom@0 {
                     compatible ="maxim,w1_ds2431";
            };

如果配置正确,则内核将扫描合适的一线设备,并在/ sys / bus / w1 / devices中创建虚拟文件夹

您可以在其中找到芯片ID的文件夹,并且可以读取/写入芯片。 在这种情况下,它是eeprom芯片。

要测试写操作,请执行以下操作:

echo 222 > /sys/bus/w1/devices/2d-000004375e73/eeprom

回读:

cat /sys/bus/w1/devices/2d-000004375e73/eeprom

这将为您提供:

222