This page is for notes to serve as reminders on what I learned about the BeagleBone Black.
The install script, used to update the eMMC with Ångström Linux, is a useful place to start. From the root shell, after booting from the Micro-SD card: –
root@beaglebone:~# cat /usr/bin/emmc.sh
#!/bin/bash
# (c) Copyright 2013 Koen Kooi <koen@dominion.thruhere.net>
# Licensed under terms of GPLv2
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
PART1MOUNT="/media/1"
PART2MOUNT="/media/2"
HOSTARCH="$(uname -m)"
MLOMD5="49aa0e1fadc73369e41cb134c4d780bb"
UBOOTMD5="c159afe3cb5a8d5bc81bfe5a2477fbbb"
cd /build
HEADER=$(hexdump -e '8/1 "%c"' /sys/bus/i2c/devices/0-0050/eeprom -s 5 -n 3)
if [ ${HEADER} -eq 335 ] ; then
echo "Valid EEPROM header found"
else
echo "Invalid EEPROM header detected"
if [ -e /eeprom.dump ] ; then
echo "Adding header to EEPROM"
dd if=/eeprom.dump of=/sys/devices/ocp.2/44e0b000.i2c/i2c-0/0-0050/eeprom
fi
fi
echo "Paritioning eMMC"
dd if=/dev/zero of=/dev/mmcblk1 bs=16M count=16
./mkcard.sh /dev/mmcblk1
echo "Mounting partitions"
mkdir -p ${PART1MOUNT}
mkdir -p ${PART2MOUNT}
mount /dev/mmcblk1p1 ${PART1MOUNT} -o sync
mount /dev/mmcblk1p2 ${PART2MOUNT} -o async,noatime
echo "Copying bootloader files"
cp MLO u-boot.img ${PART1MOUNT}
echo "optargs=quiet drm.debug=7" >> ${PART1MOUNT}/uEnv.txt
umount /dev/mmcblk1p1
sync
echo "Extracting rootfs"
tar zxf Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone.rootfs.tar.gz -C ${PART2MOUNT}
echo "Populating VFAT partition"
mount /dev/mmcblk1p1 ${PART1MOUNT} -o sync
if [ -d ${PART2MOUNT}/usr/share/beaglebone-getting-started ] ; then
cp -r ${PART2MOUNT}/usr/share/beaglebone-getting-started/* ${PART1MOUNT}
fi
echo "Cloud9 GNOME Image 2013.06.20" > ${PART1MOUNT}/ID.txt
echo "Cloud9 GNOME Image 2013.06.20" > ${PART2MOUNT}/etc/dogtag
umount /dev/mmcblk1p1
if [ "${HOSTARCH}" = "armv7l" ] ; then
echo "Generating machine ID"
systemd-nspawn -D ${PART2MOUNT} /bin/systemd-machine-id-setup
echo "Running Postinsts"
cpufreq-set -g performance
systemd-nspawn -D ${PART2MOUNT} /usr/bin/opkg-cl configure
cpufreq-set -g ondemand
# Hack to get some space back
systemd-nspawn -D ${PART2MOUNT} /usr/bin/opkg-cl remove db-doc --force-depends
#echo "Setting timezone to Europe/Paris"
#systemd-nspawn -D ${PART2MOUNT} /usr/bin/timedatectl set-timezone Europe/Paris
fi
rm -f ${PART2MOUNT}/etc/pam.d/gdm-autologin
rm -f ${PART2MOUNT}/etc/systemd/system/multi-user.target.wants/xinput-calibrator.service
rm -f ${PART2MOUNT}/etc/systemd/system/multi-user.target.wants/busybox*
rm -f ${PART2MOUNT}/etc/dropbear/dropbear_rsa_host_key
ln -s /dev/null ${PART2MOUNT}/etc/systemd/system/xinetd.service
touch ${PART2MOUNT}/etc/default/locale
# enable wifi
mkdir -p ${PART2MOUNT}/var/lib/connman/
cp connman.settings ${PART2MOUNT}/var/lib/connman/settings
rm -f ${PART2MOUNT}/etc/network/interfaces
# Replace wallpaper
if [ -e ${PART2MOUNT}/usr/share/pixmaps/backgrounds/gnome/angstrom-default.jpg ] ; then
cp beaglebg.jpg ${PART2MOUNT}/usr/share/pixmaps/backgrounds/gnome/angstrom-default.jpg
fi
umount ${PART2MOUNT}
sync
# verification stage
mount /dev/mmcblk1p1 ${PART1MOUNT}
if [ -e ${PART1MOUNT}/ID.txt ] ; then
echo "ID.txt found"
else
echo "ID.txt missing - ERROR"
ERROR="ID.txt"
fi
if [ -e ${PART1MOUNT}/START.htm ] ; then
echo "START.htm found"
else
echo "START.htm missing - ERROR"
ERROR="${ERROR}, START.htm"
fi
if [ "${MLOMD5}" != "$(md5sum ${PART1MOUNT}/MLO | awk '{print $1}')" ] ; then
echo "MLO MD5sum failed"
ERROR="${ERROR}, MLO"
fi
if [ "${UBOOTMD5}" != "$(md5sum ${PART1MOUNT}/u-boot.img | awk '{print $1}')" ] ; then
echo "u-boot MD5sum failed"
ERROR="${ERROR}, uboot"
fi
umount /dev/mmcblk1p1
mount /dev/mmcblk1p2 ${PART2MOUNT} -o async,noatime
BGMD5SUM_VALID="49b620077b1b78e198554e2272a5e172"
BGMD5SUM="$(md5sum ${PART2MOUNT}/usr/share/pixmaps/backgrounds/gnome/angstrom-default.jpg | awk '{print $1}')"
if [ "${BGMD5SUM_VALID}" != "${BGMD5SUM}" ] ; then
echo "Wallpaper MD5sum failed"
ERROR="${ERROR}, bgmd5"
fi
umount ${PART2MOUNT}
if [ -z "$ERROR" ] ; then
if [ -e /sys/class/leds/beaglebone\:green\:usr0/trigger ] ; then
echo default-on > /sys/class/leds/beaglebone\:green\:usr0/trigger
echo default-on > /sys/class/leds/beaglebone\:green\:usr1/trigger
echo default-on > /sys/class/leds/beaglebone\:green\:usr2/trigger
echo default-on > /sys/class/leds/beaglebone\:green\:usr3/trigger
fi
else
echo "ERRORS found: ${ERROR}"
if [ -e /sys/class/leds/beaglebone\:green\:usr0/trigger ] ; then
echo none > /sys/class/leds/beaglebone\:green\:usr0/trigger
echo none > /sys/class/leds/beaglebone\:green\:usr1/trigger
echo none > /sys/class/leds/beaglebone\:green\:usr2/trigger
echo none > /sys/class/leds/beaglebone\:green\:usr3/trigger
fi
fi
Note the kernel parameter ‘drm.debug=7’ in uEnv.txt – this will clutter the kernel’s message buffer with debug data relating to HDMI, so I edit this to value to ‘0’ instead (e.g. in /media/BEAGLEBONE, after booting from the new eMMC image).
