5
\$\begingroup\$

tl;dr: Assuming I'd had a BeagleBone perfectly manufactured from the open-source schematics+layouts, what would be necessary to get it to the same level of functionality as a newly-unboxed BeagleBone?

Alternatively, how would one unbrick a BeagleBone that refuses to boot from either flash or eMMC, assuming the hardware was all working perfectly.

Follow-up question is here.


I've been experimenting with basic embedded boards - hand-soldered low-end ARM/AVR processors which are flashed directly.

If I wanted to make a working clone of a BeagleBone, what would be necessary to get it to the level of functionality that they have out-of-the-box?

So after spending ridiculous amounts of time and money on manufacturing a clone of a <$100 off-the-shelf board, what would I then need to do in order to be able to just plug an SD card in, hold down the boot-select button, and boot the board off the SD card?

I'm assuming that before U-boot on the SD-card / eMMC is invoked, there is an earlier bootloader which is flashed onto the Sitara.

So the order would be:

  1. Image on Sitara is run from flash, and configures a serial UART interface, external hardware, etc.

  2. Depending on state of boot selection button, that image either loads U-boot from eMMC, or from SD card, and jumps to it.

  3. U-boot then loads kernel and initrd, passes device-tree data and command-line to it, then jumps into it.

  4. Linux boots

  5. "Profit!"

On these more complex boards, how would that first-stage bootloader be flashed on? How could I use a BeagleBone to develop and test my own first-stage bootloader?


Ok, I've found that there is some ROM code on the Sitara, which checks a few bytes on the eMMC and boots if it appears valid. It checks the SD card if the eMMC doesn't appear valid.

My question now, which I will re-ask as a separate question: Does this ROM code come on the Sitara itself, or otherwise how would one obtain and flash it? Is it open source? Is it a binary blob in the Sitara SDK? Is it immutable and built into the Sitara before leaving TI's factory?

\$\endgroup\$
  • 1
    \$\begingroup\$ I'm not familiar with the specific processor on the Beagle Bone, but usually you have either internal circuitry that is responsible for updating the boot loader, or you have an external microcontroller. You can program the CPU during test in the manufacturing process. I've personally used JTAG with flying probe for this exact purpose. I should add that some processors ship with a boot loader already stored in internal ROM. Then you only need to point it to the SD card, and it will load the boot loader stored there. I guess you should consult the manufacturer's documentation. \$\endgroup\$ – user110971 Nov 2 '16 at 19:13
  • \$\begingroup\$ Do you think you can get a better rate for build\assembly than them? They have quantity on their side. \$\endgroup\$ – Voltage Spike Nov 2 '16 at 20:25
  • \$\begingroup\$ @laptop2d: I don't plan on actually cloning them, this question is just for education \$\endgroup\$ – Mark K Cowan Nov 2 '16 at 20:48
  • \$\begingroup\$ On modern chips there's often a bootloader in on-board ROM. JTAG is another method. There's often more than one way. \$\endgroup\$ – Spehro Pefhany Nov 3 '16 at 16:09
  • \$\begingroup\$ @laptop2d: A BeagleBone has quite a few components, many of which are not needed for a typical project. Since it's a CC-BY-SA licensed design, you can fairly easily create a derived design leaving out the components that are not necessary for you. And for medium volumes (~1000?) that can be cheaper. It's a relevant question which components you must leave for the derived design to still boot. \$\endgroup\$ – MSalters Nov 7 '16 at 14:59