GSoC 2017 Final Report : BeagleBoot
I had a great experience working as a Student developer for BeagleBoard.org Foundation under the Google Summer of Code 2017 Program. This program allowed me to learn awesome technologies, get closer to the Open Source Community and hone my skills all while developing an open source project.
First I’d like to thank Google and BeagleBoard.org Foundation for this life changing opportunity. Now I’d thank following people for supporting and guiding me throughout the project (in no particular order, non-exhaustive list):
The project has been developed into the following two parts :
- node-beagle-boot : A node.js bootloader server running over USB connection for the BeagleBone board platform. In this project, this bootloader server is used to transfer bootloader ( U-boot configured for USB Mass Storage) to the device which boots it into usb mass storage mode by exposing the on board eMMC as a storage device over usb.
- BeagleBoot : A GUI based flashing app (using Electron Framework) for BeagleBone board by integrating the above bootloader server.
Working of the bootloader server
When the AM335x ROM is connected to PC by holding down boot (S2) switch, it exposes a RNDIS interface which is a virtual ethernet link over usb.
- After running the server, it listens to events of device connection.
- Once it detects the device connection, it starts serving BOOTP, ARP requests and finally TFTP request for respective file transfer for the device.
- First TFTP trasnfer of SPL(Secondary Program Loader) is done for ROM device. SPL runs in device.
- Now, newly connected device shows up as SPL device. TFTP trasnfer of UBOOT (configured for USB mass storage) is performed for SPL device.
- Then UBOOT runs and mounts the emmc of device as USB mass storage device.
More info about the project and detailed server working in this intro video :
Project Outcome : BeagleBoot App
So, after 3 months into the project, I’m able to deliver a functional flashing app for the BeagleBone board. Currently this app is supported on Linux and macOS. The installers for supported platforms can be downloaded here.
Here’s short summary of app’s working:
- User clicks the
USB Mass Storagebutton, app then prompts user for su password.
- After this app asks user to connect board by holding boot (S2) swicth.
- The app runs bootloader server and puts board into usb Mass Storage mode.
- User then selects OS image for flashing and clicks
Flashbutton for flashing.
Check out App’s architecture for more info on app’s working.
What I’m not able to deliver as per plans : Windows Support
Remember as the project has been developed in two parts, the App fully supports all the functionality on its part on all the three major platforms Linux, macOS and Windows. The problem on Windows is with the bootloader server project. I was not able to transfer bootloader to device from Windows host. The issue is described here.
So, for Windows support, I just need to update the bootloader server module by fixing the issue. The app will be automatically be functional on Windows too then.
This kind of project needs continuous support and development. I plan to continue working on this and get the Windows support working as well. Further improvements need to be implemented in the app:
- Automatic updates or just notifying user to download available updates.
- Grab latest images from internet for flashing.
- Options to transfer custom bootloader, ramdisk image distro etc.
Here’s the video for the final presentation, summarizing everything and shows the app in action:
I’ll be supporting the app development for as long as possible for me. Any contributions to the project are most welcome and appreciated.
Listing code repo links again:
Thanks for reading. Happy Coding :)