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-J721E:根文件系统中的 Linux 内核模块安装路径不正确

Guru**** 2481465 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1458135/processor-sdk-j721e-linux-kernel-module-install-path-is-incorrect-in-root-file-system

器件型号:PROCESSOR-SDK-J721E

工具与软件:

我最近一直在尝试将我们的构建从 SDK 8迁移到 SDK 10。

我们有一个用于 Linux 的定制 PCI-E 驱动程序、它构建为树外内核模块。

在 SDK 8下、这一切都可以正常运行。  但是、在 SDK 10下、内核 Makefile 安装模块的路径与模块在目标文件系统中的路径不匹配。

在 SDK 8上、路径是 /lib/modules/5.10.153-g90c3a58fd2、这正是内核放置模块的位置。

在 SDK 10上、默认文件系统中的路径(tisdk-adas-image-j721e-evm.tar.xz)为 /lib/modules/6.6.32-ti-gdb8871293143-dirty、这不是内核放置模块的位置。  请注意版本号和 git 散列之间额外的"-ti-"。  内核 Makefile 将模块(并期望查找依赖项和顺序文件)放置在 git 散列之前没有"-ti-"的位置。

对于 J721E 和 J784S4 SDK 都是如此(它们都使用相同的内核版本)。

对于 SDK 8、我们使用:

  • TI-PROCESSOR-SDK-RTOS-j721e-evm-08_05_00_11
  • TI-PROCESSOR-SDK-RTOS-j784s4-evm-08_06_01_03
  • TI-PROCESSOR-SDK-LINUX-J7-EVM-08_05_00_08
  • ti-processor-sdk-linux-j784s4-evm-08_06_01_02

对于 SDK 10、我们使用:

  • TI-PROCESSOR-SDK-RTOS-j721e-evm-10_00_00_05
  • TI-PROCESSOR-SDK-RTOS-j784s4-evm-10_00_00_05
  • TI-PROCESSOR-SDK-LINUX-ADAS-j721e-evm-10_00_00_08
  • TI-PROCESSOR-SDK-LINUX-ADAS-J784s4-EVM-10_00_00_08

请注意、我还在 Linux SDK 中测试了这个重新运行的"make cryptodev_install"、这也会将模块放在错误的位置。

是否有一些缺少的设置或环境变量在您的 SDK Makefile 中不明显,调整内核版本(我看不到它在任何地方设置 kernel_EXTRAVERSION )。

非常感谢、

