* BCM1 is the System-On-Module that contains most of the BeagleBone Black design
* BCS2 is a mainboard with the form factor of the original BeagleBone Black. The BCM1 is soldered on BCS2 and the pair is an equivalence of the BBB.
Recently, I needed to run U-Boot on a custom board built with a BCM1. I followed some tutorials on the internet and the result was that U-Boot never started. After some investigations, I found out that the EEPROM that contains BBB identification is not present on BCM1, but is on BCS2 instead. The consequence is that U-Boot cannot identify the board and the initialization procedure fails.
In this post, I will detail every step to make U-Boot run on BCM1.
Note: All of these steps were performed on Windows 10 with bash (ubuntu terminal).
Install tools
sudo apt-get install gcc-arm-linux-gnueab
Create an alias to simply following commands
alias armmake='make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- '
Grab U-Boot
git clone git://git.denx.de/u-boot.git u-boot cd u-boot
Edit the code
Usually, we do a patch for these type of things. I'll try to post it later.
We will modify some parts of the code to stub the EEPROM so that U-Boot behaves exactly like it was a BBB board.
Open board_detect.c and add the following right after the #include statements:
static struct ti_common_eeprom stub_eeprom =
{
TI_EEPROM_HEADER_MAGIC,
"A335BNLT",
"00C0",
"1716BBBK2450",
"",
{{0x11,0x22,0x33,0x44,0x55}, // Dummy Mac addresses
{0x11,0x22,0x33,0x44,0x55},
{0x11,0x22,0x33,0x44,0x55}},
11749353662462671858,
12656917672993063804
};
Replace the content of the function 'eeprom_am_set' with{
return 0;
}
Do the same with 'eeprom_am_get'.Open board_detect.h.
Replace TI_EEPROM_DATA definition with:
#define TI_EEPROM_DATA ((struct ti_common_eeprom *)\ &stub_eeprom)
Config & Compile
armmake distclean armmake am335x_boneblack_defconfig armmake
Copy to an SD Card
Format an SD card to FAT32 (boot flag ON).
Go to your U-Boot directory and copy MLO to SD Card first.
Then copy u-boot.img to SD-Card.
And there you go ! U-Boot shall start normally.
Here is an example of my uEnv.txt :
bootpart=0:1
bootdir=
bootfile=uImage
fdtfile=am335x-boneblack.dtb
fdtaddr=0x80F80000
loadaddr=0x80200000
optargs=quiet
mmcdev=0
mmcroot=/dev/mmcblk0p2 ro
mmcrootfstype=ext4 rootwait
loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv}
loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile}
uenvcmd=load mmc 0 ${loadaddr} ${bootfile};run loadfdt;setenv bootargs console=${console} ${optargs};bootm ${loadaddr} - ${fdtaddr}