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/AM3358:NAND 引导错误

Guru**** 2587365 points
Other Parts Discussed in Thread: AM3358

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633471/linux-am3358-nand-boot-error

器件型号:AM3358

工具/软件:Linux

您好!

我在安装了 NAND 的定制板上使用 am3358处理器。

U-boot 和内核是使用 SDK 03.03构建的。

尝试引导 MLO 打印时: 未找到预期的 Linux 映像。 请检查您的 NAND 配置。

通过代码进行跟踪这是它位于以下位置的位置:

if (header->IH_OS =IH_OS_Linux){

/* Happy -是 Linux */
ERR = nand_spl_load_image (
CONFIG_SYS_NAND_SPL_kernel_abs、
SPL_image.size、
(void *) spl_image.load_addr);

NAND_DESELECT ();
退货错误;
}否则{
PUs ("预期的 Linux 映像不是"
"已找到。 请检查您的 NAN"
"配置。\n");
PUS ("正在尝试启动 u-boot ...\n");

它提取的标头是内核分区的前64个字节:

typedef 结构体 image_header{
_be32 IH_magic;/*图像标题魔法编号*/
_be32 IH_hcrc;/*图像标题 CRC 校验和*
_be32 IH_TIME;//图像创建时间戳*/
_be32 IH_size;//图像数据大小*/
_be32 IH_load;//数据加载地址*/
_be32 IH_EP;/*入口点地址*/
_be32 IH_dcrc;/*图像数据 CRC 校验和*
uint8_t IH_OS;/*操作系统*/
uint8_t IH_arch;/* CPU 架构*
uint8_t IH_TYPE;/*图像类型*
uint8_t IH_comp;/*压缩类型*/
uint8_t IH_NAME[IH_NMLEN];//图像名称*
} image_header_t;

通过查看 zImage 的二进制视图、我可以看到、当 MLO 希望其为5时、29字节为0。

在阅读 Linux 映像头文件时、uImage 看起来具有 Header、zImage 是压缩版本、但没有。

是这样吗?

我是否必须使用 uImage for MLO 来识别内核。

此致、

Ugnius

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

    查看此 wiki: processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide 、查看您是否已将文件写入正确的位置。 您应该使用 zImage。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我有一个较大的 nand 页、因此具有不同的分区表:

    分区@0{标签="NAND.SPL";               REG =<0x00000000 0x00040000>;};
    分区@1{label ="NAND.SPL.Backup1";         REG =<0x00040000 0x00040000>;};
    分区@2{label ="NAND.SPL.Backup2";         REG =<0x00080000 0x00040000>;};
    分区@3{label ="NAND.SPL.backup3";         REG =<0x000C0000 0x00040000>;};
    分区@4{label ="NAND.u-boot-spl-os";         REG =<0x00100000 0x00080000>;};
    分区@5{label ="NAND.u-boot";              REG =<0x00180000 0x00100000>;};
    分区@6{label ="NAND.u-boot-env";           REG =<0x00280000 0x00040000>;};
    分区@7{label ="NAND.u-boot-env.Backup1";   reg =<0x002C0000 0x00040000>;};
    分区@8{label ="NAND.kernel";               REG =<0x00300000 0x00700000>;};
    分区@9{label ="NAND.file-system";           REG =<0x00a00000 0x1f600000>;};

    对 Linux 内核的检查发生在 MLO 中。

    zImage 的标题:

    Uimage 的标题:

    看看这些 Uimage 在位置29处有5个、这正是 MLO 所期望的。

    我有几个问题:

    1.为什么 MLO 首先尝试寻找内核? 我认为序列应该是 MLO -> U-boot -> kernel。

    2.为什么要查找看起来与 Uimage 关联的 Linux OS 标记。

    此致、

    Ugnius

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

    您使用的是哪种 NAND 芯片? 请注意、最多支持4K (4096)页大小。

    另请参阅以下链接是否位于帮助中:

    processors.wiki.ti.com/.../Linux_Core_NAND_User's_Guide

    e2e.ti.com/.../1190972
    e2e.ti.com/.../289070

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

    我现在让内核从 NAND 引导。

    在 uboot/include/configs/am335x_evm.h 中

    我替换了:

    "bootcmd_"#devtypel "="\

    其中:

    "bootcmd_nand0="\"\

    因为控制台上的打印没有为设备 nand0定义引导参数。

    我不知道 #devtypel 是定义还是使其更通用的东西、但它现在正在为我处理它。

    我在 以下位置找到了该解决方案:https://e2e.ti.com/support/arm/sitara_arm/f/791/p/557404/2041737

    MLO 仍在尝试加载内核的 UImage:

    U-Boot SPL 2016.05-超量程-脏(2017年10月26日- 13:01:07)
    尝试从 NAND 引导
    未找到预期的 Linux 映像。 请检查您的 NAND 配置。
    正在尝试立即启动 u-boot ...

    不知道为什么像这样设置它。

    默认情况下、U-boot 首先尝试从 SD 卡引导并检查以太网:


    U-Boot 2016.05-过气80脏(2017年10月26日- 13:01:07 +0100)

    CPU:AM335X-GP 修订版2.1
    型号:TI AM335x EVM-SK
    启用看门狗
    DRAM:256 MIB
    NAND:1024 MIB
    MMC:OMAP SD/MMC:0、OMAP SD/MMC:1.
    ***错误-未找到有效的环境区域
    ***警告- CRC 错误,使用默认环境

    未设置。 验证第一个电子保险丝 MAC
    NET:无法获取以太网的 PHY@4a100000:Addr 0
    eth0:以太网@4a100000
    警告:USB_Ether MAC 地址不匹配:
    SROM 中的地址为:de:ad:be:ef:11:11
    环境中的地址为04:A3:11:fb:e1:10
    ,eth1:USB_ether
    按空格键可在2秒钟内中止自动引导
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    卡未响应电压选择!
    正在从 nand 引导...

    NAND 读取:器件0偏移量0x100000、大小0x80000
    524288字节读取:正常

    NAND 读取:器件0偏移量0x300000、大小0x700000
    7340032字节读取:正常

    是否有任何方法可以禁用此功能并仅保留 NAND?

    使用在不同文件中设置的引导参数的方法会让人感到困惑。

    有没有关于这个的教程?

    此致

    Ugnius

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

    请浏览以下 e2e 主题:

    e2e.ti.com/.../502276

    如果您仍有 NAND 启动问题、请告诉我。

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

    [引用 USER="Ugnius Subacus"]U-Boot SPL 2016.05-超量程-脏(2017年10月26日- 13:01:07)
    尝试从 NAND 引导
    未找到预期的 Linux 映像。 请检查您的 NAND 配置。
    正在尝试立即启动 u-boot ...

    这很可能是由于文件大小不匹配和/或偏移错误造成的。 有关更多信息、请参阅以下指针:

    [引用 user="Ugnius Subacius"]默认情况下,U-boot 首先尝试从 SD 卡引导并检查以太网:

    确保首先为 NAND 引导配置引导引脚。

    此致、
    帕维尔

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

    您的 NAND 大小是多少、并根据"AM335x_EVM.h"中的 NAND 大小更改 NAND 配置。

    #define CONFIG_SYS_NAND_PAGE_SIZE
    #define CONFIG_SYS_NAND_OOBSIZE
    #define CONFIG_SYS_NAND_BLOCK_SIZE
    #define CONFIG_SYS_NAND_ECCPOS
    #define CONFIG_SYS_NAND_ECCSIZE
    #define CONFIG_SYS_NAND_ECCBYTES
    #define CONFIG_NAND_OMAP-ECCSCHEME
    #define MTDPARTS_DEFAULT

    #define CONFIG_CMD_SPL_NAND_OFS ?? /*操作系统参数*/
    #define CONFIG_SYS_NAND_SPL_kernel_offs?/*内核偏移*
    #define CONFIG_CMD_SPL_WRITE_SIZE ??

    谢谢、
    Anil