Book Image

Programming the BeagleBone

By : Yogesh Chavan, Amit Pandurang Karpe
Book Image

Programming the BeagleBone

By: Yogesh Chavan, Amit Pandurang Karpe

Overview of this book

The whole world is moving from desktop computers to smartphones and embedded systems. We are moving towards utilizing Internet of Things (IoT). An exponential rise in the demand for embedded systems and programming in the last few years is driving programmers to use embedded development boards such as Beaglebone. BeagleBone is an ultra-small, cost-effective computer that comes with a powerful hardware. It runs a full-fledged Debian Linux OS and provides numerous electronics solutions. BeagleBone is open source and comes with an Ethernet port, which allows you to deploy IoT projects without any additions to the board. It provides plenty of GPIO, Anlaog pins, and UART, I2C, SPI pins which makes it the right choice to perform electronics projects. This gives you all the benefits of Linux kernel such as multitasking, multiusers, and extensive device driver support. This allows you to do programming in many languages including high-level languages such as JavaScript and Python. This book aims to exploit the hardware and software capabilities of BeagleBone to create real-life electronics and IoT applications quickly. It is divided into two parts. The first part covers JavaScript programs. The second part provides electronics projects and IoT applications in Python. First, you will learn to use BeagleBone as tool to write useful applications on embedded systems. Starting with the basics needed to set up BeagleBone and the Cloud9 IDE, this book covers interfacing with various electronics components via simple programs. The electronics theory related to these components is then explained in depth before you use them in a program. Finally, the book helps you create some real-life IoT applications.
Table of Contents (21 chapters)
Programming the BeagleBone
Credits
About the Author
Acknowledgment
About the Reviewers
www.PacktPub.com
Preface
BeagleBone Capes
Index

What is the device tree?


Our desktop systems (X86) come with BIOS chip, which provides important hardware information required to initialize kernel. ARM, however, does not come with any such information. All hardware information has to be statically written in kernel source. This modified source code cannot boot other boards which are very different. This means once kernel is modified to boot BeagleBone, it can not boot other ARM boards. Modified kernel has to be maintained by the vendor. They are responsible to bring all Mainline kernel changes to their modified kernel. To address this problem, new hardware description specification was introduced. These hardware description data structures are called Device Trees. These hardware description files are provided at boot time to the kernel by the bootloader and kernel uses them to initialize itself. Code for all ARM boards can exist in kernel and you specify your board details while booting via device tree files. BeagleBone kernel team went a step further and modified kernel to allow dynamically loading of small device tree overlay. This can help us to enable/disable hardware runtime. For more details visit http://elinux.org/BeagleBone_and_the_3.8_Kernel. We used device tree in Chapter 9, UART, I2C, and SPI Programming, to enable SPI pins while interfacing Nokia 5110 LCD. Adafruit Python library that we used has device tree files in the overlays source folder. They load runtime to change pin configuration. Cape manager deals with device tree overlays. Many prebuilt device trees are available in /lib/firmware. List of Device tree overlays loaded currently can be viewed by the following command:

cat /sys/devices/bone_capemgr.*/slots

BeagleBone Black lists HDMI and emmc in output. Device tree for HDMI and emmc are loaded at boot time. You can disable this boot time loading and free up expansion pins related to them to interface more components. You can disable HDMI by uncommenting the following line in the /boot/uEnv.txt file:

##Disable HDMI
cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN