Robotic Controls — printer-friendly version of BeagleBone Black with Angstrom

BeagleBone Black with Angstrom

Evan Boldt, June 2, 2013

Introduction

Angstrom Linux is what ships on the BeagleBones. It's kind of terrible because I think everyone when they first get it will say, oh I should run opkg upgrade so that everything is up to date. Guess what? That breaks the boot. It won't startup anymore. I don't know how to fix it or what goes wrong. You'll get three LED's on, no USB connection on either the mass media or network, and it'll never come online on the LAN because it won't start up. 

If you want things to be up to date, you may want to install Ubuntu.

On the other hand, it is pretty lightweight and is pre-configured in a lot of ways that other distros don't have by default. For example, the cloud9 editor is kind of nice.

Installing Images

Whether you have a BeagleBone or BeagleBone Black, you can use the Angstrom-Cloud9-IDE-GNOME-eglibc-ipk*.img.xz

They both run ARM7 and the image has the NEON optimization. The image for the BeagleBone Black might have additional features, but it's the same Angstrom with less features as far as I can tell.

sudo su
xz -cd ./Angstrom-Cloud9-IDE-GNOME-****.img.xz > /dev/sdd

URLs

Check out the tutorial page on http://beaglebone.local/. There are some neat node.js buttons on http://beaglebone.local/bonescript.html

The very cool Cloud9 IDE is available on http://beaglebone.local:3000/. 

If you're on windows and don't have an SSH client that you like, there's GateOne SSH client availble in-browser at https://beaglebone.local/

If those URLs don't work, then you might try replacing beaglebone.local with 192.168.7.2. If that doesn't work, there might be something wrong with your installation. You could re-flash another image.

Tweaks

Disable GNOME autostart

If you want a graphical environment to develop and test on, that's fine, but a lot of the time your deployment will be headless. Well, you can have your cake and eat it too.

update-rc.d -f gdm remove
systemctl disable gdm
mv /lib/systemd/system/gdm.service ~/gdm.backup.service
systemctl --system daemon-reload

There are probably more steps there than are necessary, but I couldn't get it to stay down for a while, so try them all.

Then if you want to start your graphical environment at any point, just login and run gdm

Install locate

Locate is an awesome tool for searching the filesystem really quickly.

opkg install findutils
updatedb

Run a Script on Startup (cron)

nano ~/startup.sh
#put something in /tmp/ so we can see if this ran
touch /tmp/WINNING
#turn off the heartbeat
echo 0 > /sys/class/leds/beaglebone\:green\:usr0/brightness
chmod +x ~/startup.sh
env EDITOR=nano crontab -e
@reboot /bin/bash /home/root/startup.sh

Run a Script on Startup (systemd)

Angstrom uses systemd, so it has a few things different than a Debian/Ubuntu system. Not sure why you'd want to do it this way. It's a lot harder than cron.

First make a script you want to run on startup. You might just use this bash file to launch all your other processes. If you do, throw a & at the end of each line to run them in background.

nano ~/mystartup.sh
#!/bin/bash
touch /tmp/WINNING
chmod +x ~/mystartup.sh

After making an executable script, make a service for systemd to use.

nano /lib/systemd/system/mystartup.service
[Unit]
Description=My own script to run on startup
ConditionPathExists=|/usr/bin
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/home/root/mystartup.sh
systemctl --system daemon-reload
systemctl enable mystartup.service

To load it and test it, try:

systemctl start mystartup.service
ls -l /tmp/WINNING
journalctl

Note that journalctl is apparently the new way of doing a "less /var/log/syslog"

Benchmarks

Compare the benchmarks to those of the Raspberry Pi (wiki) using this package (zip). Also compare to my Ubuntu BBB tests.

Processor Info

root@beaglebone:~# cat /proc/cpuinfo 
processor	: 0
model name	: ARMv7 Processor rev 2 (v7l)
BogoMIPS	: 990.68
Features	: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x3
CPU part	: 0xc08
CPU revision	: 2

Hardware	: Generic AM33XX (Flattened Device Tree)
Revision	: 0000
Serial		: 0000000000000000

Dhrystone

At 3059570 dhrystones per second, the BBB with Angstrom is almost 4 times faster than a Raspberry Pi (809061) with Raspbian on it. However, it is about 10% slower than it could be with Ubuntu on it (3319960).

##########################################

