Unable to get the boot process working.

I’m having an issue just getting things to boot on a BBB.

I downloaded u-boot from https://openbeagle.org/beagleboard/u-boot, switched to v2022.04-bbb.io-am335x-am57xx, and cross compiled it. After installing, I end up with the following on a 4GB SD card.

$ tree /mnt/sdc1
/mnt/sdc1
├── MLO
└── u-boot.img

The second partition contains my Gentoo installation.
$ tree -L 1 /mnt/sdc2
/mnt/sdc2
├── bin → usr/bin
├── boot
├── dev
├── etc
├── home
├── lib → usr/lib
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin → usr/bin
├── stage3-armv7a_hardfp-openrc-20260401T224629Z.tar
├── sys
├── tmp
├── usr
└── var

The boot directory on sdc2 has these files.
$ tree boot
boot
├── am335x-boneblack.dts
├── uImage
├── uboot
└── zImage

The kernel images were cross compiled with the load address of 0x82000000using tag 6.18.21-bone26 and omap2plus_defconfig.

The problem is when I power the BBB, I’m not seeing any signs of life other than a solid blue light between the 5V and Ethernet. I insert the SD card into the BBB, press the boot button, insert power via USB client, and depress the boot button. I also have minicom connected to /dev/ttyS0 (/etc/inittab has ttyS0 and 115000) but not seeing anything.

I just don’t see anything happening and was hoping to get some advice. Any thoughts as to what I might be doing wrong?

You should use: MLO && u-boot-dtb.img

and then just use dd.

dd offset: Making sure you're not a bot!

You don’t need the load address anymore, we ship the rcn-ee_defconfig

You’ll need am335x-boneblack.dtb (compiled) not am335x-boneblack.dts (source..)

Share your serial log, SPL should have had atleast loaded..

With nothing, you should at-least get a string of CCC's… check your RX/TX/GND lines on J6 header… make sure your user is in ‘dialout’… Making sure you're not a bot! the SC0889 from Raspberry Pi is a good serial adapter, available everywhere.. https://www.digikey.com/en/products/detail/raspberry-pi/SC0889/17877576

Regards,

1 Like

It’s now called u-boot-dtb.img. I didn’t use dd because I’m copying it to /dev/sdc1, unlike the install-am335x-am57xx.sh script which copies to /dev/sdc. I’m not clear on why it’s not copying to a partition. I did try it and got output in the serial terminal, but didn’t understand it since the OS is not there.

I tried the u-boot/build-am335x.sh script with minor mods to build and that seems to have built fine.

Thanks, changed that to am335x-boneblack.dtb.

I received the SC0889 and now see a string of CCC’s when connecting in the terminal. My first partition appears as:

$ tree sdc1
sdc1
├── MLO
└── u-boot-dtb.img

I insert the sdcard, press the boot button, insert power, the depress boot button, but still nothing. My 32GB sd card appears as:

$ sudo parted -s /dev/sdc print
Model: Mass Storage Device (scsi)
Disk /dev/sdc: 31.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
1      512B    16.7MB  16.7MB  primary  fat32        boot, lba
2      16.8MB  31.9GB  31.9GB  primary  ext4

Thoughts?

Use dd vs fat32 the ‘partition’ has to be 100% correct to be loaded by the bootrom, it’s just better/easier to just dd and leave a hole at the start of the partition..

This is what’s confusing me. This says what’s easier, but not what’s wrong w/ what I’m doing. My understanding is there are supposed to be 2 partitions, one for MLO and the u-boot-dtb.img, and a second partition containing the root file system.

However, if I zero out the card and then dd MLO and u-boot-dtb.img to /dev/sdc, this will get me a bunch of output like below:

CPU  : AM335X-GP rev 2.1
Model: TI AM335x BeagleBone Black
DRAM:  512 MiB
Reset Source: Power-on reset has occurred.
RTC 32KCLK Source: External.
Core:  150 devices, 14 uclasses, devicetree: separate
WDT:   Started wdt@44e35000 with servicing (60s timeout)
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
Loading Environment from EXT4… ** No partition table - mmc 0 **
Board: BeagleBone Black
 not set. Validating first E-fuse MAC
BeagleBone Black:
BeagleBone Cape EEPROM: no EEPROM at address: 0x54
BeagleBone Cape EEPROM: no EEPROM at address: 0x55
BeagleBone Cape EEPROM: no EEPROM at address: 0x56
BeagleBone Cape EEPROM: no EEPROM at address: 0x57
Net:   eth2: ethernet@4a100000, eth3: usb_ether
Press SPACE to abort autoboot in 0 seconds
board_name=[A335BNLT] …
board_rev=[00C0] …
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
Couldn’t find partition 0:2 0x82000000
Can’t set block device
Couldn’t find partition 0:2 0x82000000
Can’t set block device
switch to partitions #0, OK
mmc0 is current device
** No partition table - mmc 0 **
Couldn’t find partition mmc 0:1
gpio: pin 56 (gpio 56) value is 0
gpio: pin 55 (gpio 55) value is 0
gpio: pin 54 (gpio 54) value is 0
gpio: pin 53 (gpio 53) value is 1
switch to partitions #0, OK
mmc0 is current device
gpio: pin 54 (gpio 54) value is 1
** No partition table - mmc 0 **
Couldn’t find partition mmc 0:1
Checking for: /uEnv.txt …
** No partition table - mmc 0 **
Couldn’t find partition mmc 0:1
Checking for: /boot/uEnv.txt …
** No partition table - mmc 0 **
Couldn’t find partition mmc 0:1
** No partition table - mmc 0 **
Couldn’t find partition mmc 0:2
** No partition table - mmc 0 **
Couldn’t find partition mmc 0:3

