BeagleBoard/GSoC/etcher-beagleboot

=etcher-beagleboot = Integrate node-beagle-boot to Etcher and add features like U-boot console on boot up, a proxy server, grab latest images from beagleboard.org to BeagleBoot (electron app)

Student: Ravi Kumar Prasad Mentors: Jason Kridner Code: https://github.com/ravikp7/BeagleBoot Wiki: http://elinux.org/BeagleBoard/GSoC/etcher-beagleboot GSoC: [NA GSoC entry]

=Status= This project is currently just a proposal.

=Proposal= Cross-compile and utilize version control software by creating a "Hello World" application and generating a pull request https://github.com/jadonk/gsoc-application/pull/60

About you
IRC: ravikp7 Github: ravikp7 School: Maharaja Agrasen Institute of Technology Country: India Primary language: English, Hindi Typical work hours: (9AM-3PM and 7PM-12AM) IST or (11:30PM-5:30AM and 9:30AM-2:30PM) EST

About your project
Project name: BeagleBoot

Description
Etcher is a widely used open source app for flashing sd cards, thumb drives etc, with support on all major platforms. Recently it got usb boot support for Raspberry Pi, through which it can mount Pi's emmc for flashing. Similarly, node-beagle-boot server can be integrated in the app to boot BeagleBone (AM335x boards) into mass storage mode for Flashing.

The BeagleBoot (electron app) developed last year, needs some improvements and feature additions.

Features to be added:
1. Grab latest images from beagleboard.org for flashing. 2. Provide U-boot console in the app after booting. The U-boot console will be accessed via USB connection with Net console through node-beagle-boot server. Illustrated by Jason Kridner here. 3. For U-boot console UI, I'll be using this React Component in the app. As, I don't want to re-invent the wheel, this component seems a good fit for our requirement.

Proxy Server in node-beagle-boot

 * A proxy server that gets all requests (targeted at addresses other than app's virtual IP) from BeagleBone and routes them to the host IP stack using Node sockets, so that it reaches the internet and also feeds the response (received on app's port) back to the BeagleBone.
 * All requests will be received and served to-from BeagleBone over node-usb (RNDIS).
 * This would help to circumvent all the host specific configs to enable networking in BeagleBone.
 * This way the cloud9 server hosted on BeagleBone can also be exposed only to the BeagleBoot app, not the entire host network.

Improvements in node-beagle-boot:

 * Use this module to load WinUSB drivers on Windows.

Integration of node-beagle-boot in etcher

 * Provide a pull request to etcher that fits their framework for usb boot.

Timeline
Before Official coding time:  Make intro video. Analyse etcher's coding guidelines and framework 2018-05-21: Milestone #1 2018-05-28: Milestone #2 2018-06-04: Milestone #3 2018-06-11: Milestone #4  ---FIRST EVALUATION---  2018-06-18: Milestone #5 2018-06-25: Milestone #6 2018-07-01: Milestone #7 2018-07-08: Milestone #8  ---SECOND EVALUATION---  2018-07-15: Milestone #9 2018-07-22: Milestone #10 A buffer of one week has been kept for any unpredictable delays. 2018-07-29: Milestone #11
 * Write all protocols according to etcher framework.
 * Fix Linux support and root permissions requirement in etcher usbboot framework. See this
 * Etcher able to load WinUSB drivers for AM335x on Windows.
 * Etcher able to boot BeagleBone into mass storage mode.
 * TCP/IP proxy in node-beagle-boot
 * Implement TCP requests handling (parsing and encoding), received from board.
 * Route required TCP requests to host network stack using Node sockets.
 * Receive response on app port and route it to board.
 * Refactor BeagleBoot app code.
 * Improve app state management.
 * Implement UI for downloading latest images from beagleboard.org
 * App able to grab latest images for flashing.
 * Gist demo for link fetch https://gist.github.com/ravikp7/d473a202356d5a0ab57db5c1276916d3
 * Implement UI for U-boot console.
 * App able to provide interaction with U-boot console.
 * node-beagle-boot and hence BeagleBoot able to load WinUSB drivers on Windows.
 * Fix all cross platform issues.
 * * Testing and Bug Fixes
 * Documentation

Experience and approach
I've successfully completed GSoC 2017 for BeagleBoard.org. Code repositories for same https://github.com/ravikp7/node-beagle-boot, https://github.com/ravikp7/BeagleBoot With the gained experience, I hope to be more consistent this time.

Contingency
What will you do if you get stuck on your project and your mentor isn’t around? If I get stuck and mentor isn't around: 1. I'll seek help from BeagleBone community on IRC and mailing list. 2. I'll crawl the internet with google :) and stackoverflow community is always there to help. 3. I believe that since all the code and machines ever are made by humans, so there's no reason I being a human too can't solve the problem. Surely, it can take time, but it isn't impossible.

Benefit
If successfully completed, what will its impact be on the BeagleBoard.org community? This project project will be really helpful for everybody especially newbies, who would have a nice experience with flashing images easily with their favourite Flashing app Etcher. Along with that, with access to U-boot console in electron app will make it easier to debug over USB without a serial cable.