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/AM3359:u-boot 可以#39;t 查找 DTS 文件

Guru**** 2563960 points
Other Parts Discussed in Thread: AM3359

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/627813/linux-am3359-u-boot-can-t-find-dts-file

器件型号:AM3359

工具/软件:Linux

您好、TI 团队、

我正在搜索一些提示、以在我的 SDK 更新期间解决以下问题:

首先、我的项目有一些事实:

-带处理器 AM3359的定制板
- SDK 文件:TI-processor-SDK-Linux-RT-AM335x-EVM-04.00.04-Linux-x86-64安装
-通过 SD 卡引导,使用 create-sdcard.sh 构建2分区 SD 卡(boot 和 rootfs)
-我们的配置基础是 AM335x-EVM 配置

成功构建过程后、我将 MLO 和 u-boot.bin 文件复制到引导分区
dtb 文件(custom_board.dtB)和 zImage-File 与之前的 SDK 版本一样位于 rootfs 的引导文件夹中。

当我引导系统时、我收到以下错误消息

"
U-Boot SPL 2017.01-00319-geae4602-脏(2017年9月25日- 15:56:34)

尝试从 MMC1引导

正在读取 u-boot.img

正在读取 u-boot.img

正在读取 u-boot.img

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

custom_board

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

SPL_LOAD_IMAGE_ext:ext4fs 安装错误- 0

"

我的更改详情:

arch/arm/Kconfig:添加了...
"源"board/custom_board/kconfig"
并添加了一个包含特定板级配置文件的板级文件夹、该文件夹基于 board/ti/AM335x

arch/arm/dts/Makefile:添加到块中...

"
dtb-$(CONFIG_AM33XX)+= AM335x-boneblack.dTB AM335x-bone.dtb \
AM335x-Draco.dTB \
AM335x-EVM.dTB \
AM335x-evmsk.dTB \
AM335x-bonegreen.dtb \
AM335x-icev2.dtb \
AM335x-pxm50.dtb \
AM335x-rut.dTB \
custom_board.dtb
"

arch/arm/dts/custom_board.dts:添加了文件并进行调整。

我们使用的 DTS 文件在以前的版本中可以正常工作。 但是、在这里、我们只对内核使用器件树文件、而不是对 uboot 使用器件树文件

arch/arm/mach-mpa2/am33xx/kconfig:添加了...

"
配置 TARGET_CUSTOM_Board
bool "支持 custom_board"
选择 DM
选择 DM_serial
选择 DM_GPIO
"


configs/custom_board_defoncconfig:修改后的配置、即 (我仅复制了设备树参考条目)

CONFIG_ARM=y
CONFIG_AM33XX=y
CONFIG_TARGET_CUSTOM_Board=y
CONFIG_DEFAULT_DEVICE_TREG="custom_board"
CONFIG_FIT = y
CONFIG_SPL_LOAD_FIT = y
CONFIG_ON_LIST="custom_board"
CONFIG_SPL_of_LIBFDT=y
CONFIG_of_LIBFDT=y

包括/configs/custom_board.h 中的大量更改(基于 config AM335x_EVM.h)
但在这里、我不确定哪些行是设备树所必需的。

正如我在上面写的那样、构建过程成功、我在日志输出中发现了这一点:

DTC arch/arm/dts/AM335x-bonebblack.dtb
DTC arch/arm/dts/AM335x-bone.dtb
DTC arch/arm/dts/AM335x-Draco.dtb
DTC arch/arm/dts/AM335x-evm.dtb
DTC ARM/ARM/DTS/AM335x-evmsk.dtb
DTC arch/arm/dts/AM335x-bonegreen.dtb
DTC arch/arm/dts/AM335x-icev2.dtb
DTC arch/arm/dts/am335x-pxm50.dtb
DTC arch/arm/dts/AM335x-rut.dtb
DTC arch/arm/dts/custom_board.dtb
已发运 DTS/dt.dtb
MKIMAGE u-boot.img
CAT u-boot-dtb.bin
复制 u-boot.dTB
MKIMAGE u-boot-dtb.img
复制 u-boot.bin

我的问题:

我忘记调整或添加任何内容了吗?
关于 Linux Core U-Boot 用户指南、我假设 dtb 文件位于 u-boot.img???
正如您的指南中所描述 的那样,我复制了 MLO 文件和 u-boot.img 以进行引导,并在 rootfs 分区的文件夹/boot 中复制了 custom_board.dTB 和 zImage。 是这样吗?

