Flashing Beaglebone with a custom image problem

I am using Yocto to generate a customized Linux version for my BeagleBone board.

I can flash this image to the internal emmc on the board via an external SD card and it runs fine. In order to flash it, I hold down the boot button when the board boots up, which flashes the image from the SD card onto the internal emmc memory.

The one problem however I have now is that if I want to re-flash another custom image after this onto the board the same way, it doesn’t work unless I first flash a default Debian image for the BeagleBone (provided on the BeagleBone site).

Would anyone know why this is, or have some way to try to solve it?

My understanding is that the ROM bootlader provided by TI is the very first thing to get executed when the board starts and this code never changes. This ROM bootlader checks if the boot button is pressed and decides where to boot from.

Why would it make a difference which kernel version is currently flashed on the board, and why is it only working when a default Debian image is loaded on there first and not my customized Yocto image? Many thanks in advance for any help.

Hello,

Packtpub.com has a few books on sale regarding Yocto Project. E-books are $5.00 today for some reason. Enjoy.

Seth

P.S. I know it is not easy dealing w/ Yocto at times. I think this is why using a book as a platform may be useful. Please let me know what you find. Oh and here is an “updated” version of a Yocto Book on PacktPub.com ----> https://www.packtpub.com/virtualization-and-cloud/embedded-linux-development-using-yocto-project-cookbook-second-edition.

I am using Yocto to generate a customized Linux version for my BeagleBone
board.

I can flash this image to the internal emmc on the board via an external SD
card and it runs fine. In order to flash it, I hold down the boot button
when the board boots up, which flashes the image from the SD card onto the
internal emmc memory.

The one problem however I have now is that if I want to re-flash another
custom image after this onto the board the same way, it doesn't work unless
I *first* flash a default Debian image for the BeagleBone (provided on the
BeagleBone site).

Would anyone know why this is, or have some way to try to solve it?

It's probably an issue with the boot loader. Hook up a serial console
to see what's going on. Pause U-Boot when prompted (hit a key) and
dump the environment (printenv).

My understanding is that the ROM bootlader provided by TI is the very first
thing to get executed when the board starts and this code never changes.
This ROM bootlader checks if the boot button is pressed and decides where
to boot from.

Why would it make a difference which kernel version is currently flashed on
the board, and why is it only working when a default Debian image is loaded
on there first and not my customized Yocto image? Many thanks in advance
for any help.

The kernel version shouldn't matter, but the BBB boot loaders have at
various times been setup to look for files like uEnv.txt in various
places. I suspect the U-Boot installed on the uSD is seeing something
on the programmed eMMC that it doesn't like and/or breaks the boot
sequence.

Hello,

Charles is right. It could just be the u-boot version on your eMMC that is outdated.

Seth

P.S. https://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays will show you how to update your eMMC bootloader on the eMMC if it is needed. If you are using an SD Card, just write a new image to the eMMC or use, if you do not mind erasing the eMMC, a terminal command to erase it.