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.

[参考译文] Linux/AM5716:无匹配的器件树

Guru**** 2609955 points
Other Parts Discussed in Thread: AM5728, AM5718

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/653792/linux-am5716-no-matching-device-tree

器件型号:AM5716
主题中讨论的其他器件:AM5728AM5718

工具/软件:Linux

尊敬的软件团队:

我正在基于 AM571x 开发定制板、

1) 1)在该过程中、我遇到以下错误"这些选项中没有匹配的 DT:"、我使用 TI @的上一个帖子解决了该错误

我通过删除选项"CONFIG_SPL_LOAD_FIT "来实现这一点、这对我来说很好。

2) 2)在另一篇文章中、提到了修改 U-Boot- /common/common_fit.c @

请帮助我了解上述两种解决方案的区别。 第二个更改代码的方法是更改代码、我没有尝试、因为它在论坛上被标记为"答案"、我认为它是另一个解决方案。

谢谢

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

    您好、Vamshi、

    第一个问题是 AM57xx、第二个问题是 AM335x 平台。 它们的板级配置文件结构不同。 在 AM57xx 平台上、您可以禁用 CONFIG_SPL_LOAD_FIT、电路板将以默认的"beagle_x15"配置名称启动。 在 AM335x 平台上、您还需要更改源代码以设置首选配置名称。

    此致、
    Kemal

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

    感谢您的回答。

    请帮助我 CONFIG_SPL_LOAD_FIT 如何影响 DTB 文件。

    1) 1)我正在使用从内核生成的 DTB 文件、它被放置在 RFS 的引导文件夹中。
    2) 2)我在 uEnv.txt 中提供了带有 fdtfile=am571x-my-board.dTB 的 DTB 文件

    我假设 u-boot 读取 uEnv.txt、找到 dtb 文件并从 RFS/boot 加载相应的文件、这是启用 CONFIG_SPL_LOAD_FIT 时不会发生这种情况的原因。

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

    有两个单独的 DTB 文件。 一个用于 U-Boot、另一个用于内核。 内核的 DTB 对 U-Boot 没有影响。 "这些选项中没有匹配的 DT "消息表示未找到 U-Boot 的 DTB、因为大多数情况下没有 EEPROM 信息。

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

    在何处指定 U-boot 的 DTB? 请帮帮我。

    正如我在上一个帖子中提到的、禁用 CONFIG_SPL_LOAD_FIT 后、我能够顺利启动、在这种情况下、u-boot 如何检索 DTB 信息?

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

    如果您查看顶级 u-boot Kconfig、您将找到 CONFIG_SPL_LOAD_FIT 的帮助信息

    配置 SPL_LOAD_FIT
           bool "Enable SPL loading U-Boot as a fit"(启用 SPL 加载 U-Boot 作为 FIT)
           取决于贴合度
           帮助
             通常、对于 SPL 框架、将作为一部分生成旧映像
             构建的一部分。 其中包含 U-Boot 以及有关的信息
             应加载的位置。 而是使用此选项来启用生成
             提供更大灵活性的 FIT (平板图像树)。 在中
             具体而言、它可以处理从多个器件树中进行的选择
             并将正确的电压传递给 U-Boot。

    u-boot arch/arm/DTS 中有器件树源。 它们内置在.dTB 中、内置在 SPL/u-boot 中。 SPL KCONFIG 中的值

    配置_list
           string "DT 控制所包含的设备树文件列表"
           取决于 SPL_LOAD_FIT || FIT_EMBED
           默认默认为 device_tree
           帮助
             此选项指定用于 DT 的设备树文件列表
             控制。 它们将封装到 FIT 中。 在运行时为 U-boot
             SPL 将通过检查来选择要使用的正确 DT
             硬件(例如、读取电路板 ID 值)。 这是的列表
             设备树文件(不带目录或.dTB 后缀)
             分隔符 。

    查看 configs/am57xx_evm_defconfig、您会发现

    CONFIG_ON_LIST="am57xx-beagle-x15 am57xx-beagle-x15-revb1 am57xx-beagle-x15-revc am57xx-evm-reva3 am572x-idk am571x-idk am574x-idk"

    这些 u-boot 器件树文件将内置于 SPL/u-boot 中、并在运行时选择正确的文件。 我相信文件的名称是从电路板 EEPROM 中的字符串中选择的。

    Steve K.

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

    您好、Steve、

    感谢您的参与。 我仍有几个问题。

    如上所述、我正在为定制板(尚未生产定制板)实施软件、我创建了一个板级配置文件副本、并以 AM57xx 为参考。 除了文件夹名称和 DTB 文件名的更改与 IDK 完全相同、并使用 IDK 进行验证。

    启用 SPL_LOAD_FIT 后、我会看到以下错误:

    U-Boot SPL 2016.05-00320-g033759a-n脏(2018年1月3日- 18:39:31)

    DRA722-GP ES2.0

    尝试从 MMC1引导

    读取 args

    SPL_load_image_fat_os:读取图像参数时出错、错误--1

    正在读取 u-boot.img

    正在读取 u-boot.img

    正在读取 u-boot.img

    这些选项中没有匹配的 DT:

     am571x-my-board

    无法装入 ext2文件系统...

    SPL_load_image_ext_OS:ext4fs 安装错误- 0

    无法装入 ext2文件系统...

    SPL_LOAD_IMAGE_ext:ext4fs 安装错误- 0

    1) 1)我看到上述错误的原因是什么、它无法引导。 要指出的是、我没有多个 DTB 文件、如 IDK、Makefile 的片段

    和 u-boot.img 是从 u-boot-dtb.bin (映像中包含 DTB 文件)生成的。

    dtb-$(CONFIG_TARGET_AM57XX_EVM)+= am57xx-beagle-x15.dtb \
       am572x-idk.dtb   \
       am571x-idk.dtb

    dtb-$(CONFIG_TARGET_AM57XX_my_Board)+= am571x-my-board.dtb

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

    中将调试标签更改为 printf 在 int fit_select_fdt (const void * fdt、int images、int * fdt_offsetp)函数内 /board-support/u-boot- /common/common_fit.c.
    将 am571x-my-board 条件添加到中的 board_fit_config_name_match /board-support/u-boot- /board/ti/am57xx/board.c

    #ifdef CONFIG_SPL_LOAD_FIT
    int board_fit_config_name_match (const char *名称)
    {
    if (board_is_x15_revb1
    ())}{
    if (!strcmp (name、"am57xx-beagle-x15-b1");if (board_revx15
    
    
    )(if);return
    
    (xcr)!rmp-rx15)(if)(xrambi_rmp-rx15)(if)(r)
    
    
    }否则、如果(board_is_am572x_evm()){
    if (board_is_am572x_evm_reva3 ()){
    if (!strcmp (name、"am57xx-evm-reva3")
    返回0;
    }否则(!strcmp (name、"am57xx-bemp-x15"))返回0;
    
    
    
    
    (&amidt&r)!!!!am4x (&r)返回0)
    
    否则、如果(board_is_am571x_idk ()&&!strcmp (name、"am571x-idk"){
    返回0;
    }否则、如果(board_is_am571x_idk ()&&!strcmp (name、"am571x-my-board")){
    返回0;
    }
    
    return -1;
    
    #endif} 

    如果失败,请检查 board_is_am571x_idk()返回的值,然后打印并逐一比较您需要的每个变量,并查看它们是否匹配。

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

    感谢您的意见、这对我有所帮助。 我已经查看过您之前的帖子、假设您提到的更改是通用文件 u-boot/common/spl/spl_fit.c 中的更改、我忽略了它。 为什么我想对通用代码进行特定于电路板的更改、在您的回答后、我意识到您提到的更改会变成特定于电路板的文件。

    我刚到办公室查看您提供的详尽答复、以验证您的回答。

    谢谢你。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、我们的定制板参考 AM5728 idk、您在定制板上成功了吗?我们不知道如何修改有关 uboot 或内核的文件、您能为定制板提供一些步骤吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Yongjun、

    是的、我能够修改 U-boot 和内核代码、以满足基于 AM5718的定制板的要求、它应该与 AM5728类似、因为从 TI 到 AM5718/28的所有代码都是@ AM57xx。 请告诉我您的问题到底是什么。

    对于"不匹配器件树"问题、添加额外的代码行以在board_fit_config_name_match(constchar*name) u-boot/board/ti/中正常工作 /board.c。

    谢谢、
    Vamshi G.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 vamshi、我们在之前的帖子中尝试过、内核现在可以启动了。AM5728对我们来说是新的、因此大部分内容都值得我们学习。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Wang、

    欢迎您的到来、如果有任何问题、请告诉我、我将尽力而为。