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/AM3352:SPI 引导

Guru**** 2583445 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/630969/linux-am3352-spi-boot

器件型号:AM3352

工具/软件:Linux

您好!

我想使用不带 SD 卡插槽的 AM335x GP-EVM 运行 SPI 引导 、因为我的目标板没有 SD 卡插槽。  我使用的是 PSDK-Linux v4.0.0。

我使用 AM335x_EVM_spiboot_defconfig 构建了 mLo.byteswap 和 u-boot.img、并使用 StarterWare 的 SPI 闪存写入器程序将其写入 SPI 闪存。

http://processors.wiki.ti.com/index.php/AM335X_StarterWare_Booting_And_Flashing#Booting_Via_SPI

看起来 u-boot 运行正常、但我无法启动内核。 要将内核与 SPI 闪存连接并输入"run spirboot"、它会在"starting kernel..."停止。

我想有些 u-boot 环境变量不合适。 'spiimgsize' 为0x362000、但通过 TFTP 的 zImage 为0x36d548。 我应该为"spiimgsize"设置什么?

此外、由于'sprrcaddr'为0xe0000、以下擦除命令是否更好地输入{$spisrcadr}而不是80000?

http://processors.wiki.ti.com/index.php/Linux_Core_U-Boot_User%27s_Guide#Writing_to_SPI_from_U-Boot

我附加了 bootlog。 请给我一些建议。 我希望也能提供有关将 DTB 和 targetfs 准备到 SPI 闪存的信息。

此致、
Kazu

e2e.ti.com/.../4338.bootlog.txt

我希望有有关 dtb 和 targetfs 的信息。

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

    我们将对此进行研究。 反馈将发布在此处。

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

    Yordan、您好!

    感谢你的答复。 我将擦除命令的起始地址设置为0xe00000、与'sprrcaddr'相同。 然后、我将"spiimgsize"设置为0x370000、该值大于 zImage。 同样、在 TI wiki 中、我使用 SD 卡插槽将 zImage 写入 SPI 闪存。 但内核引导已停止。

    我认为仅使用'run spirboot'进行 SPI 引导是不够的。 如何为引导内核设置 uboot 环境变量? 我希望也能提供有关将 DTB 和 targetfs 准备到 SPI 闪存的信息。

    此致、
    Kazu

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

    Yordan、

    通过将 DTB 写入 SPI 闪存、内核开始引导、尽管它以"Kernel Panic"停止。 因为我尚未设置 rootfs。

    根据以下文件、似乎没有用于 DTB 的空间。 暂时、我将64 KB 区域中的 DTB 从0x090000写入0x0A00000。 这是​​u-boot 区域的底部。

    u-boot/include/configs/am335x_evm.h
    /*
    *默认为对环境等使用 SPI
    * 0x000000 - 0x020000:SPL (128KiB)
    * 0x020000 - 0x0A0000:U-Boot (512KiB)
    * 0x0A0000 - 0x0BFFFF:U-Boot 环境(128KiB)的第一个副本
    * 0x0C0000 - 0x0DFFFF:U-Boot 环境的第二个副本(128KiB)
    * 0x0E0000 - 0x442000:Linux 内核
    * 0x442000 - 0x800000:userland
    *

    我在将 MLO 和 u-boot 写入 SPI 闪存后更改了一些 u-boot 环境变量。

    ENV 默认-f -a
    setenv spisrcadr 0xe0000
    setenv spiimgsize 0x370000
    setenv spiboot "从 SPI 引导回波...;"运行 spiargs;" SF 探测器${spibusno}:0;" SF 读取${fdtaddr}0x090000 0x10000;" SF 读取${loadaddr}${spisrcaddr}${spimgsize};" bootz ${loadaddr}-${faddr}"
    保存

    然后、我将 DTB 和 zImage 写入 SPI 闪存。

    加载 MMC 0:2 ${loadaddr}boot/AM335x-evm.dtb
    SF 写入${loadaddr}0x90000 ${filesize}

    SF 擦除${spisrcadr}+${spimgsize}
    加载 MMC 0:2 ${loadaddr}boot/zImage
    SF 写入${loadaddr}${spisrcadr}${filesize}

    最后、我关闭并再次打开 EVM 的电源、并输入"run spirboot"。

    我已连接引导日志。 如果您对这些更改有一些建议、请告诉我。

    此外、在每次处理 saveenv 后、内核都不会启动。 换言之,"正在启动内核..." 不显示。 我需要重写 zImage 以启动 SPI 引导。 我不理解这个原因。

    此致、
    Kazu

    e2e.ti.com/.../0435.bootlog2.txt

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

    Kazu、

    我查看了您的最新引导日志,并确认内核严重错误是由于在 SPI 闪存芯片中查找 rootfs 而导致的,但 rootfs 分区(dev/mtdblock4)不存在

    内核命令行:console=ttyO0、115200n8 root=/dev/mtdblock4 rw rootfstype=jffs2

    VFS:无法打开根设备"mtdblock4"或未知块(0、0):错误-19

    [1.852945]  请附加正确的"root="引导选项;以下是可用分区:

     

    此处最重要的变量是 spiroot spirootfstype。 您应该在内核中启用 mtbblocks。

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

     

     

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

    Pavel、

    感谢您的信息。

    您建议的以下主题对我有所帮助。 我能够使用 GP-EVM 检查 SPI 闪存引导和 NFS 装载的操作。

    https://e2e.ti.com/support/embedded/linux/f/354/t/579034

    此外、我在发出 saveenv 时发现了 zImage 损坏的原因。 这是 AM335x_EVM.h 的注释错误

    此致、
    Kazu

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

    Kazu、

    很高兴看到您已修复它。 您能否关闭/验证/解决此主题?

    此致、
    帕维尔