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:写入数据后、NAND 重新引导失败

Guru**** 2960990 points

Other Parts Discussed in Thread: AM3354

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/674101/linux-am3354-nand-reboot-fails-after-writing-data

器件型号:AM3354

工具/软件:Linux

你(们)好

   我正在处理一个与在 nand flash 上运行的 am3354有关的非常罕见但严重的问题。

   基于 AM3354的2种不同产品上出现了2个问题。详细信息如下:

   问题1:

   AM3354在3.2.0内核上运行。 (06.00.00.00 SDK)

  在"cp"后、一些文件并发出"reboot"命令。

  AM3354应重新启动并从 u-boot 重新运行。

  但是、串行控制台输出"CCCCCCCCCCC"

  就好像 nand 闪存中没有数据一样。或者 nand 闪存中至少没有 MLO。

   然后、我只使用 MLO 对 Nand 闪存进行编程。

  nand 闪存现在可以引导。

  似乎 MLO (至少 MLO)被销毁。

   问题是。

  在重新引导之前。我只安装了"rootfs"分区,没有办法意外地删除 nand 引导数据(mtd0)。

  这是我的分区:

静态结构 MTD_PARTITION AM335x_nand_partitions[]={
/*所有分区大小都以 NAND 块大小的形式列出*/
 {
  .name          ="SPL"、
  .offset        = 0、   /* offset = 0x0 */
  .size          = SZ_128K、
 }、
 {
  .name          ="SPL.Backup1"、
  .offset        = MTDPART_OFS_append、 //偏移= 0x20000 *
  .size          = SZ_128K、
 }、
 {
  .name          ="SPL.Backup2"、
  .offset        = MTDPART_OFS_append、 /* offset = 0x40000 */
  .size          = SZ_128K、
 }、
 {
  .name          ="SPL.backup3"、
  .offset        = MTDPART_OFS_append、 //偏移= 0x60000 *
  .size          = SZ_128K、
 }、
 {
  .name          ="U-Boot"、
  .offset        = MTDPART_OFS_append、  //偏移= 0x80000 *
  .size          = 15 * SZ_128K、
 }、
 {
  .name          ="U-Boot Env"、
  .offset        = MTDPART_OFS_append、  //偏移= 0x260000 *
  .size          = 1 * SZ_128K、
 }、
 {
  .name          ="徽标"、
  .offset        = MTDPART_OFS_append、  //偏移= 0x280000 *
  .size          = 3 * SZ_1M、
 }、
 {
  .name          ="内核"、
  .offset        = MTDPART_OFS_append、  //偏移= 0x580000 *
  .size          = 5 * SZ_1M、
 }、
 {
  .name          ="文件系统"、
  .offset        = MTDPART_OFS_append、  //偏移= 0xa80000 *
  .size          = MTDPART_SISAL_FULL、
 }、
};

   除非我故意发出"flash_erase"命令。在这种情况下、我当然没有这样做。

   我不明白 MLO 数据是如何被破坏的。

  这种情况非常罕见。但一旦发生。这是一个严重的问题、导致产品无法长时间启动。

 问题2:

 AM3354 + 4.4内核(03.02.00.05处理器 SDK)

 情况稍有不同。

 我们每天都会使用此产品。

 一天。 我们将其关闭、然后在第二天将其打开。

  发现 uImage 丢失。

 U-boot 正在打印错误消息、例如:

  bootm 命令的映像格式错误
  错误:无法获取内核映像!

 也很罕见。只发生了一次。

 分区是类似的。这次只在 DTS 中。

  分区@0{
   标签="NAND.SPL";
   REG =<0x00000000 0x000020000>;
   只读;
  };
  分区@1{
   标签="NAND.SPL.Backup1";
   REG =<0x00020000 0x00020000>;
   只读;
  };
  分区@2{
   标签="NAND.SPL.Backup2";
   REG =<0x00040000 0x00020000>;
   只读;
  };
  分区@3{
   标签="NAND.SPL.backup3";
   REG =<0x00060000 0x00020000>;
   只读;
  };
  分区@4{
   标签="NAND.u-BOOT";
   REG =<0x00080000 0x001E0000>;
   只读;
  };
  分区@5{
   标签="NAND.u-boot-env";
   REG =<0x00260000 0x00020000>;
   只读;
  };
  分区@6{
   标签="NAND.LOGO ";
   REG =<0x00280000 0x00300000>;
   只读;
  };
  分区@7{
   标签="NAND.kernel";
   REG =<0x00580000 0x00500000>;
   只读;
  };
  分区@8{
   标签="rootfs";
   REG =<0x00A80000 0x3F580000>;
  };

 并且没有故意擦除 MLO 和 u-boot 等的 MTD 块。

 我不知道 问题1和问题2 是否相关。

 但 问题1和问题2在本质上可能是相同的问题?

 你们能帮我检查可能的原因是什么?

 现在、我对如何解决这个问题的想法已经不多了。 甚至是如何重新产生问题...

谢谢

延东

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

    您好!

    您是否在使用最新的 PSDK 4.02时发现了此问题?
    请查看这些 wiki 页面以了解更多信息:
    processors.wiki.ti.com/.../Linux_Core_NAND_User's_Guide
    processors.wiki.ti.com/.../Linux_Core_U-Boot_User's_Guide
    这个主题可以为您提供一些想法:
    e2e.ti.com/.../633471

    希望这对您有所帮助。

    BR
    玛格丽塔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Margarita
    否、我们不在我们的产品上使用 SDK 4.02。
    我怀疑没有任何内核配置错误导致 this.cause 我们使用不同版本的内核、但仍然有类似的奇怪问题。

    我之前已经阅读过 wiki 页面。
    我将研究您提到的主题。

    真正奇怪的是、与通常出现的其他 nand 引导问题不同。
    这个问题真的很少见。
    我们已经在不同的内核上运行 AM3354一段时间了。
    这只发生了一次...

    真正的挑战是、即使我打算这样做、我也无法重现问题。 这意味着我做了什么...我无法证明我做了什么是对的或错的...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我注意到 MLO 有备份分区。
    在主 MLO 分区为空时 ROM 可以访问该分区
    因此、我使用地址0x20000 0x40000 0x60000对 Nand 闪存进行了编程、以用于备份 SPL。

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

    您可以尝试一下。

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

    我要关闭此主题。

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的
    我无论如何都不能再现这种现象。
    谢谢 Margarita。