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.

[参考译文] AM4378:U-Boot 出现 AM437x 定制电路板 QSPI 引导故障(无控制台输出)

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1644395/am4378-am437x-custom-board-qspi-boot-failure-with-u-boot-no-console-output

器件型号: AM4378
主题中讨论的其他器件: TPS62362TPS65218

我将 U-Boot 移植到定制 AM437x 板(基于 AM437x-gp-EVM)。  
我使用了 SDK 版本 ti-processor-sdk-linux-AM437X-evm-09.03.05.02-linux-x86-Install.bin。

我参考了以下指南来构建 U-Boot:
https://software-dl.ti.com/processor-sdk-linux/esd/AM437X/09_03_05_02/exports/docs/linux/How_to_Guides/Board_Port board/U-Boot.html#integration-support-for-a-new-board-intro-the-u-boot-tree 

 

使用该指南、我成功构建了 U-Boot 并确认 SD 卡 引导正常工作。 U-Boot 完成从 SD 卡引导后、我还确认正确检测到 QSPI 器件。

 

接下来、为了从 QSPI 引导、我根据“am43xx_evm_qspiboot_defconfig“创建了 u-boot.bin。

# am43xx_base_qspi_defconfig #
CONFIG_ARM=y
CONFIG_ARCH_CPU_INIT=y
# CONFIG_SYS_THUMB_BUILD is not set
CONFIG_ARCH_OMAP2PLUS=y
CONFIG_TEXT_BASE=0x30000000
CONFIG_SYS_MALLOC_F_LEN=0x400
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x4033ff00
CONFIG_ENV_SIZE=0x10000
CONFIG_ENV_OFFSET=0x110000
CONFIG_ENV_SECT_SIZE=0x10000
CONFIG_DM_GPIO=y
CONFIG_DEFAULT_DEVICE_TREE="am437x-base"
CONFIG_AM43XX=y
CONFIG_TARGET_AM43XX_BASE=y
CONFIG_ENV_OFFSET_REDUND=0x120000
CONFIG_DISTRO_DEFAULTS=y
CONFIG_QSPI_BOOT=y
CONFIG_BOOTCOMMAND="run findfdt; run finduuid; run distro_bootcmd"
CONFIG_SYS_CONSOLE_INFO_QUIET=y
CONFIG_BOARD_EARLY_INIT_F=y
# CONFIG_MISC_INIT_R is not set
CONFIG_SYS_MAXARGS=64
CONFIG_CMD_ASKENV=y
CONFIG_CMD_DFU=y
CONFIG_CMD_GPIO=y
CONFIG_CMD_GPT=y
CONFIG_CMD_I2C=y
CONFIG_CMD_MMC=y
CONFIG_CMD_SPI=y
CONFIG_CMD_USB=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_BOOTP_DNS2=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_OF_CONTROL=y
CONFIG_DTB_RESELECT=y
CONFIG_MULTI_DTB_FIT=y
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_SPI_FLASH=y
CONFIG_SYS_REDUNDAND_ENVIRONMENT=y
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
CONFIG_VERSION_VARIABLE=y
CONFIG_NET_RETRY_COUNT=10
CONFIG_BOOTP_SEND_HOSTNAME=y
CONFIG_SYS_RX_ETH_BUFFER=64
CONFIG_DFU_MMC=y
CONFIG_DFU_RAM=y
CONFIG_DFU_SF=y
CONFIG_SPL_SYS_I2C_LEGACY=y
CONFIG_MMC_OMAP_HS=y
CONFIG_SF_DEFAULT_SPEED=48000000
CONFIG_SPI_FLASH_MACRONIX=y
CONFIG_SPI_FLASH_SPANSION=y
CONFIG_MII=y
CONFIG_DRIVER_TI_CPSW=y
CONFIG_POWER_TPS65218=y
CONFIG_POWER_TPS62362=y
CONFIG_SYS_NS16550_SERIAL=y
CONFIG_SPI=y
CONFIG_TI_QSPI=y
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_DWC3=y
CONFIG_USB_XHCI_OMAP=y
CONFIG_USB_GADGET_DOWNLOAD=y

但是、当我将引导模式设置为 QSPI 时、控制台上不会打印任何内容、电路板根本不会引导。 使用 u-boot.bin 成功对 QSPI 编程。

如何检查问题发生在哪里?

