我正在尝试插入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
我不知道如何解决此问题。我尝试了各种方式插入这些模块。
答案 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