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

Linux kernel 为BBG构建内核后无法启动(使用microSD),linux-kernel,cross-compiling,boot,beagleboneblack,beagleboard,Linux Kernel,Cross Compiling,Boot,Beagleboneblack,Beagleboard,我的目标是为BeagleBone Green交叉编译一个新的Linux内核。我已经成功地完成了所有步骤 这是构建和部署内核所需要的 使用以下教程 我有一个带rootfs和引导分区的microSD卡。 rootfs有内核模块,BOOT有MLO、u-BOOT.img、uImage 和uEnv.txt 将SD卡放入BBG并按下S2按钮后,LED不会闪烁。 但当我按下电源按钮时,LED开始闪烁,但BBG不会随之启动 所以我这里的问题是,我是否需要一个操作系统已经闪存到BBG内部eMMC,然后 插入具有

我的目标是为BeagleBone Green交叉编译一个新的Linux内核。我已经成功地完成了所有步骤 这是构建和部署内核所需要的

使用以下教程

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

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

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

或者,在BBG中没有任何内容,然后只需插入准备好的SD卡,我就可以启动BBG了

我的第二个问题-这里是否需要USB到串行电缆?
我没有使用USB到串行电缆。

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


是的,具有3.3V电平的USB串行(UART,“FTDI”)电缆(对于BBB)对于低电平嵌入式工作至关重要。尤其是在使用引导加载程序或内核时。在这种情况下,它将允许您看到在哪个阶段出现问题:MLO、U-Boot或内核,然后进一步处理它。

因此,第一个问题的答案是,不需要有一个带有闪烁图像的BeagleBone。 只需将准备好的SD卡放入SD卡插槽,就可以通过它进行引导

用于通过准备好的SD卡引导

  • 在连接过程中按住电源按钮
  • 使用“dmesg | grep tty”检查显示了哪个ttyX(控制台端口)
  • 在终端中,键入“sudo screen/dev/ttyX 115200”(这里X将是您的控制台端口号)
  • 您现在应该能够登录到arm设备

    第二个问题的答案是,这里不需要USB到串行电缆。
    它是可选的。

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

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

    “我是否需要将操作系统闪存到BBG内部eMMC,然后插入具有内置内核的SD卡?” 答:不可以。除了BIOS和辅助引导加载程序外,BBG上没有任何东西可以引导(其他一切都是远程的)。如果您完全无法启动BBG,则应将BB网站上的最新操作系统映像放到SD卡上,然后从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的方法有很多。第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中删除所有内容