Ross O'Connor

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

    尊敬的 Ross:

    [报价用户 id="556892" url="~/support/processors-group/processors/f/processors-forum/1458135/processor-sdk-j721e-linux-kernel-module-install-path-is-incorrect-in-root-file-system "]

    请注意、我还在 Linux SDK 中测试了这个重新运行的"make cryptodev_install"、这也会将模块放在错误的位置。

    [报价]

    这是什么地方?

    此外、您是否可以重建内核和模块、然后加载它们、以便原始模块 filepath 不再相关?

    # set ARCH and CROSS_COMPILE
    $ cd <path-to-linux-kernel>
    $ make defconfig ti_arm64_prune.config
    $ make Image modules
    $ sudo cp arch/arm64/boot/Image <path-to-rootfs>/boot/ 
    $ sudo make modules_install INSTALL_MOD_PATH=<path-to-rootfs>

    之后、您可以直接使用新构建的内核进行 Out of tree 模块。

    此致!
    Jared

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

    与我自己的模块相同。  我自己的 Out of tree 模块和 cryptodev 都安装到"6.6.32-gdb8871293143-dirise"、其中根文件系统 tar 在"6.6.32-ti-gdb8871293143-diris"下有所有内容

    此外、您能否重新构建内核和模块、然后加载它们、以便原始模块文件路径不再相关?

    是的、这会导致在非 ti 路径下安装整个模块、这与我的 Out of tree 构建一致、但同样意味着提供的根文件系统不正确。

    鉴于我尚未启动 SDK 10构建(因为 SDK 8和10之间的其他更改还会导致各种其他问题需要我解决)、我不知道运行的内核需要哪条路径、但大概是如果这是非 ti 路径、则默认文件系统不正确且必须更新?

    我们遇到的一个问题是 SDK 是几个团队共享(只读)资源、每个人都有自己的已提取根文件系统副本、他们在其中构建和安装文件、因此普通用户无法重新构建内核并重新初始化其模块树。

    如果提供的文件系统确实错误,我必须解决它,在提取每个用户的文件系统时,通过在我们的生成脚本中将路径串联在一起。

    谢谢、

    ROSS

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

    只是为了确认、预编译内核映像使用了"错误的"TI 路径、而按照您的说明重新编译映像使用了"好的"非 TI 路径。

    预编译映像:

    root:/opt/ti-processor-sdk-linux-adas-j721e-evm-10_00_00_08/board-support# strings prebuilt-images/Image |grep gdb8871293143
    Linux version 6.6.32-ti-gdb8871293143-dirty (oe-user@oe-host) (aarch64-oe-linux-gcc (GCC) 13.3.0, GNU ld (GNU Binutils) 2.42.0.20240620) #1 SMP PREEMPT Thu Aug  1 19:10:56 UTC 2024
    6.6.32-ti-gdb8871293143-dirty SMP preempt mod_unload aarch64
    Linux version 6.6.32-ti-gdb8871293143-dirty (oe-user@oe-host) (aarch64-oe-linux-gcc (GCC) 13.3.0, GNU ld (GNU Binutils) 2.42.0.20240620) #1 SMP PREEMPT Thu Aug  1 19:10:56 UTC 2024
    6.6.32-ti-gdb8871293143-dirty
    /lib/firmware/updates/6.6.32-ti-gdb8871293143-dirty
    /lib/firmware/6.6.32-ti-gdb8871293143-dirty
    6.6.32-ti-gdb8871293143-dirty
    6.6.32-ti-gdb8871293143-dirty
    root:/opt/ti-processor-sdk-linux-adas-j721e-evm-10_00_00_08/board-support# 
    

    重建映像:

    root:/opt/ti-processor-sdk-linux-adas-j721e-evm-10_00_00_08/board-support# strings ti-linux-kernel-6.6.32+git-ti/arch/arm64/boot/Image |grep gdb8871293143
    Linux version 6.6.32-gdb8871293143-dirty (root@VivoBook-ASUSLaptop-X421JAY-X413JA) (aarch64-oe-linux-gcc (GCC) 13.3.0, GNU ld (GNU Binutils) 2.42.0.20240620) # SMP PREEMPT 
    6.6.32-gdb8871293143-dirty SMP preempt mod_unload aarch64
    Linux version 6.6.32-gdb8871293143-dirty (root@VivoBook-ASUSLaptop-X421JAY-X413JA) (aarch64-oe-linux-gcc (GCC) 13.3.0, GNU ld (GNU Binutils) 2.42.0.20240620) #1 SMP PREEMPT Mon Nov 18 15:06:42 GMT 2024
    6.6.32-gdb8871293143-dirty
    /lib/firmware/updates/6.6.32-gdb8871293143-dirty
    /lib/firmware/6.6.32-gdb8871293143-dirty
    6.6.32-gdb8871293143-dirty
    6.6.32-gdb8871293143-dirty
    root:/opt/ti-processor-sdk-linux-adas-j721e-evm-10_00_00_08/board-support# 
    

    所提供的预构建内核和文件系统与 SDK /上面的构建指令之间肯定存在一些不一致、这会导致用户无法获得预构建映像的副本。

    ROSS

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

    尊敬的 Ross:

    预构建的内核是使用自定义 Yocto 配方生成的、这就是设置 kernel_LOCALVERSITION 的方法。

    您可以在此处看到设置位置: setup-defconfig.inc

    如果内核名称中需要"-ti"、可以通过 menuconfig、配置片段或手动将其添加到 kernel_LOCALCLSION 变量中。

    此致!
    Jared