为 BBG 构建内核后无法启动(使用 microSD)

Not able to boot after building kernel for BBG (using microSD)

我的目标是为 BeagleBone Green 交叉编译新的 Linux 内核。我已成功完成所有步骤 构建和部署内核所需的内容。

使用以下教程 https://embedjournal.com/kernel-compilation-beaglebone-black/

我有一张带有 rootfs 和 BOOT 分区的 microSD 卡。 rootfs 有内核模块,BOOT 有 MLO、u-boot.img、uImage 和 uEnv.txt.

将SD卡放入BBG并按下S2键后,LED不闪烁。 但是,当我按下电源按钮时,LED 开始闪烁,但 BBG 没有随之启动。

所以我的问题是我是否需要 OS 已经刷入 BBG 内部 eMMC 然后 插入内置内核的SD卡?

或者是什么都不进BBG然后插上准备好的SD卡开机就可以了

我的第二个问题-这里需要USB转串口线吗? 我没有使用 USB 转串口线。

根据你的描述很难判断。你必须按住 'S2',同时将电源连接到 BBB,以便 ROM 加载器查看 SD 卡 MLO/SPL。

是的,3.3V 电平的 USB 串行(UART,"FTDI")电缆(在 BBB 的情况下)对于低电平嵌入式工作是必不可少的。特别是在使用引导加载程序或内核时。在这种情况下,它将允许您查看在哪个阶段遇到问题:MLO、U-Boot 或内核,然后进一步处理它。

所以第一个问题的答案是没有必要有一个带有闪烁图像的BeagleBone。 将准备好的SD卡插入SD卡槽即可开机

通过准备好的 SD 卡启动...

  1. 连接期间按住电源按钮。
  2. 使用 'dmesg | grep tty' 检查显示了哪个 ttyX(控制台端口)。
  3. 在您的终端中,键入 'sudo screen /dev/ttyX 115200'(此处 X 将是您的控制台端口号)。

您现在应该可以登录您的手臂设备了。

第二个问题的答案是这里不需要USB转串口线。 这是可选的。

您需要将 FTDI 电缆连接到 BBG 上的接头 J1 以便进行串行调试以查看引导期间发生的情况、查看内核启动时发生的情况以及控制 u-boot。澄清一下,在为设备接通电源时按住 S2 以从(可引导的)SD 卡引导。除非你擦掉它,否则 BBG 的 eMMC(on board storage) 已经包含 u-boot.img 和 MLO。当您启动并按住 S2 时,uboot(在 eMMC 上)知道从 sdCard 启动。如果要更改u-boot.img或者MLO文件,就得用dd命令写入到BBG的eMMC中。

我使用 TFTP 和通过 NFS 挂载的 rootfs 在我的 BBG 上远程启动 x 编译的内核。

"do I need to have an OS already flashed to the BBG internal eMMC and then insert a SD card which has the built kernel?" 答:不可以。除了 BIOS 和辅助引导加载程序(其他所有内容都是远程的)之外,可以在没有任何内容的情况下引导 BBG。如果您完全无法启动 BBG,您应该将 BB 网站上的最新 OS 映像放到 SD 卡上,然后从中启动以重新启动。

如果您有任何问题,请告诉我。

编辑:我使用 minicom 进行串行调试

编辑 2:除非绝对必要,否则我强烈建议您不要擦除整个 MMC

了解“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 将其显示为底层 HW(硬件)层。我将只介绍 MMC 和 SD,有关详细信息,请阅读 TRM。

但是为什么我不按开机键就从SD启动?
或者:U-Boot也有选择

这很复杂。有多种方式™

  1. 最重要的是它会先检查eMMC,如果它在一些神奇的位置找到了SPL,它就会执行它然后执行U-Boot
  2. 如果它在 eMMC 上没有找到任何东西,那么它会检查是否有插入的 SD 卡并按上述方式继续。如果它在 SD 上找不到 SPL,它也会尝试 USB 模式和 UART0。
  3. 一旦 U-Boot 接管,它就会遵循自己的逻辑,可能会被 uEnv.txt 修改。这听起来很无辜,但这意味着即使 U-Boot 是从 eMMC(优先级!)加载的,它仍然可以确定插入了 SD 卡并从那里加载 Linux 内核! 很可能发生在@shreeya-patel 身上的事情

答案一: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 适配器。

大量简单但非常有价值的内省使其变得必不可少。它会让您更好地理解事物、更快地进步并设计更可靠的系统。