工具与软件:
尊敬的 TI 支持团队:
我正在使用 AM62x E3评估板、并尝试使用其驱动程序连接 AD9361。 我使用适用于 AM62x 的最新 TI SDK 构建了.ko 驱动程序文件。 成功生成驱动程序文件后、在尝试在目标板上加载模块时会遇到问题。
下面是我的设置和错误的详细信息:
设置详细信息
主机系统详细信息:
操作系统: Ubuntu 12.10.
内核版本:6.8.0-49-一般
SDK:AM62x 最新 SDK (TI Linux 内核6.6.32分支)
目标板详细信息:
电路板:AM62x E3评估板
板载内核版本:6.6.32-ti-g6de6e418c80e-dirty
驱动程序编译和验证:
成功编译驱动程序、并生成了.ko 文件。
验证了目标板上的.ko 文件:
root@am62xx-EVM:~ ls -l /usr/lib/modules/6.6.32-ti-g6de6e418c80e-dirty/kernel/drivers/iio/adc/ad9361_drv.ko
-rw-r--r-- 1根根565704 Dec 17 2024 /usr/lib/modules/6.6.32-ti-g6de6e418c80e-dirty/kernel/drivers/iio/adc/ad9361_drv.ko
已验证驱动程序模块的 modinfo:
root@am62xx-EVM:~# modinfo /usr/lib/modules/6.6.32-ti-g6de6e418c80e-dirty/kernel/drivers/iio/adc/ad9361_drv.ko
文件名:/usr/lib/modules/6.6.32-ti-g6de6e418c80e-dirty/kernel/drivers/iio/adc/ad9361_drv.ko
许可证:GPL v2
说明:Analog Devices AD9361 ADC
作者:Michael Hennerich
别名:spi:ad9363a
别名:SPI:ad9361-2x
别名:spi:ad9364
别名:spi:ad9361
取决于:
intree:y
名称:ad9361_drv
Vermagic: 6.6.32 SMP preempt, mod_unload aarch64
观察到问题
尝试在目标板上加载 ad9361_drv.ko 驱动程序时、收到以下错误信息:
root@am62xx-evm:~# dmesg | grep ad9361
[552.798171] ad9361_drv:版本魔术"6.6.32 SMP preempty mod_unload aarch64"应为"6.6.32-ti-g6de6e418c80e-dirty SMP preempty mod_unload aArch64"
[966.385706] ad9361_drv:版本魔术"6.6.32 SMP preempty mod_unload aarch64"应为"6.6.32-ti-g6de6e418c80e-dirty SMP preempty mod_unload aArch64"
当我使用 modprobe 加载驱动程序时、驱动程序失败、并显示:
root@am62xx-evm:~# sudo modprobe ad9361_drv
modprobe: father: module ad9361_drv not found in directory /lib/modules/6.6.32-ti-g6de6e418c80e-dirty
分析和观察
版本不匹配:
目标板上的内核版本为:
root@am62xx-evm:~# uname -r
6.6.32-ti-g6de6e418c80e-dirty
驱动程序文件中的版本 magic 为:
Makefile
Vermagic: 6.6.32 SMP preempt, mod_unload aarch64
内核期望版本 magic 为:
6.6.32-ti-g6de6e418c80e-dirty SMP 挤占 mod_unload AArch64
这种不匹配会导致驱动程序在加载时失败。
内核编译不匹配:
我用于在主机系统上构建驱动程序的 SDK 的 ti-linux-kernel 分支与目标板上的内核不保持一致。
主机系统的内核版本是6.8.0-49-generic、它不同于目标内核版本(6.6.6.6.32-ti-g6de6e418c80e-dirty)。
请求协助
如何对齐内核版本:
为了确保驱动程序的版本功能与目标板的内核版本相匹配、建议采用什么过程? 我是否应该以目标板上使用的确切版本(6.6.6.6.32-ti-g6de6e418c80e-dirty)在主机系统上重建内核?
重新编译 SDK 内核:
如果需要重新编译、您能否提供有关在主机系统上使用相同的 vermagic 字符串编译内核并将其与目标板同步的指导?
驱动程序集成的最佳实践:
TI SDK 中是否有特定设置或步骤可确保开发过程中驱动程序和内核之间的兼容性?
进一步调试:
我是否可以检查其他工具或日志以更好地了解此问题或识别其他潜在问题?
如果提供解决此问题的详细说明、我将不胜感激。 提前感谢您的支持!
此致、
Vaishnavi
root@am62xx-evm:~# root@am62xx-evm:~# modinfo /usr/lib/modules/6.6.32-ti-g6de6e418c80e-dirty/kernel/drivers/iio/adc/ad9361_drv.ko filename: /usr/lib/modules/6.6.32-ti-g6de6e418c80e-dirty/kernel/drivers/iio/adc/ad9361_drv.ko license: GPL v2 description: Analog Devices AD9361 ADC author: Michael Hennerich <michael.hennerich@analog.com> alias: spi:ad9363a alias: spi:ad9361-2x alias: spi:ad9364 alias: spi:ad9361 depends: intree: Y name: ad9361_drv vermagic: 6.6.32 SMP preempt mod_unload aarch64 root@am62xx-evm:~# dmesg | grep ad9361 [ 552.798171] ad9361_drv: version magic '6.6.32 SMP preempt mod_unload aarch64' should be '6.6.32-ti-g6de6e418c80e-dirty SMP preempt mod_unload aarch64' [ 966.385706] ad9361_drv: version magic '6.6.32 SMP preempt mod_unload aarch64' should be '6.6.32-ti-g6de6e418c80e-dirty SMP preempt mod_unload aarch64' [ 1067.917523] ad9361_drv: version magic '6.6.32 SMP preempt mod_unload aarch64' should be '6.6.32-ti-g6de6e418c80e-dirty SMP preempt mod_unload aarch64' [ 1187.477387] ad9361_drv: version magic '6.6.32 SMP preempt mod_unload aarch64' should be '6.6.32-ti-g6de6e418c80e-dirty SMP preempt mod_unload aarch64' [ 1798.451914] ad9361_drv: version magic '6.6.32 SMP preempt mod_unload aarch64' should be '6.6.32-ti-g6de6e418c80e-dirty SMP preempt mod_unload aarch64' [ 1892.803525] ad9361_drv: version magic '6.6.32 SMP preempt mod_unload aarch64' should be '6.6.32-ti-g6de6e418c80e-dirty SMP preempt mod_unload aarch64' root@am62xx-evm:~# root@am62xx-evm:~# root@am62xx-evm:~# sudo modprobe ad9361_drv modprobe: FATAL: Module ad9361_drv not found in directory /lib/modules/6.6.32-ti-g6de6e418c80e-dirty Setup Details Host System Details: OS: Ubuntu 22.04 Kernel Version: 6.8.0-49-generic SDK: AM62x latest SDK (TI Linux Kernel 6.6.32 branch) Target Board Details: Board: AM62x E3 Evaluation Board #uname -r Kernel Version on Board: 6.6.32-ti-g6de6e418c80e-dirty Setup Details Host System Details: OS: Ubuntu 22.04 Kernel Version: 6.8.0-49-generic SDK: AM62x latest SDK (TI Linux Kernel 6.6.32 branch) Target Board Details: Board: AM62x E3 Evaluation Board Kernel Version on Board: 6.6.32-ti-g6de6e418c80e-dirty