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

时间:2018-08-11 13:51:57

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

我的目标是为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到串行电缆。

4 个答案:

答案 0 :(得分: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将其显示为基础HW(硬件)层。我将只介绍MMC和SD,有关更多详细信息,请阅读TRM。

但是,如果我不按加电按钮,为什么它会从SD引导?
或: U-Boot也会做出选择。

这很复杂。有许多方式™

  1. 首先,它将首先检查eMMC,如果在某些魔术位置找到了SPL,它将执行它,然后将执行U-Boot
  2. 如果在eMMC上找不到任何内容,则它将检查是否插入了SD卡,并按上述步骤进行操作。如果在SD上找不到SPL,它将尝试USB模式和UART0。
  3. 一旦U-Boot接管它,它就会遵循自己的逻辑,可能会被uEnv.txt修改。这听起来很纯洁,但这意味着即使从eMMC加载了U-Boot(优先级!),它仍然可以确定已插入SD卡,并且将从那里加载Linux内核! 最有可能发生在@ shreeya-patel

答案1:eMMC可以为空

为避免这种容易造成混淆的情况,通常有助于擦除eMMC以减少可能引起混乱的变量数量。最简单的方法是从SD卡启动最新的beagleboard.org映像并执行sudo blkdiscard /dev/mmcblk1。这将擦除eMMC中的所有内容。结果是,对于普通用户,该行为减少为:它将始终尝试从SD卡读取所有内容。如果SPL,U-Boot或内核出现问题,则引导将可重复地失败。

我已经允许自己进行一些简化和小的遗漏。随意提问,但也可以考虑阅读这些主题。

我需要USB到串行适配器吗?

如果一切都正确完成,并且系统启动正常,至少可以通过USB,以太网或WiFi与之交互,则不会。

如果由于详细信息而导致启动在任何步骤上失败,那么您很可能无法找出发生了什么情况!这就是这个问题的原因。

我个人将日历中从头开始创建某些东西的日子标记为第一次工作。我想到现在,在很多年后的今天,我可能会有2个如此明显的日子,即使那时,在那些日子里还有其他失败。

这就是为什么我认为USB到串行适配器是必不可少的工具的原因。

此外,在eBay或购物平台之一(例如Aliexpress或Banggood)上最便宜的适配器类型的价格已跌至1欧元/ 1美元以下。我总是有几个备用件,对于经常使用的设备,为了方便起见,我将永久连接调试UART适配器。

简单而又难以置信的内省使其成为必需。它将使您更好地了解事物,更快地进步并设计更可靠的系统。

答案 1 :(得分:0)

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

是的,对于低级嵌入式工作而言,具有3.3V电平的USB串行(UART,“ FTDI”)电缆(对于BBB而言)是必不可少的。 。在这种情况下,它可以让您查看在哪个阶段出现问题:MLO,U-Boot或内核,然后进一步进行处理。

答案 2 :(得分:0)

您需要一条FTDI电缆连接到BBG上的接头J1上,以便进行串行调试,以查看引导过程中发生的情况,查看内核启动时发生的情况以及控制u-boot。为了清楚起见,在插入设备电源以从(可引导)SD卡引导时按住S2。除非您擦除它,否则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卡并从中启动以重新启动。

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

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

编辑2:除非绝对必要,否则我不鼓励您擦除整个MMC

答案 3 :(得分:-1)

因此,第一个问题的答案是,没有必要在其中包含带有闪烁图像的BeagleBone。 只需将准备好的SD卡放入SD卡插槽,即可启动它。

要通过准备好的SD卡引导...

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

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

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