此致
Markus

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    [引用]关于您的 Linux Core U-Boot 用户指南、我假设 dtb 文件位于 u-boot.img???[/quot]

    是的、您的理解是正确的。

    [引用]正如您的指南中所描述的那样,我复制了 MLO 文件和 u-boot.img 以引导分区,并在 rootfs 分区的文件夹/boot 中复制了 custom_board.dTB 和 zImage。 这是正确的吗?

    只需澄清一下、在最新的 TISDK 中、u-boot 和 Linux 内核源都包含 DTS 文件(在构建时会产生 DTB 二进制文件)。 在 rootfs 分区的/boot 文件夹中,您需要从 Linux 内核源生成 custom-board.dtb,而不是从 u-boot/arch/arm/dts/custom-board.dtb 生成。

    [报价]我忘记调整或添加任何内容了吗?[/报价]
    您似乎已经完成了大多数更改。 但是,构建 u-boot.img 时使用的过程是什么? 您使用的是哪一个配置文件? 我猜是 custom_board_defonconfig。
    通常、我使用以下过程来构建 u-boot:
    使 AM335x_EVM_CONFIG 为
    使-J4

    AM335x_EVM_CONFIG 调用 include/configs/AM335x_EVM.h 的编译 您是否已修改此文件以匹配您的定制板?

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

    Yordan、您好!

    感谢您的回复。

    只需澄清一下、在最新的 TISDK 中、u-boot 和 Linux 内核源都包含 DTS 文件(在构建时会产生 DTB 二进制文件)。 在 rootfs 分区的/boot 文件夹中,您需要从 Linux 内核源生成 custom-board.dtb,而不是从 u-boot/arch/arm/dts/custom-board.dtb 生成。

    是的、我们按照您所述的方式构建它。

    但我使用相同的 DTS-file。 该文件正在工作、我们使用内核4.1.13 (SDK 2.0.1.7)对其进行了测试
    这是我们第一次为引导加载程序使用 dt 文件(在它是 uboot-2015.01之前、它是通过 board.c 和.h 文件配置的)
    对两个器件使用相同的 DTS 文件是否正确?

    澄清:
    e2e.ti.com/.../1440938
    在另一个论坛帖子中、TI 员工建议构建 dtb 文件。 如果我理解正确、这仅是内核所必需的。 uboot 进程会自动构建 dtb 文件
    并且-就像您已经确认的那样-将其放入 u-boot.img 中。
    在构建过程之后、我在文件夹中找到了2个 img-文件:
    -u-boot.img
    -u-boot-dtb.img

    因为大小、我认为它们是相同的文件。 是这样吗?

     

    但是,构建 u-boot.img 时使用的过程是什么?

    我的构建脚本:

    使 mrproper 正确
    rm -rf ./custom_board
    使 arch=arm cross_compile=arm-linux-gnueabihf- o=custom_board custom_board_defconfig
    使-j4 arch=arm cross_compile=arm-linux-gnueabihf- o=custom_board

    您使用的是哪一个配置文件? 我猜是 custom_board_defonconfig。

    是的、你是对的! 下面是完整的配置(我已经对它进行了一些排序:-))
    应使用配置来构建用于 SD 卡引导的 MLO 和用于网络引导的 SPL

    ############################
    #定制板 defconfig       编号
    编号                          编号
    #基于 AM335x EVM       编号
    ############################

    CONFIG_ARM=y
    CONFIG_AM33XX=y
    CONFIG_TARGET_CUSTOM_Board=y
    CONFIG_SPL_STACK_R_ADDR=0x82000000
    CONFIG_DEFAULT_DEVICE_TREG="custom_board"
    CONFIG_DISTRO 默认值=y
    CONFIG_FIT = y
    CONFIG_SPL_LOAD_FIT = y
    CONFIG_SYS_CONSOLE_INFO_SALET=y
    CONFIG_VERSION_variable = y
    CONFIG_SPL=y
    CONFIG_SPL_STACK_R=y
    CONFIG_SPL_MTD_support=y
    CONFIG_SPL_NET_support=y
    CONFIG_CMD_ASKENV=y
    CONFIG_CMD_MMC=y
    CONFIG_CMD_GPIO=y
    CONFIG_CMD_EXT4_WRITE=y
    CONFIG_of_control=y
    CONFIG_ON_LIST="custom_board"
    CONFIG_DM_MMC=y
    CONFIG_SYS_NS16550=y
    CONFIG_TIMER = y
    CONFIG_OMAP-TIMER=y
    CONFIG_USE_TING_printf=y
    CONFIG_RSA=y
    CONFIG_SPL_of_LIBFDT=y
    CONFIG_MISC=y
    CONFIG_USB_MUSB_TI=y
    CONFIG_of_LIBFDT=y
    CONFIG_of_Board_Setup=y
    CONFIG_SPL_NET_VCI_STRING="AM335x U-Boot SPL"
    CONFIG_SPL_ETH_support=y


    ####################
    #已停用           编号
    ####################

    # CONFIG_EMMC_BOOT 未设置
    未设置# CONFIG_CMD_DFU
    未设置# CONFIG_CMD_I2C
    # CONFIG_CMD_SF 未设置
    未设置# CONFIG_CMD_SPI
    未设置# CONFIG_CMD_USB
    未设置# CONFIG_DFU_MMC
    未设置# CONFIG_DFU_NAND
    未设置# CONFIG_DFU_RAM
    未设置# CONFIG_DM_I2C
    未设置# CONFIG_DM_NAND
    未设置# CONFIG_DM_USB
    未设置# CONFIG_G_DNL_Manufacturer
    未设置# CONFIG_G_DNL_VENDOR_NUM
    未设置# CONFIG_G_DNL_PRODUCT_NUM
    未设置# CONFIG_SPI_FLASH
    未设置# CONFIG_SPI_FLASH_Winbond
    未设置# CONFIG_SPL_MUSB_new_support
    未设置# CONFIG_SPL_NAND_support
    未设置# CONFIG_SPL_OS_BOOT
    未设置# CONFIG_SPL_USB_Gadget_support
    未设置# CONFIG_SPL_USBETH_support
    未设置# CONFIG_SYS_Extra 选项
    未设置# CONFIG_USB
    未设置# CONFIG_USB_MUSB_HOST
    未设置# CONFIG_USB_MUSB_Gadget
    未设置# CONFIG_USB_STORAGE
    未设置# CONFIG_USB_Gadget
    未设置# CONFIG_USB_GADGET_DOWNLOAD


    ##################
    #已由 TI 停用      编号
    ##################

    # CONFIG_CMD_IMLS 未设置
    # CONFIG_CMD_FLASH 未设置
    未设置# CONFIG_CMD_SETEXPR
    未设置# CONFIG_BLK
    未设置# CONFIG_DM_MMC_OPS

    我还使用 AM335x_EVM 配置测试了编译、并获得了以下结果:

    "
    U-Boot SPL 2017.01-00319-geae4602-脏(2017年9月26日- 11:10:10)
    尝试从 MMC1引导
    正在读取 uboot.env
    **无法从 mmc0:1读取"uboot.env"**
    使用默认环境
    正在读取 u-boot.img
    正在读取 u-boot.img
    正在读取 u-boot.img
    这些选项中没有匹配的 DT:
    AM335x-EVM
    AM335x-bone
    AM335x -深黑色
    AM335x-evmsk
    AM335x-bonegreen
    AM335x-icev2.
    正在读取 uboot.env
    **无法从 mmc0:1读取"uboot.env"**
    使用默认环境
    无法装入 ext2文件系统...
    SPL_LOAD_IMAGE_ext:ext4fs 安装错误- 0
    "

    然后、我使用 AM335x 入门套件测试了同一张卡、它可以正常工作(uboot DTS 部件):

    "
    U-Boot SPL 2017.01-00319-geae4602-脏(2017年9月26日- 11:10:10)
    尝试从 MMC1引导
    正在读取 uboot.env
    **无法从 mmc0:1读取"uboot.env"**
    使用默认环境
    正在读取 u-boot.img
    正在读取 u-boot.img
    正在读取 u-boot.img
    正在读取 u-boot.img
    U-Boot 2017.01-00319-geae4602-脏(2017年9月26日- 11:10:10 +0200)
    CPU:AM335X-GP 修订版1.0
    型号:TI AM335x EVM-SK
    DRAM:256 MIB
    NAND:0 MIB
    MMC:OMAP SD/MMC:0、OMAP SD/MMC:1.
    正在读取 uboot.env
    **无法从 mmc0:1读取"uboot.env"**
    使用默认环境
    (笑声)
    正在启动内核...
    "

    是否有任何硬件会影响 DT 负载? 我还假设电路板上的 AM335x_EVM 配置问题是未知的 dt 文件?

    这些选项中没有匹配的 DT:
    AM335x-EVM
    AM335x-bone
    AM335x -深黑色
    AM335x-evmsk
    AM335x-bonegreen
    AM335x-icev2.

    此致
    Markus

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

    好的、可能是朝着正确的方向迈出了一步:

    EVM 通过 EEPROM 识别电路板。

    am335x_evm.h 包含以下定义:

    (行92)
    #define CONFIG_BOOTCOMMAND \
    "如果测试${boot_fit}-eq 1;然后"\
    "运行 update_TO_FIT;"\
    " FI;"\
    "运行 findfdt;"\
    "运行 init_console;"\
    "运行 envboot;"\
    "运行 DISTR_BOOTCMD"

    好的、我找到了  

    (第107行)

    #define CONFIG_Extra ENV_SETTINGS \

    (笑声)

    "Fdtfile=undefined\0"\

    (笑声)

    "findfdt="\
    "如果 TEST $board_name = A335BONE;则"\
    "setenv fdtfile am335x-bone.dtb;fi;"\
    "如果 TEST $board_name = A335BNLT;则"\
    "setenv fdtfile am335x-bonebblack.dtb;fi;"\
    "如果 test $board_name = BBG1;则"\
    "setenv fdtfile am335x-bonegreen.dtb;fi;"\
    "如果 TEST $board_name = A33515BB;则"\
    "setenv fdtfile am335x-evm.dtb;fi;"\
    "如果 TEST $board_name = A335X_SK;则"\
    "setenv fdtfile am335x-evmsk.dtb;fi;"\
    "如果测试$board_name = A335_ICE;则"\
    "setenv fdtfile am335x-icev2.dtb;fi;"\
    "如果 test $fdtfile =未定义;则"\
    "回显警告:无法确定要使用的设备树;fi;\0"\

    我在调整期间将其更改为

    "Fdtfile=custom_board.dtb\0"\

    此部件是否仅适用于内核 DTB? uboot dtb 是否有另外一行?


    此致
    Markus

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

    请参阅"没有与这些选项中的 DT 匹配:"消息。 它来自:
    U-Boot- /common/common_fit.c

    int fit_select_fdt (const void * fdt、int images、int * fDT_offsetp)
    {
    const char * name、* fDT_name;
    int conf、node、fDT_node;
    int len;
    
    * fdt_offsetp = 0;
    conf = fdt_path_offset (fdt、fit_confs_path);
    if (conf < 0){
    debug ("%s:找不到/configurations 节点:%d\n"、__func__、
    CONF);
    返回-EINVAL;
    }
    表示(节点= FDT_FIRST_SUBINode (FDT、conf);
    节点>= 0;
    节点= FDT_NEW_SUBnode (FDT、node)){
    name = FDT_getprop (FDT、node、"description"、&len);
    if (!name){
    #ifdef CONFIG_SPL_LIBCOMMON_support
    printf ("%s":DTB\n"、
    __func__);
    #endif
    return -EINVAL;
    }
    if (board_fit_config_name_match (name))
    continue;
    
    debug ("选择配置'%s'、name);
    FDT_name = FDT_getprop (FDT、node、 fit_FDT_PROP、&len);
    如果(!FDT_NAME){
    debug ("%s:找不到 FDT 名称属性:%d\n"、
    __func__,len);
    返回-EINVAL;
    }
    
    debug ("、FDT '%s')\n", FDT_NAME);
    FDT_node = FDT_SUBNODE_OFFSET (FDT、Images、FDT_NAME);
    IF (FDT_NODE < 0){
    DEBUG ("%s:找不到 FDT 节点'%s':%d\n"、
    __func__、FDT_name、FDT_node);
    return -EINVAL;
    }
    
    *FDT_offsetp = FDT_getprop_u32 (FDT、FDT_node、"data-offset");
    = FDT_getlen_u32 (FDT、FDT_node、 "data-size");
    debug ("fit:selected '%s'\n"、name);
    
    return len;
    }
    
    #ifdef CONFIG_SPL_LIBCOMMON_support
    printf ("这些选项中没有匹配 DT:\n");
    for (node = FDT_FIRST_SUBnode (FDT、conf);
    节点>= 0;
    节点= FDT_NEW_SUBnode (FDT、node)){
    name = FDT_getprop (FDT、node、"description"、&len);
    printf ("%s\n"、 名称);
    }
    #endif
    
    return -ENOENT;
    } 

    要进入此状态、board_fit_config_name_match 应始终返回 false。

    您可以在 U-Boot-中找到 board_fit_config_name_match /board/ti/am335x/board.c

    int board_fit_config_name_match (const char * name)
    {
    if (board_is_gp_evm ()&&!strcmp (name、"AM335x-evm")
    ) return 0;
    否则(board_is_bone ()&& strboncmp (name、"AM335x-bone-bon")
    return 0;且
    "am3x_brom_en"(&r)!
    
    !!!!!!!
    
    !
    
    否则、如果(board_is_icev2()&&!strcmp (name、"AM335x-icev2")
    返回0;
    否则
    返回-1;
    } 

    board_y***功能状态源自 EEPROM 内容,并且由于您的定制板没有或没有空或损坏或未正确连接,因此会出现“No matching DT out of these options:”(这些选项中没有匹配 DT:)错误。

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

    您好、Kemal、

    是的、这就是解决方案! 我已经更改了函数、但名称中有一个错误。  


    非常感谢!

    此致

    Markus