Dhrystone Benchmark, Version 2.1 (Language: C or C++)
Optimisation    Opt 3 32 Bit
Register option not selected

       10000 runs   0.01 seconds 
      100000 runs   0.11 seconds 
      200000 runs   0.18 seconds 
      400000 runs   0.13 seconds 
      800000 runs   0.26 seconds 
     1600000 runs   0.52 seconds 
     3200000 runs   1.05 seconds 
     6400000 runs   2.09 seconds 

Final values (* implementation-dependent):

Int_Glob:      O.K.  5  Bool_Glob:     O.K.  1
Ch_1_Glob:     O.K.  A  Ch_2_Glob:     O.K.  B
Arr_1_Glob[8]: O.K.  7  Arr_2_Glob8/7: O.K.     6400010
Ptr_Glob->              Ptr_Comp:       *    94584
  Discr:       O.K.  0  Enum_Comp:     O.K.  2
  Int_Comp:    O.K.  17 Str_Comp:      O.K.  DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob->         Ptr_Comp:       *    94584 same as above
  Discr:       O.K.  0  Enum_Comp:     O.K.  1
  Int_Comp:    O.K.  18 Str_Comp:      O.K.  DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc:     O.K.  5  Int_2_Loc:     O.K.  13
Int_3_Loc:     O.K.  7  Enum_Loc:      O.K.  1  
Str_1_Loc:                             O.K.  DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc:                             O.K.  DHRYSTONE PROGRAM, 2'ND STRING


From File /proc/cpuinfo
processor	: 0
model name	: ARMv7 Processor rev 2 (v7l)
BogoMIPS	: 297.40
Features	: swp half thumb fastmult vfp edsp thumbee neon vfpv3 tls 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x3
CPU part	: 0xc08
CPU revision	: 2

Hardware	: Generic AM33XX (Flattened Device Tree)
Revision	: 0000
Serial		: 0000000000000000


From File /proc/version
Linux version 3.8.13 (koen@rrMBP) (gcc version 4.7.3 20130205 (prerelease) (Linaro GCC 4.7-2013.02-01) ) #1 SMP Mon May 20 17:07:58 CEST 2013


Nanoseconds one Dhrystone run:       326.84
Dhrystones per Second:              3059570
VAX  MIPS rating =                  1741.36

OpenSSL

Again, the BBB on Angstrom proves to be significantly faster than the Raspberry Pi. About 4 times faster or way more. However, the comparison to the BBB with Ubuntu are actually the opposite. Angstrom is faster by about 10%. The difference? No NEON FPU optimizations on Ubuntu!

root@beaglebone:~# openssl speed;
OpenSSL 1.0.0j 10 May 2012
built on: Wed Apr  3 21:06:55 CEST 2013
options:bn(64,32) rc4(ptr,int) des(idx,risc1,2,long) aes(partial) idea(int) blowfish(idx) 
compiler: arm-angstrom-linux-gnueabi-gcc  -march=armv7-a     -mthumb-interwork -mfloat-abi=softfp -mfpu=neon -mtune=cortex-a8 --sysroot=/build/v2012.12/build/tmp-angstrom_v2012_12-eglibc/sysroots/olinuxino-a13 -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN 	-DTERMIO -O2 -pipe -g -feliminate-unused-debug-types -Wall -DHAVE_CRYPTODEV -DUSE_CRYPTODEV_DIGESTS
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2                  0.00         0.00         0.00         0.00         0.00 
mdc2              2200.18k     2903.10k     3079.22k     3123.71k     3131.59k
md4               5415.82k    20091.55k    62372.30k   131555.57k   194939.46k
md5               4617.55k    16804.97k    50871.15k   102349.66k   145803.90k
hmac(md5)         7419.73k    25105.91k    67753.84k   117279.85k   149212.21k
sha1              4689.06k    15086.80k    37111.10k    58582.77k    70082.56k
rmd160            4321.96k    13657.71k    33189.03k    51514.42k    61322.19k
rc4              51274.46k    57055.08k    58599.86k    59068.36k    59196.82k
des cbc          15641.44k    16844.09k    17096.95k    17186.71k    17143.13k
des ede3          5966.27k     6118.46k     6149.65k     6173.80k     6179.74k
idea cbc         15220.99k    16040.11k    16331.43k    16378.86k    16340.16k
seed cbc         21797.27k    23300.32k    23793.27k    23880.09k    23956.81k
rc2 cbc          13306.59k    14101.91k    14234.37k    14302.09k    14325.00k
rc5-32/12 cbc        0.00         0.00         0.00         0.00         0.00 
blowfish cbc     27004.49k    29706.03k    30572.82k    30746.37k    30866.58k
cast cbc         26993.30k    29720.81k    30501.50k    30798.77k    30854.70k
aes-128 cbc      27466.35k    29851.57k    30765.55k    31029.95k    31033.71k
aes-192 cbc      23934.83k    25819.16k    26408.67k    26625.71k    26651.49k
aes-256 cbc      21310.20k    22657.92k    23204.56k    23356.48k    23362.27k
camellia-128 cbc    28544.43k    31191.34k    31965.01k    32352.21k    32362.51k
camellia-192 cbc    23092.30k    24841.16k    25474.06k    25586.30k    25650.86k
camellia-256 cbc    23167.57k    24852.70k    25346.39k    25612.71k    25614.38k
sha256            4648.14k    11368.65k    21020.95k    26654.38k    29045.86k
sha512             969.92k     3858.49k     5574.64k     7650.79k     8548.17k
whirlpool         1872.39k     3901.80k     6372.60k     7553.37k     7996.82k
aes-128 ige      25801.92k    28261.82k    29148.35k    29319.28k    28924.91k
aes-192 ige      22733.70k    24548.07k    25245.12k    25323.28k    25036.29k
aes-256 ige      20328.61k    21757.95k    22204.79k    22366.69k    22090.91k
                  sign    verify    sign/s verify/s