board.c board.h mux.c  
为了便于参考、我将上传修改后的源文件。
它们位于“./board/unicos/base “中

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

    尊敬的 Kim:

    我会检查一下、并在 3 天内回复您。

    此致、
    Vinu

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

    尊敬的 Kim:

    我已经浏览过您共享的文件、看起来是正确的。

     board_is_evm ()/board_is_gpevm () 会配置 GPIO5_7_pin_mux、 rgmii1_pin_mux 和 QSPI_PIN_mux 。  
     QSPI_PIN_MUX 本身看起来正确。

    您能否从 SD 引导至 U-boot、看看是否可以从 QSPI 引导 Linux?

    https://software-dl.ti.com/processor-sdk-linux/esd/AM437X/09_03_05_02/exports/docs/linux/Foundational_Components / U-Boot/UG-QSPI.html ?

    U-Boot # SF 探针 0
    U-Boot # SF 读取${loadaddr}0x1a0000 0x800000
    U-Boot # SF 读取${fdtaddr}0x100000 0x80000
    U-Boot # setenv bootargs console=${console
    }spi-qspi.enable_cspi=1 root=/dev/mtdblock6 rootfstype=jffs2 U-boot#${faddr}${faddr}

    如果这有效、您是否还可以尝试从偏移量 0 读取数据? 请共享输出日志。

    U-Boot # sf probe 0
    U-Boot # sf read ${loadaddr} 0x0 0x20000
    U-Boot # md ${loadaddr}

    此外、请共享 QSPI u-boot 二进制文件的 hexdump

    hexdump -C u-boot.bin | head -200

    此外、从 SD U-boot 中、尝试跳转到 QSPI U-boot。

    U-Boot # sf probe 0
    U-Boot # go 0x30000000

    由于 CONFIG 中的 CONFIG_TEXT_BASE=0x30000000 会将 QSPI 闪存映射到该地址、因此应该执行 QSPI U-boot。

    请尝试一下、并告诉我。

    此致、
    Vinu

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

    您好、

    我将使用如下所示的 QSPI 分区。

    partition@0{
        label="QSPI.U_BOOT";
        reg=<0x00000000 0x00100000>;
    };
    
    partition@1{
        label="QSPI.U_BOOT_ENV";
        reg=<0x00100000 0x00080000>;
    };
    
    prtition@2{
        label="QSPI_U-BOOT-DEVICETREE";
        reg=<0x00180000 0x00080000>;
    };
    
    partition@3{
        label="QSPI.KERNEL";
        reg=<0x00200000 0x00E00000>;
    };

    eMMC 上的文件系统。

    因此、我从 SD 卡引导至 U-boot、并 如下所示从 QSPI 引导 Linux。

    sf probe 0
    sf read ${loadaddr 0x00200000 0x00E0000
    sf read ${fdtaddr 0x00180000 0x00080000
    setenv bootargs 'console=ttyO0,115200n8 root=/dev/mmcblk1p1 rw rootfstype=ext4 rootwait'
    bootz ${loadaddr - ${fdtaddr

    它完美地工作了。

     当我按如下所示输入时

    U-Boot # sf probe 0
    U-Boot # sf read ${loadaddr 0x0 0x00100000
    U-Boot # md ${loadaddr

    它显示如下

    82000000: ea0000b8 e59ff014 e59ff014 e59ff014  ................
    82000010: e59ff014 e59ff014 e59ff014 e59ff014  ................
    82000020: 80800060 808000c0 80800120 80800180  `....... .......
    82000030: 808001e0 80800240 808002a0 deadbeef  ....@...........
    82000040: 0badc0de e320f000 e320f000 e320f000  ...... ... ... .
    82000050: e320f000 e320f000 e320f000 e320f000  .. ... ... ... .
    82000060: e51fd028 e58de000 e14fe000 e58de004  (.........O.....
    82000070: e3a0d013 e169f00d e1a0e00f e1b0f00e  ......i.........
    82000080: e24dd048 e88d1fff e51f2050 e892000c  H.M.....P ......
    82000090: e28d0048 e28d5034 e1a0100e e885000f  H...4P..........
    820000a0: e1a0000d fa0006a6 e320f000 e320f000  .......... ... .
    820000b0: e320f000 e320f000 e320f000 e320f000  .. ... ... ... .
    820000c0: e51fd088 e58de000 e14fe000 e58de004  ..........O.....
    820000d0: e3a0d013 e169f00d e1a0e00f e1b0f00e  ......i.........
    820000e0: e24dd048 e88d1fff e51f20b0 e892000c  H.M...... ......
    820000f0: e28d0048 e28d5034 e1a0100e e885000f  H...4P..........
    

    当我输入“hexdump -C u-boot.bin | head –200“时、就会显示这样。

    00000000  b8 00 00 ea 14 f0 9f e5  14 f0 9f e5 14 f0 9f e5  |................|
    00000010  14 f0 9f e5 14 f0 9f e5  14 f0 9f e5 14 f0 9f e5  |................|
    00000020  60 00 80 80 c0 00 80 80  20 01 80 80 80 01 80 80  |`....... .......|
    00000030  e0 01 80 80 40 02 80 80  a0 02 80 80 ef be ad de  |....@...........|
    00000040  de c0 ad 0b 00 f0 20 e3  00 f0 20 e3 00 f0 20 e3  |...... ... ... .|
    00000050  00 f0 20 e3 00 f0 20 e3  00 f0 20 e3 00 f0 20 e3  |.. ... ... ... .|
    00000060  28 d0 1f e5 00 e0 8d e5  00 e0 4f e1 04 e0 8d e5  |(.........O.....|
    00000070  13 d0 a0 e3 0d f0 69 e1  0f e0 a0 e1 0e f0 b0 e1  |......i.........|
    00000080  48 d0 4d e2 ff 1f 8d e8  50 20 1f e5 0c 00 92 e8  |H.M.....P ......|
    00000090  48 00 8d e2 34 50 8d e2  0e 10 a0 e1 0f 00 85 e8  |H...4P..........|
    000000a0  0d 00 a0 e1 a6 06 00 fa  00 f0 20 e3 00 f0 20 e3  |.......... ... .|
    000000b0  00 f0 20 e3 00 f0 20 e3  00 f0 20 e3 00 f0 20 e3  |.. ... ... ... .|
    000000c0  88 d0 1f e5 00 e0 8d e5  00 e0 4f e1 04 e0 8d e5  |..........O.....|
    000000d0  13 d0 a0 e3 0d f0 69 e1  0f e0 a0 e1 0e f0 b0 e1  |......i.........|
    000000e0  48 d0 4d e2 ff 1f 8d e8  b0 20 1f e5 0c 00 92 e8  |H.M...... ......|
    000000f0  48 00 8d e2 34 50 8d e2  0e 10 a0 e1 0f 00 85 e8  |H...4P..........|
    00000100  0d 00 a0 e1 98 06 00 fa  00 f0 20 e3 00 f0 20 e3  |.......... ... .|
    00000110  00 f0 20 e3 00 f0 20 e3  00 f0 20 e3 00 f0 20 e3  |.. ... ... ... .|
    00000120  e8 d0 1f e5 00 e0 8d e5  00 e0 4f e1 04 e0 8d e5  |..........O.....|
    00000130  13 d0 a0 e3 0d f0 69 e1  0f e0 a0 e1 0e f0 b0 e1  |......i.........|
    00000140  48 d0 4d e2 ff 1f 8d e8  10 21 1f e5 0c 00 92 e8  |H.M......!......|
    00000150  48 00 8d e2 34 50 8d e2  0e 10 a0 e1 0f 00 85 e8  |H...4P..........|
    00000160  0d 00 a0 e1 8a 06 00 fa  00 f0 20 e3 00 f0 20 e3  |.......... ... .|
    00000170  00 f0 20 e3 00 f0 20 e3  00 f0 20 e3 00 f0 20 e3  |.. ... ... ... .|
    00000180  48 d1 1f e5 00 e0 8d e5  00 e0 4f e1 04 e0 8d e5  |H.........O.....|
    00000190  13 d0 a0 e3 0d f0 69 e1  0f e0 a0 e1 0e f0 b0 e1  |......i.........|
    000001a0  48 d0 4d e2 ff 1f 8d e8  70 21 1f e5 0c 00 92 e8  |H.M.....p!......|
    000001b0  48 00 8d e2 34 50 8d e2  0e 10 a0 e1 0f 00 85 e8  |H...4P..........|
    000001c0  0d 00 a0 e1 7c 06 00 fa  00 f0 20 e3 00 f0 20 e3  |....|..... ... .|
    000001d0  00 f0 20 e3 00 f0 20 e3  00 f0 20 e3 00 f0 20 e3  |.. ... ... ... .|
    000001e0  a8 d1 1f e5 00 e0 8d e5  00 e0 4f e1 04 e0 8d e5  |..........O.....|
    000001f0  13 d0 a0 e3 0d f0 69 e1  0f e0 a0 e1 0e f0 b0 e1  |......i.........|
    00000200  48 d0 4d e2 ff 1f 8d e8  d0 21 1f e5 0c 00 92 e8  |H.M......!......|
    00000210  48 00 8d e2 34 50 8d e2  0e 10 a0 e1 0f 00 85 e8  |H...4P..........|
    00000220  0d 00 a0 e1 6e 06 00 fa  00 f0 20 e3 00 f0 20 e3  |....n..... ... .|
    00000230  00 f0 20 e3 00 f0 20 e3  00 f0 20 e3 00 f0 20 e3  |.. ... ... ... .|
    00000240  08 d2 1f e5 00 e0 8d e5  00 e0 4f e1 04 e0 8d e5  |..........O.....|
    00000250  13 d0 a0 e3 0d f0 69 e1  0f e0 a0 e1 0e f0 b0 e1  |......i.........|
    00000260  48 d0 4d e2 ff 1f 8d e8  30 22 1f e5 0c 00 92 e8  |H.M.....0"......|
    00000270  48 00 8d e2 34 50 8d e2  0e 10 a0 e1 0f 00 85 e8  |H...4P..........|
    00000280  0d 00 a0 e1 6a 06 00 fa  00 f0 20 e3 00 f0 20 e3  |....j..... ... .|
    00000290  00 f0 20 e3 00 f0 20 e3  00 f0 20 e3 00 f0 20 e3  |.. ... ... ... .|
    000002a0  68 d2 1f e5 00 e0 8d e5  00 e0 4f e1 04 e0 8d e5  |h.........O.....|
    000002b0  13 d0 a0 e3 0d f0 69 e1  0f e0 a0 e1 0e f0 b0 e1  |......i.........|
    000002c0  48 d0 4d e2 ff 1f 8d e8  90 22 1f e5 0c 00 92 e8  |H.M......"......|
    000002d0  48 00 8d e2 34 50 8d e2  0e 10 a0 e1 0f 00 85 e8  |H...4P..........|
    000002e0  0d 00 a0 e1 48 06 00 fa  7a 07 00 ea 00 00 0f e1  |....H...z.......|
    000002f0  1f 10 00 e2 1a 00 31 e3  1f 00 c0 13 13 00 80 13  |......1.........|
    00000300  c0 00 80 e3 00 f0 29 e1  10 0f 11 ee 02 0a c0 e3  |......).........|
    00000310  10 0f 01 ee 78 00 9f e5  10 0f 0c ee 90 03 00 eb  |....x...........|
    00000320  15 0f 07 ee 9a 0f 07 ee  95 0f 07 ee 1e ff 2f e1  |............../.|
    00000330  ed ff ff ea 00 00 a0 e3  17 0f 08 ee 15 0f 07 ee  |................|
    00000340  d5 0f 07 ee 9a 0f 07 ee  95 0f 07 ee 10 0f 11 ee  |................|
    00000350  02 0a c0 e3 07 00 c0 e3  02 00 80 e3 02 0b 80 e3  |................|
    00000360  01 0a 80 e3 10 0f 01 ee  0e 50 a0 e1 10 1f 10 ee  |.........P......|
    00000370  21 3a a0 e1 0f 30 03 e2  0f 40 01 e2 03 22 a0 e1  |!:...0...@..."..|
    00000380  02 20 84 e1 0c 00 9f e5  07 00 c0 e3 00 d0 a0 e1  |. ..............|
    00000390  05 f0 a0 e1 00 00 80 80  00 ff 33 40 ff ff ff ff  |..........3@....|
    000003a0  70 47 01 48 70 47 00 bf  03 00 00 80 00 48 70 47  |pG.HpG.......HpG|
    000003b0  03 00 00 80 00 48 70 47  03 00 00 80 00 48 70 47  |.....HpG.....HpG|
    

    QSPI 写入似乎是正确的。

    如果我输入“Like“

    U-Boot # sf probe 0
    U-Boot # go 0x30000000 ,

    U-Boot SPL 2023.04 (May 11 2026 - 15:00:59 +0900)
    Trying to boot from MMC1
    SPL: Please implement spl_start_uboot() for your board
    SPL: Direct Linux boot not active!
    

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

    尊敬的 Kim:

    这是很好的信息。

    QSPI 本身已正确编写并正常工作、您可以从 QSPI 引导 Linux。

    此外、U-boot 闪存内容匹配(只是小端字节序显示差异)

    但是、 GO 0x30000000 日志指示它是 SPL 二进制文件、而不是 XIP U-boot 正确文件。

    您能否确认是否已将 u-boot.bin 文件从 build 目录写入 QSPI?

    为了确保 U-boot 正确、请运行  

    strings u-boot.bin | grep "U-Boot SPL"

    它应该找不到“U-Boot SPL “字符串。 对于 U-boot 正确的二进制文件、它应该不打印任何内容。

    另外、请使用以下命令查找入口点。

    arm-linux-gnueabihf-readelf -h u-boot | grep "Entry point"

    对于 XIP U-boot 二进制文件、应该显示“entry point address:0x30000000“。

    此致、
    Vinu

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

    您好、

    当我 运行“Stings u-boot.bin | grep “U-Boot SPL“时、它不返回任何值。

    这是我构建的 u-boot.bin 文件。

    e2e.ti.com/.../4540.u_2D00_boot.zip

    此致、

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

    尊敬的 Kim:

    您能找到前面提到的入口点吗?

    另外、请使用以下命令
    找到入口点。

    此致、
    Vinu

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

    您好、

    它显示如下。

    arm-none-linux-gnueabihf-readelf -h u-boot | grep “入口点“
    入口点地址:0x30000000

    此致、

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

    您好、Kim。

    入口点地址:0x30000000

    这是 XIP 的正确地址、但 0x80800000 用于正常 U-boot (am43xx_evm_defconfig)。  

    您能否再次尝试刷写它并检查 QSPI 引导?

    也请共享您的引导引脚配置。

    此致、
    Vinu

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

    您好、

    之前、我检查了为 SD 卡构建的文件。 那是我的错。

    入口点地址为 0x30000000。

    此致、

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

    您好、  

    实际上、如果我将很久以前构建的旧 u-boot.bin (version:2013) 写入 QSPI、它会正常启动。

    因此我认为启动引脚没有问题。

    现在、我正在努力迁移到最新版本。

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

    尊敬的 Kim:  

    最新版本为 11.02.05.02、它是去年发布的 U-boot 2025。

    它修复了很多 U-boot 问题。 您能尝试一下吗?

    此致、
    Vinu

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

    您好、

    确切地说,我使用了版本 09.03.05.02 因为我想使用 Qt5。

    我没有使用 SDK 版本 11.02.05.02、因为它包含 SDK 中预编译的 Qt6。

    我将尝试使用版本 11.02.05.02 构建 U-Boot。

    此致、

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

    您好、

    使用 U-Boot 2025 时、它可以正常启动。

    但我有一个问题。

    开机后、引导日志仅在大约 5-6 秒后显示。

    这是正常的吗?

    此致、

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

    尊敬的 Kim:

    很高兴知道 U-boot 2025 可正常工作。

    理想情况下、它应该更早出现。

    您能共享日志吗?

    此致、
    Vinu

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

    您好、

    日志如下所示。

    U-Boot 2025.01-ga44465cad8a3-dirty (May 14 2026 - 17:39:04 +0900)
    
    CPU  : AM437X-GP rev 1.2
    Model: TI AM437x BASE
    DRAM:  512 MiB
    Core:  29 devices, 12 uclasses, devicetree: fit
    PMIC:  TPS65218
    MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
    Loading Environment from SPIFlash... SF: Detected s25fl128s with page size 256 Bytes, erase size 64 KiB, total 16 MiB
    OK
    Net:   eth2: ethernet@4a100000
    Hit any key to stop autoboot:  0
    

    我在日志中找不到任何不寻常的东西。

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

    尊敬的 Kim:

    日志看起来确实不错。

    如果您需要对引导延迟的支持、我建议您创建另一个包含详细信息的线程。

    这可确保其他社区成员之间的可搜索性。

    此致、
    Vinu

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

    您好、

    好的、我将创建另一个主题。

    感谢您的支持。

    此致、