【问题标题】:Not able to boot after building kernel for BBG (using microSD)为 BBG 构建内核后无法启动(使用 microSD)
【发布时间】:2019-01-18 21:12:33
【问题描述】:

我的目标是为 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 无法启动。

所以我的问题是,我是否需要已经将操作系统刷到 BBG 内部 eMMC,然后 插入具有内置内核的 SD 卡?

或者没有任何东西进入BBG然后只需插入准备好的SD卡就可以启动它。

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

【问题讨论】:

    标签: linux-kernel cross-compiling boot beagleboneblack beagleboard


    【解决方案1】:

    了解“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 也会做出选择。

    这很复杂。 有很多方法™

    1. 首先它会检查 eMMC,如果它在某些神奇的位置找到 SPL,它将执行它,然后执行 U-Boot
    2. 如果它在 eMMC 上没有找到任何东西,那么它会检查是否有插入的 SD 卡并按上述方法继续。如果在 SD 上找不到 SPL,它也会尝试 USB 模式和 UART0。
    3. 一旦 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 适配器,以方便使用。

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

    【讨论】:

    • @shreeya-patel - 这是否有助于您了解启动过程中发生的情况?
    • 是的,完全!我所有的概念都被清除了。感谢您的完美回答。
    • 嘿,我还有一个问题。我注意到我无法使用 i2cdetect 甚至无法回显 adt7516 0x48 > new_device (给我错误说 new_device 权限被拒绝)。我注意到配置文件中没有启用 I2C 支持。当我在主机上执行“sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-bb.org_defconfig”时,这不会启用 I2C 支持。我应该在这里做什么?有什么建议吗?
    • 我只是用 sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-menuconfig 手动配置来解决的
    【解决方案2】:

    很难从您的描述中看出。您必须在将电源连接到 BBB 时按住“S2”,以便 ROM 加载器查看 SD 卡的 MLO/SPL。

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

    【讨论】:

    • 我向 Robert Nelson 询问了 USB 转串口线的问题,他告诉我没有必要拥有它。此外,S2 按钮不起作用。在连接过程中,我可以通过按住电源按钮来启动。我很快就会发布我的问题的解决方案。谢谢你的回答:)
    • 你不必拥有一个,不。它确实使在您的设备通过 USB 或以太网应答之前发生的启动过程中发生的任何故障都变得异常困难。这就是为什么我将其描述为必不可少的,并且我坚持我的观点。当被问及“您需要 USB 串行电缆来解决引导加载程序和内核引导问题”时,我怀疑 Robert 的看法会有所不同。
    【解决方案3】:

    您需要将 FTDI 电缆连接到 BBG 上的接头 J1 以便进行串行调试以查看启动期间发生的情况、查看内核启动时发生的情况以及控制 u-boot。澄清一下,在插入设备电源的同时按住 S2 以从(可启动)SD 卡启动。除非您擦除它,否则 BBG 的 eMMC(板载存储)已经包含 u-boot.img 和 MLO。当您启动并按住 S2 时,uboot(在 eMMC 上)知道从 sdCard 启动。如果要修改u-boot.img 或MLO 文件,必须使用dd 命令将其写入BBG 的eMMC。

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

    “我是否需要先将操作系统刷入 BBG 内部 eMMC,然后插入具有内置内核的 SD 卡?” 回答:不。除了 BIOS 和辅助引导加载程序(其他一切都是远程的)之外,它可以引导 BBG。如果您完全无法启动 BBG,您应该将 BB 网站上的最新 OS 映像放入 SD 卡并从该 SD 卡启动以重新开始。

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      1. 在连接过程中按住电源按钮。
      2. 使用 'dmesg | grep tty' 检查显示的是哪个 ttyX(控制台端口)。
      3. 在您的终端中,输入“sudo screen /dev/ttyX 115200”(这里的 X 将是您的控制台端口号)。

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

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

      【讨论】:

      • 您的“解决方案”显示出对工作原理的严重误解。它可能对您在您的特定情况下有用,但绝不是回答所提出问题的通用解决方案。它还对 Linux 发行版做出了沉默的假设。我了解您是初学者,但请记住,堆栈溢出问题/答案旨在使处于类似情况的每个人受益。
      • 展开这个:1 - 按住电源按钮无关紧要; 2 - 这仅适用于您的“用户空间”又名 Linux 发行版通过 USB 公开 TTY(如 /dev/ttyUSB0/dev/ttyACM0); 3 - 不是“ttyX”,而是 ttyUSBX 或 ttyACMX;只有当 getty 通过登录进行侦听时,您才能登录,它在 beagleboard.org 图像上会这样做,但不一定在其他图像上。
      • 感谢您的意见。你能告诉我我哪里错了吗?
      • 请避免我之前的评论。感谢您的解决方案。是的,我是初学者,所以在获得解决方案后,我很兴奋并发布了解决方案以帮助他人。如果您不介意,请为这个问题提供一个答案,也许更详细一点,以便对其他人有用,我会接受这个答案。谢谢
      • 对我来说,这与“互联网点”无关;-) 这实际上是关于问题和答案都是有意义的贡献。我会写一个问题的答案,因为我现在对你所追求的东西有了更好的理解。我也可能会尝试通过编辑使您的问题更容易理解。我也曾在你的位置上,所以不要气馁,继续学习新事物。
      猜你喜欢
      • 1970-01-01
      • 2021-07-30
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2019-11-11
      • 1970-01-01
      相关资源
      最近更新 更多