了解“S2”按钮如何改变 Beaglebone 型 AM335x 板的行为非常重要:
接通电源后,AM335x SoC 会“查看”它的几个连接引脚,其中一个引脚通过标有“S2”的按钮。它只执行一次,并且在断电之前行为保持不变。
- 如果在开机时按下“S2”,那么它会首先查看micro-SD插槽。更准确地说,它会尝试以下操作:SPI、micro-SD、USB、UART。
- 如果开机时未按“S2”,则先查看eMMC。更准确地说,它会尝试以下操作:eMMC、micro-SD、UART、USB
[请注意,“USB”是一种特殊的设备模式,并不意味着可以直接从 USB 大容量存储启动!]
但“它看着 X”是什么意思?
这意味着内部最小引导代码寻找引导加载程序的来源。这通常被称为 MLO 或 SPL 或 X-Loader。这是加载主引导加载程序的第一阶段,在本例中为 U-Boot。
提供 SPL 的方法有很多。 AM335x Technical Reference Manual (revision P) 第 26.1.2 章“架构”,图 26-1 将其显示为底层硬件(硬件)层。我只会介绍 MMC 和 SD,有关详细信息,请阅读 TRM。
但是为什么我在开机时不按按钮,它会从 SD 启动呢?
或者: U-Boot 也会做出选择。
这很复杂。 有很多方法™。
- 首先它会检查 eMMC,如果它在某些神奇的位置找到 SPL,它将执行它,然后执行 U-Boot
- 如果它在 eMMC 上没有找到任何东西,那么它会检查是否有插入的 SD 卡并按上述方法继续。如果在 SD 上找不到 SPL,它也会尝试 USB 模式和 UART0。
- 一旦 U-Boot 接管它就会遵循自己的逻辑,可能会被
uEnv.txt 修改。这听起来很无辜,但它的意思是,即使 U-Boot 是从 eMMC 加载的(优先级!),它仍然可以确定插入了 SD 卡并从那里加载 Linux 内核! @shreeya-patel 很可能发生了什么
答案1:eMMC可以为空
为了避免这种容易混淆的情况,擦除 eMMC 以减少可能造成混乱的变量的数量通常会有所帮助。最简单的方法是从 SD 卡启动最近的 beagleboard.org 映像并执行 sudo blkdiscard /dev/mmcblk1。这将从 eMMC 中删除所有内容。结果是对于普通用户而言,行为减少为:它总是会尝试从 SD 卡中读取所有内容。如果 SPL、U-Boot 或内核出现问题,则引导将重复失败。
我允许自己进行一些简化和小疏忽。随意提问,但也可以考虑阅读这些主题。
我需要 USB 转串口适配器吗?
如果你把一切都 100% 正确并且系统启动得非常好,至少你可以通过 USB、以太网或 WiFi 与之交互。
如果由于最细微的细节导致任何步骤启动失败,您很可能无法查明发生了什么!这就是提出这个问题的原因。
就我个人而言,我在我的日历中标记了我从头开始创建东西的日子,并且它第一次工作红色。我想我现在可能有 2 个这样的标志性日子,在很多年里,即使在那些日子里,也有其他的失败。
这就是为什么我认为 USB 转串口适配器是必不可少的工具。
eBay 或 Aliexpress 或 Banggood 等购物平台上最便宜的适配器类型的价格也已降至 1 欧元/1 美元以下。我总是有几个备件,对于我经常使用的设备,我会永久连接调试 UART 适配器,以方便使用。
大量简单但非常有价值的内省使其变得至关重要。它会让您更好地理解事物,更快地进步并设计更可靠的系统。