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/AM3354:自定义板上的 U-boot 失败

Guru**** 2589280 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/638448/linux-am3354-u-boot-fails-on-custom-board

器件型号:AM3354

工具/软件:Linux

您好、先生、

我使用的 是 AM3354BZCZD80处理器。 我正在使用 Yocto 构建 uboot 源代码。 生成的 MLO 和 uboot.img 不会引导我的板、尽管我可以使用该映像引导 BeagleBone Black (AM3358bzcz100)。 在配置时,我使用了 AM335x_EVM_defconfig。 您能不能告诉我、我必须集中精力处理 AM3354BZCZD80的哪些地方

CONFIG_ARM=y
CONFIG_AM33XX=y
CONFIG_TARGET_AM335X_EVM=y
CONFIG_SPL_STACK_R_ADDR=0x82000000
CONFIG_DEFAULT_DEVICE_TREE="AM335x-EVM"
CONFIG_SPL=y
CONFIG_SPL_STACK_R=y
CONFIG_SYS_Extra 选项="与非"
CONFIG_hush_parser=y
CONFIG_autobot_keyed=y
CONFIG_autobot_prompt="Press space to abort autoboot in %d seconds (按空格以在%d 秒内中止自动引导)\n"
CONFIG_autobot_DELAY_STR="d"
CONFIG_autobot_stop_str=""
CONFIG_CMD_BOOTZ=y
# CONFIG_CMD_IMLS 未设置
CONFIG_CMD_ASKENV=y
# CONFIG_CMD_FLASH 未设置
CONFIG_CMD_MMC=y
CONFIG_CMD_SF=y
CONFIG_CMD_SPI=y
CONFIG_CMD_I2C=y
CONFIG_CMD_USB=y
CONFIG_CMD_DFU=y
CONFIG_CMD_GPIO=y
未设置# CONFIG_CMD_SETEXPR
CONFIG_of_control=y
CONFIG_DM_MMC=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_MII=y
CONFIG_CMD_PING_y
CONFIG_CMD_EXT2=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_EXT4_WRITE=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_generic=y
CONFIG_SPI_FLASH=y
CONFIG_SPI_FLASH_Winbond = y
CONFIG_DM_ETH=y
CONFIG_SYS_NS16550=y
CONFIG_TIMER = y
CONFIG_OMAP-TIMER=y
CONFIG_USB=y
CONFIG_USB_MUSB_HOST=y
CONFIG_USB_MUSB_Gadget=y
CONFIG_USB_Gadget=y
CONFIG_RSA=y
CONFIG_FIT = y
CONFIG_SPL_of_LIBFDT=y
CONFIG_SPL_LOAD_FIT = y
CONFIG_OD_LIST="AM335x-EVM AM335x-bone AM335x-boneback AM335x-evmsk AM335x-bonegreen AM335x-icev2"
CONFIG_DM_NANN=y
CONFIG_USB_Gadget_ddownload=y
CONFIG_G_DNL_Manufacturer="德州仪器"
CONFIG_G_DNL_VENDOR_NUM=0x0451
CONFIG_G_DNL_PRODUCT_NUM=0xd022
CONFIG_MISC=y
CONFIG_DM_USB=y
CONFIG_USB_MUSB_TI=y
CONFIG_of_Board_Setup=y
CONFIG_CMD_TIME=y
CONFIG_DM_I2C=y
CONFIG_SPL_YMODE_SUPPINS=y

相关信息

