* 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}
Thanks for sharing Cem - I ran into the same problem with the BCM1 while the BCS1 worked just fine.
ReplyDelete