rsa  512 bits 0.002286s 0.000191s    437.4   5244.1
rsa 1024 bits 0.011637s 0.000559s     85.9   1790.5
rsa 2048 bits 0.068425s 0.001828s     14.6    546.9
rsa 4096 bits 0.444783s 0.006260s      2.2    159.7
                  sign    verify    sign/s verify/s
dsa  512 bits 0.001946s 0.002152s    513.9    464.7
dsa 1024 bits 0.005539s 0.006413s    180.5    155.9
dsa 2048 bits 0.018094s 0.021652s     55.3     46.2
                              sign    verify    sign/s verify/s
 160 bit ecdsa (secp160r1)   0.0011s   0.0048s    935.6    210.4
 192 bit ecdsa (nistp192)   0.0011s   0.0052s    873.1    192.9
 224 bit ecdsa (nistp224)   0.0015s   0.0069s    679.8    144.8
 256 bit ecdsa (nistp256)   0.0020s   0.0099s    509.9    100.8
 384 bit ecdsa (nistp384)   0.0041s   0.0218s    245.0     45.8
 521 bit ecdsa (nistp521)   0.0093s   0.0490s    107.4     20.4
 163 bit ecdsa (nistk163)   0.0040s   0.0081s    247.2    124.2
 233 bit ecdsa (nistk233)   0.0078s   0.0154s    128.3     65.1
 283 bit ecdsa (nistk283)   0.0119s   0.0276s     84.3     36.2
 409 bit ecdsa (nistk409)   0.0283s   0.0632s     35.3     15.8
 571 bit ecdsa (nistk571)   0.0634s   0.1443s     15.8      6.9
 163 bit ecdsa (nistb163)   0.0040s   0.0087s    252.3    115.5
 233 bit ecdsa (nistb233)   0.0076s   0.0166s    130.8     60.3
 283 bit ecdsa (nistb283)   0.0118s   0.0302s     84.6     33.2
 409 bit ecdsa (nistb409)   0.0284s   0.0718s     35.2     13.9
 571 bit ecdsa (nistb571)   0.0637s   0.1660s     15.7      6.0
                              op      op/s
 160 bit ecdh (secp160r1)   0.0041s    246.8
 192 bit ecdh (nistp192)   0.0044s    229.8
 224 bit ecdh (nistp224)   0.0057s    174.7
 256 bit ecdh (nistp256)   0.0083s    121.1
 384 bit ecdh (nistp384)   0.0177s     56.6
 521 bit ecdh (nistp521)   0.0406s     24.6
 163 bit ecdh (nistk163)   0.0039s    255.5
 233 bit ecdh (nistk233)   0.0075s    132.8
 283 bit ecdh (nistk283)   0.0136s     73.6
 409 bit ecdh (nistk409)   0.0312s     32.1
 571 bit ecdh (nistk571)   0.0718s     13.9
 163 bit ecdh (nistb163)   0.0042s    236.7
 233 bit ecdh (nistb233)   0.0082s    121.3
 283 bit ecdh (nistb283)   0.0152s     65.7
 409 bit ecdh (nistb409)   0.0357s     28.0
 571 bit ecdh (nistb571)   0.0825s     12.1