Packages
nerves_system_bbb
0.7.0
2.30.0
2.29.5
2.29.4
2.29.3
2.29.2
2.29.1
2.29.0
2.28.0
2.27.3
2.27.2
2.27.1
2.27.0
2.26.1
2.26.0
2.25.1
2.25.0
2.24.0
2.23.0
2.22.1
2.22.0
2.21.0
2.20.2
2.20.1
2.20.0
2.19.1
2.19.0
2.18.2
2.18.1
2.18.0
2.17.2
2.17.1
2.17.0
2.16.2
2.16.1
2.16.0
2.15.3
2.15.2
2.15.1
2.15.0
retired
2.14.0
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.3
2.12.2
2.12.1
2.12.0
2.11.2
2.11.1
2.11.0
2.10.1
2.10.0
2.9.0
2.8.3
2.8.2
2.8.1
2.8.0
2.7.2
2.7.1
2.7.0
2.6.2
2.6.1
2.6.0
2.5.2
2.5.1
2.5.0
2.4.2
2.4.1
2.4.0
2.3.2
2.3.1
2.3.0
2.2.2
2.2.1
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
2.0.0
2.0.0-rc.0
1.4.0
1.3.0
1.2.1
1.2.0
1.1.1
1.1.0
1.0.0
1.0.0-rc.1
1.0.0-rc.0
0.20.0
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
Nerves System - BeagleBone Black, BeagleBone Green, PocketBeagle and more
Current section
Files
Jump to
Current section
Files
nerves_system_bbb
README.md
README.md
# BeagleBone Black[](https://travis-ci.org/nerves-project/nerves_system_bbb)This is the base Nerves System configuration for the [BeagleBone Black](http://beagleboard.org/black).<br><sup>[Image credit](#fritzing)</sup>| Feature | Description || -------------------- | ------------------------------- || CPU | 1 GHz ARM Cortex-A8 || Memory | 512 MB DRAM || Storage | 4 GB eMMC Flash and MicroSD || Linux kernel | 4.4.9 w/ BBB patches || IEx terminal | ttyS0 via FTDI pins || GPIO, I2C, SPI | Yes - Elixir ALE || ADC | Yes || PWM | Yes, but no Elixir support || UART | ttyS0 + more via device tree overlay || Camera | None || Ethernet | Yes || WiFi | Requires USB WiFi dongle |## Console accessThe console is configured to output to `ttyS0` by default. This is theUART output accessible by the 6 pin header labeled J1. A 3.3V FTDIcable is needed to access the output.The HDMI output has been disabled via device tree to free up pins on theGPIO header. If you would like console access via HDMI, you will needto enable HDMI support in the Linux kernel, remove the HDMI disableargument in the uboot script providing kernel arguments, and change`erlinit.conf` to output to `tty1`.## Linux versionsThe BeagleBone Black has many options for Linux that vary bykernel version and patch set. Nerves tracks those maintained byRobert Nelson at https://eewiki.net/display/linuxonarm/BeagleBone+Black.His patch sets have `-rt` and `-ti`/`-bone` options. The `-rt` for real-timeactually refers to `CONFIG_PREEMPT` and a couple other real-time options beingconfigured in the Linux kernel. Nerves uses those options as well. Nervesfollows the `-ti` patch set. See `nerves_system_br/boards/bbb` for the actualpatches.Be aware that if you have been using Linux kernel 3.8 on the BeagleBone, that therehave been device tree overlay and PRU updates. File paths have changed forinserting device tree overlays.## Device tree overlaysMost pins on the BBB's headers are configurable via the device tree.Configuration can be done at runtime via the [Universal I/O](https://github.com/cdsteinkuehler/beaglebone-universal-io)device tree overlays. These overlays are included in the kernel configurationfor Nerves so you do not need to compile that project. Additionally, the`config-pin` script is available in `/usr/bin` on the target. It hasminor modifications to run on Nerves.### Universal I/OThe universal I/O overlays can be loaded manually or by using the `config-pin`shell script:```iex(demo@nerves-0099)> :os.cmd('config-pin overlay cape-universaln')'Loading cape-universaln overlay\n'iex(demo@nerves-0099)> :os.cmd('config-pin -i P9_16') |> IO.putsPin name: P9_16Function if no cape loaded: gpioFunction if cape loaded: default gpio gpio_pu gpio_pd pwmFunction information: gpio1_19 default gpio1_19 gpio1_19 gpio1_19 ehrpwm1BCape: cape-universala cape-universal cape-universalnKernel GPIO id: 51PRU GPIO id: 83:okiex(demo@nerves-0099)> :os.cmd('config-pin P9_16 pwm')```### ADCsThe following example shows how to read values from the 7 ADC inputs in Elixir.```iex(demo@nerves-0099)> File.write("/sys/devices/platform/bone_capemgr/slots","BB-ADC"):okiex(demo@nerves-0099)> ls "/sys/bus/iio/devices/iio:device0"buffer dev in_voltage0_raw in_voltage1_rawin_voltage2_raw in_voltage3_raw in_voltage4_raw in_voltage5_rawin_voltage6_raw name of_node powerscan_elements subsystem ueventiex(demo@nerves-0099)> File.read("/sys/bus/iio/devices/iio:device0/in_voltage0_raw"){:ok, "3891\n"}iex(demo@nerves-0099)> File.read("/sys/bus/iio/devices/iio:device0/in_voltage0_raw"){:ok, "3890\n"}iex(demo@nerves-0099)> File.read("/sys/bus/iio/devices/iio:device0/in_voltage0_raw"){:ok, "3891\n"}```## Supported USB WiFi devicesThe base image includes drivers and firmware for Ralink RT53xx(`rt2800usb` driver) and RealTek RTL8712U (`r8712u` driver) devices.We are still working out which subset of all possible WiFi dongles tosupport in our images. At some point, we may have the option to supportall dongles and selectively install modules at packaging time, but untilthen, these drivers and their associated firmware blobs add significantlyto Nerves release images.If you are unsure what driver your WiFi dongle requires, run Raspbian and configure WiFifor your device. At a shell prompt, run `lsmod` to see which drivers are loaded.Running `dmesg` may also give a clue. When using `dmesg`, reinsert the USBdongle to generate new log messages if you don't see them.## InstallationIf [available in Hex](https://hex.pm/docs/publish), the package can be installed as: 1. Add nerves_system_bbb to your list of dependencies in `mix.exs`: def deps do [{:nerves_system_bbb, "~> 0.4.0"}] end 2. Ensure nerves_system_bbb is started before your application: def application do [applications: [:nerves_system_bbb]] end[Image credit](#fritzing): This image is from the [Fritzing](http://fritzing.org/home/) parts library.