Hi,
Thank you for that clarification.
Does the boot modes (if altered) survive if the power is removed and
reapplied?
Well they go back to factory default..
This is why every "flashing" guide says pull the power.. As weird
things happen when you "soft" reboot after flashing the eMMC...
The uEnv.txt is located in the boot partition, on both eMMC and uSD
card.
What line specifies in wich order to boot?
In most cases it's more then just "one" line..
I was wondering why the default is to first try eMMC even when an uSD
card
is detected.
Because you are over thinking it. The bootrom is "simple" and it is
setup to read the eMMC first.
Here's the boot order:
bootrom loads MLO from eMMC (if that fails it moves to microSD (hence
dd if=/dev/zero to eMMC makes booting from microSD work..)
MLO loads u-boot.img from eMMC
u-boot.img first looks at microSD for uEnv.txt, reads that file in.
Hey Robert,
Now you have confused me and I thought I understood how the boot process
worked.
If the boot button isn¹t pressed, bootrom loads MLO from eMMC and this
loads u-boot from eMMC. I¹m unaware of bootrom loading MLO from SDCard if
> MLO is missing from eMMC. Do you have a reference for this? Also, I¹m
unaware of MLO loading u-boot from SDCard if u-boot is missing from eMMC.
Do you have a reference for this?
This why when you dd if=/dev/zero of=/(eMMC) it will always boot from microSD..
Page 6:
https://github.com/CircuitCo/BeagleBone-Black/blob/master/BBB_SCH.pdf
uSD Boot grounds SYS_BOOT3:
SYSBOOT:
11100b : MMC1, MMC0, UART0, USB0
11000b : SPI0, MMC0, USB0, UART0
where: MMC1 = eMMC & MMC0 = microSD
If the bootloader doesn't find the magic header in MLO, it moves on to
the next boot device..
it's old, but they talk about it here too:
http://omappedia.org/wiki/Bootloader_Project#First_Stage_Boot
The only option to load from SDCard if
it exists is in the u-boot environment bootcmd which is here:
bootcmd=gpio set 53; i2c mw 0x24 1 0x3e; run findfdt; mmc dev 0; if mmc
rescan ;then echo micro SD card found;setenv mmcdev 0;else echo No micro
SD card found,
setting mmcdev to 1;setenv mmcdev 1;fi;setenv bootpart ${mmcdev}:2;mmc
dev ${mmcdev}; if mmc rescan; then gpio set 54; echo SD/MMC found on
device ${mmcdev};if
run loadbootenv; then echo Loaded environment from ${bootenv};run
importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run
uenvcmd;fi;gpio set 5
5; if run loaduimage; then gpio set 56; run loadfdt;run mmcboot;fi;fi;
So mmcdev=0 if the SDCard is installed and mmcdev=1 if the SDCard in
missing, so bootpart=0:2 if the SDCard is installed and bootpart=1:2 if
the SDCard is missing. If the SDCard is installed, uEnv.txt is loaded from
the SDCard, which is where all the customization takes place.
Look closely, there's actually an annoying bug in that... it's only
checking for the existence of mmcdev 0, so if you have a blank card it
gets stuck...
I have mine setup as the following..
+ "mmc dev 0; if mmc rescan ; then " \
+ "gpio set 54; " \
+ "setenv mmcdev 0; " \
+ "echo SD/MMC found on device ${mmcdev}; " \
+ "if run loadbootenv; then " \
+ "run importbootenv; " \
+ "fi; " \
+ "gpio set 55; " \
+ "echo Checking if uenvcmd is set ...;" \
+ "if test -n $uenvcmd; then " \
+ "gpio set 56; " \
+ "echo Running uenvcmd ...; " \
+ "run uenvcmd;" \
+ "fi; " \
+ "echo; echo uenvcmd was not defined in uEnv.txt ...;
echo trying eMMC (BeagleBone Black) ...; echo;" \
+ "fi;" \
+ "mmc dev 1; if mmc rescan ; then " \
+ "gpio set 54; " \
+ "setenv mmcdev 1; " \
+ "echo SD/MMC found on device ${mmcdev}; " \
+ "if run loadbootenv; then " \
+ "run importbootenv; " \
+ "fi; " \
+ "gpio set 55; " \
+ "echo Checking if uenvcmd is set ...;" \
+ "if test -n $uenvcmd; then " \
+ "gpio set 56; " \
+ "echo Running uenvcmd ...; " \
+ "run uenvcmd;" \
+ "fi; " \
+ "echo; echo uenvcmd was not defined in uEnv.txt ...;
echo halting ...; echo;" \
+ "fi;" \
This way you can have a card in the microSD (blank/formated/etc..) and
the only way to boot it is with "uenvcmd" set somewhere.. Of course it
can still lockup if the eMMC's uenvcmd is also not set..
Regards,