This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PROCESSOR-SDK-AM62X:需要支持:AM62x E3评估板上的 AD9361驱动程序版本不匹配

Guru**** 2482105 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1453356/processor-sdk-am62x-support-needed-ad9361-driver-version-magic-mismatch-on-am62x-e3-evaluation-board

器件型号:PROCESSOR-SDK-AM62X

工具与软件:

尊敬的 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    要使树外内核驱动程序与目标上正在运行的内核具有相同的魔术包、通用准则如下:

    1.重建内核及其在树中的模块;

    2.根据第1步中的内核构建、构建出树外的内核驱动程序;

    3.将第1步中构建的内核映像和树内模块安装到目标上;

    4.将步骤2中构建的离树内核驱动程序安装到目标中。

    内核和树外驱动程序均来自同一构建、vermagic 将会匹配。

    在 Processor SDK 顶层目录中、使用命令"make linux"执行步骤1。

    在 Processor SDK 中、请参阅 makefile /makerules/Makefile_cryptodev 以了解如何使用命令"make cryptodev"执行步骤2。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

       感谢您的支持。 您能提供详细信息吗、我没能解决问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经在上一篇文章中提供了所有详细信息。 您还需要什么?