…


But then, where is my file system located? Am I supposed to put MLO and the image at / of the file system, tar the entire thing up and dd it all over?

Start your first real partition 4mb into the drive…

See my example with genimage here..

output from another booting image:

voodoo@21-am335x-bbb:~$ sudo sfdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.72 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x67bb45ba

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *       8192    81919    73728   36M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        81920  1130495  1048576  512M 82 Linux swap / Solaris
/dev/mmcblk0p3      1130496 62333918 61203423 29.2G 83 Linux

Layout created on the daily images what is passed thru sfdisk:

sfdisk: [sfdisk from util-linux 2.41]
sfdisk: [--force --wipe-partitions always /var/lib/jenkins/workspace/debian-armhf-13-base-v6.19-am335x/deploy/debian-13.4-base-v6.19-armhf-2026-04-08/am335x-debian-13.4-base-v6.19-armhf-2026-04-08-4gb.img]
sfdisk: [4M,36M,0xC,*]
sfdisk: [40M,512M,0x82,-]
sfdisk: [552M,,,-]

u-boot is just looking for /boot/uEnv.txt with something like, in any of the first 4 partitions..

console=ttyS0,115200n8
cmdline=fsck.repair=yes earlycon coherent_pool=1M net.ifnames=0
uname_r=6.12.79-bone52

For example (ext4) is the third partition, but u-boot access everything from it for figuring out what load..

voodoo@21-am335x-bbb:~$ ls -lh /boot/uEnv.txt 
-rw-r--r-- 1 voodoo voodoo 2.1K Apr  6 10:58 /boot/uEnv.txt
voodoo@21-am335x-bbb:~$ lsblk | grep mmcblk0
mmcblk0      179:768  0  29.7G  0 disk 
├─mmcblk0p1  179:769  0    36M  0 part /boot/firmware
├─mmcblk0p2  179:770  0   512M  0 part [SWAP]
└─mmcblk0p3  179:771  0  29.2G  0 part /
voodoo@21-am335x-bbb:~$ ls -lh /boot/vmlinuz-6.12.79-bone52 
-rwxr-xr-x 1 root root 8.5M Apr  3 11:52 /boot/vmlinuz-6.12.79-bone52
voodoo@21-am335x-bbb:~$ ls -lh /boot/dtbs/6.12.79-bone52/am335x-boneblack.dtb 
-rw-r--r-- 1 root root 98K Apr  6 10:58 /boot/dtbs/6.12.79-bone52/am335x-boneblack.dtb
voodoo@21-am335x-bbb:~$ cat /etc/fstab | grep mmc
/dev/mmcblk0p3  /  ext4  noatime,errors=remount-ro  0  1
/dev/mmcblk0p1  /boot/firmware vfat user,uid=1000,gid=1000,defaults 0 2
/dev/mmcblk0p2       none    swap    sw      0       0

Still trying to get things to boot and I have this question …

Question, if I don’t add the loadaddr when cross-compiling … from this …

$ make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- -j8 uImage dtbs \ LOADADDR=0x82000000

… to this …

$ make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- -j8 uImage dtbs

I get the following:

$ make ARCH=arm CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- -j8 uImage dtbs
CALL scripts/checksyscalls.sh
Kernel: arch/arm/boot/Image is ready
Kernel: arch/arm/boot/zImage is ready
multiple (or no) load addresses:
This is incompatible with uImages
Specify LOADADDR on the commandline to build an uImage
make[2]: *** [arch/arm/boot/Makefile:83: arch/arm/boot/uImage] Error 1
make[1]: *** [arch/arm/Makefile:300: uImage] Error 2
make: *** [Makefile:248: __sub-make] Error 2

So … is it ok that I leave loadaddr in even though it’s not needed?

Stop building uImage, we patched u-boot over 10 years ago to support zImage out of the box.

I think the problem is mlo and uboot need to be at specific offsets in the device, with dd you can do raw writes at specific offsets. It looks like you have put mlo and uboot in a file structure, and that can be at any offset, and it can move arround, and the file structure will work, but the device booting won’t find them except at specific offsets. It’s only when uboot full is runing, that it understands file systems, and how to load the kernel and device tree.

I’ve been working on getting Gentoo running (the wiki’s I’ve been following are old and outdated), and finally did get this kernel to boot with a valid uEnv.txt. Now the issue I’ve got is after the kernel boots, it locks up as if it didn’t pivot over to the rootfs.

I did want to do the writing with dd but still haven’t quite figured the addressing out. So till I get dd working in that way, I zero out, then format two partitions, and copy files over with a script. Slowly getting there.

1 Like

You should be able to login in on the emergency console, if it hasn’t yet pivoted (chroot) out of the ramfs. At least then you can check that the “disks” are found and thay they have valid file systems on them. Alas you’ll need to understand the low level unix commands - I hope that not a problem.