Pranav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请发布您的引导日志。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    先生,
    抱歉、使用 AM3354BZCZD80时、控制台端口上没有任何内容。 您能否指定所需的日志。

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

    Pranav、您好!

    请应用 补丁、您的电路板将启动。

    CD /board-support/u-boot- /
    Git 应用0001-hardcode-EEPROM-board-name-to -A335BNLT.patch

    此致、
    Kemal

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

    您好,Kemal,

    感谢您的回答、 当我使用"A335BNLT"使其成为静态时、 uboot 会启动、但在加载 DTB 时会出现残桩。因为 它尝试在/boot 位置搜索 DTB 文件、即使我将映像放在那里、它也无法加载内核映像 。

    但当我将一个静态名称命名为 A335X_SK 时 ,它会完全启动设备,但在 sone 时间后它会崩溃。

    这是我修改的代码块

    int __Mout_unused ti_i2c_EEPROM_AM_get (int bus_addr、int dev_addr)

       
       //内部 RC;
       结构 ti_am_eeprom am_ep;
       struct ti_common_eeprom *ep;

       EP = TI_EEPROM_DATA;
    #ifndef CONFIG_SPL_Build
       if (EP->HEADER =TI_EEPROM_HEADER_Magic)
          返回0;/* EEPROM 已被读取*/
    #endif

       /*使用已知错误的 i2c 标记初始化失败。 *
       EP->HEADER = TI_DEAD_EEPROM_魔术;
       EP->NAME[0]= 0x0;
       EP->VERSION[0]= 0x0;
       EP->serial[0]= 0x0;
       EP->CONFIG[0]= 0x0;

       //RC = ti_i2c_EEPROM_Get (bus_addr、dev_addr、TI_EEPROM_header_magic、
               //   sizeof (am_EP)、(uint8_t *)&am_EP);
       //IF (RC)
       //   返回 RC;

       EP->HEADER = 0xEE3355AA;
       strlcpy (EP->name、"A335X_SK"、TI_EEPROM_HDR_NAME_LEN + 1);
       TI_EEPROM_STRING_CLEAN整理(EP->NAME);

       /* BeagleBone Green "1" EEPROM、board_rev:0x1a 0x00 0x00 0x00 *
       if (am_ep.version[0]= 0x1a && am_ep.version[1]= 0x00 &&
          AM_EP.VERSION[2]= 0x00 && AM_EP.VERSION[3]= 0x00)
          strlcpy (EP->版本、"BBG1"、TI_EEPROM_HDR_REV_LEN + 1);
       其他
          strlcpy (EP->version、AM_EP.version、TI_EEPROM_HDR_REV_LEN + 1);
       TI_EEPROM_STRING_CLEAN整理(EP->VERSION);
       strlcpy (EP->serial、am_ep.serial、TI_EEPROM_HDR_SERIAL_LEN + 1);
       TI_EEPROM_STRING_CLEANING (EP->serial);
       strlcpy (EP->CONFIG、AM_EP.CONFIG、TI_EEPROM_HDR_CONFIG_LEN + 1);
       TI_EEPROM_STRING_CLEAN整理(EP->CONFIG);

       memcpy (ep->mac_addr、am_ep.mac_addr、
             TI_EEPROM_HDR_NO_O_of _MAC_ADDR * TI_EEPROM_HDR_ETH_Alen);

       返回0;

    ===========================================================================================================================================

    这是崩溃日志

    root@AM335x-EVM:~#[67.131353(2001)  random:非阻塞池已初始化
    [131.188064] ------ [在此处剪切]-----
    [131.197228] c0429ec0中的内核错误[详细调试信息不可用]
    [131.212100] 内部错误:Oops -错误:0 [#1]抢占 ARM
    [131.226204] 链接模块:
    [131.23345] CPU:0 PID:13 Comm:kworker/0:1未被污染4.4.4.91-g9d9bc78b62 #6
    [131.249518] 硬件名称:通用 AM33XX (平展器件树)
    [131.264634] 工作队列:Events_power_efficient phy_state_machine
    [131.279753] 任务:dc0e8580 ti:dc110000 task.ti:dc110000
    [131.289783] PC 位于 mdiobus_free+0x40/0x44
    [131.298581] LR 位于 lan87xx_read_status+0x98/0xe8
    [131.307917] PC:[ ]   LR:[ ]   PSR:600e0013
    [131.307917] sp:dc111e88 IP:00000000 FP:dc111ea4.
    [131.332826] R10:00000000 R9:dc0f5a80 R8:00000000
    [131.342490] r7:dcb38800 R6:00000000 R5:00000040 R4:dc444000
    [131.35762] r3:001fff00 r2:00000011 r1:00000000 r0:dc444000
    [131.372940] 标志:   模式 SVC_32 ISA ARM 段无、FIQ 上的 nZCv IRQ
    [131.389005] 控制:10c5387d 表:9c500019 DAC:00000051
    [131.403790] 加工工人/0:1 (pid:13、堆栈限制= 0xdc110208)
    [131.419340] 堆栈:(0xdc111e88至0xdc112000)
    [131.428323] 1e80:                  dc444400 00000040 00000000 dcb38800 dc111ec4 dc111ea8.
    [131.445953] 1ea0:c042b2e4 c0429da4 c042b24c dc4445f4 dc44462c dc444400 dc111eec dc111ec8
    [131.463574] 1ec0:c0427d68 c042b258 c0427a30 dc0f5a80 dc4445f4 c08c8988 dcb38800 00000000
    [131.481302] 1e0:dc111f2c dc111ef0 c0046e1c c0427a3c dc0f5a98 c08c8988 c08c8998 00000001
    [131.499024] 1f00:c08c8988 c08c8988 c08c8998 00000001 dc0f5a98 00000008 dc0f5a80 c08c8988
    [131.516922] 1f20:dc111f64 dc111f30 c004724c c0046d00 dc0fca40 dc0f5a80 c0047090 00000000
    [ 131.534860] 1f40:dc0fca40 dc0f5a80 c0047090 00000000 00000000 00000000 dc111fgac 111f68
    [131.552794] 1f60:c004c8c0 c004709c 596ef1ef 00000000 dc0fca40 dc0f5a80 00000000 dc111f7c
    [131.570704] 1f80:dc111f7c 00000000 dc111f88 dc111f88 dc0fca40 c004c7d0 00000000 00000000
    [131.588730] 1fa0:00000000 dc111fb0 c000fb8 c004c7dc 00000000 00000000 00000000 00000000
    [131.606843] 1fc0:00000000 00000000 00000000 00000000 00000000 00000000 00000000
    [131.624969] 1fe0:00000000 00000000 00000000 00000000 00000013 00000000 745d7dbf db5ffe7d
    [131.643245] 回溯:
    [131.650753][  ](mdiobus_read)、来自[ ](lan87xx_read_status+0x98/0xe8)
    [131.668899]  r7:dcb38800 R6:00000000 R5:00000040 R4:dc444400
    [131.684712][  ](lan87xx_read_status)从[ ](phy_state_machine+0x338/0x444)
    [131.703521]  R6:dc444400 R5:dc44462c R4:dc4445f4 R3:c042b24c
    [131.719366] [ ](phy_state_machine)从[ ](Process_One_Work+0x128/0x360)
    [131.738018]  R8:00000000 r7:dcb38800 R6:c08c8988 R5:dc4445f4 R4:dc0f5a80 R3:c0427a30
    [131.756073] [ ](Process_One_Work)、来自[ ](worker_thread+0x1bc/0x594)
    [131.774372]  R10:c08c8988 R9:dc0f5a80 R8:00000008 r7:dc0f5a98 R6:00000001 R5:c08c8998
    [131.792477]  R4:c08c8988
    [131.800059] [ ](worker_thread)、来自[ ](kthread+0xf0/0x10c)
    [131.817286]  R10:00000000 R9:00000000 R8:00000000 r7:c0047090 R6:dc0f5a80 R5:dc0fca40
    [131.835188]  R4:00000000
    [131.842670] [ ](kthread)、来自[ ](RET_FANK_F叉+0x14/0x3c)
    [131.85951]  r7:00000000 R6:00000000 R5:c004c7d0 R4:dc0fca40
    [131.875100] 代码:00000000 00000000 00000000 00000000 (e7f001f2)
    [131.890958] -[结束线迹231eae7e00ecc0 ]---

    引导 uboot 的日志是、我怀疑 CRAH 的问题是以太网问题还是其他原因。

    MMC:  OMAP SD/MMC:0、OMAP SD/MMC:1.
    正在读取 uboot.env

    **无法从 mmc0:1读取"uboot.env"**
    使用默认环境

    未设置。 验证第一个电子保险丝 MAC
    NET:  eth0:以太网@4a100000
    警告:USB_Ether MAC 地址不匹配:
    SROM 中的地址为        :de:ad:be:ef:00:01
    环境中的地址为 50:8c:B1:17:48:F1
    ,eth1:USB_ether
    按空格键可在2秒钟内中止自动引导
    切换到分区#0,确定
    mmc0是当前器件
    在器件0上找到 SD/MMC
    正在读取 BOOT.SCR
    **无法读取文件 boot.scr **
    正在阅读 uEnv.txt
    5ms 内读取491字节(95.7KiB/s)
    从 uEnv.txt 加载了 env
    正在从 mmc0导入环境...
    正在运行 envcmd ...
    正在读取 zImage
    在522 ms (6.1 MIB/s)内读取的3362040字节
    读取 AM335x-evmsk.dTB
    在15ms (2.6 MIB/s)内读取40617字节
    内核映像@ 0x82000000 [ 0x000000 - 0x334cf8]
    ###展开的设备树 blob、88000000
      使用0x88000000处的 FDT blob 进行引导
      在88000000、8800cea8结束时使用设备树

    请指导我按照正确的方向操作以解决问题。我还想知道静态更改为何会使 uboot 变为活动状态、为什么它不接受来自 EEPROM 的数据

    相关信息

    Pranav

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

    如果电路板上有 EEPROM、则可以使用 这些 i2c 命令从 U-Boot 控制台对其进行编程。 您可以在此处和 此处找到 AM335X-EVM 和 AM335X-SK EEPROM 存储器布局
    请使用 addr2line -f c0429ec0 -e vmlinux 命令查看哪个函数导致内核超出处理空间。
    如果此时您的电路板残桩:
    ###展开的设备树 blob、88000000
    使用0x88000000处的 FDT blob 进行引导
    在88000000、8800cea8结束时使用设备树
    U-boot 控制台取消设置 FDT_HIGH。