BeagleBoard/GSoC/Ideas-2021

=Welcome!= BeagleBoard.org has been accepted to be a mentoring organization in the Google Summer of Code for nine previous years! Below, we're collecting project ideas for the GSoC-2021!

What is Google Summer of Code?
Spend your summer break writing code and learning about open source development while earning money! Accepted students work with a mentor and become a part of the open source community. Many become lifetime open source developers! The 2021 student application window is open March 29th to April 13th 2021! But don't wait for then to engage! Come to our IRC chat and share ideas today.

Google Summer of Code is open to post-secondary students, age 18 and older in most countries.

Read more on the GSoC site and the FAQ.

BeagleBoard.org Background
BeagleBoard.org is a volunteer organization that seeks to advance the state of open-source software on open-source hardware platforms capable of running high-level languages and operating systems (primarily Linux) in embedded environments. Born from taking mobile phone processors and putting them on low-cost boards to build affordable desktop computers, BeagleBoard.org has evolved to focus on the needs of the "maker" community with greater focus on the I/O needed for controlling motors and reading sensors to build things like robots, 3d printers, flying drones, in-car computer systems and much more. Past BeagleBoard.org GSoC projects included creating an interpreter for tiny CPUs, adding SPI and sensor support to Python, an HTML and git based tutorial sharing environment, porting autopilot software to Linux, an open source 100MHz 14-channel logic analyzer, using Android tablets as Linux displays, putting ADC support in Linux under the IIO framework, using Android phones as a network boot source, Running Arduino code on Linux, Robot Operating System support within the Yocto Project build system, Minix I2C support, an RPC framework for heterogeneous processor communication, a transparent USB packet sniffer, ARM optimizations for XBMC, ARM optimizations for FFTs, make-shift pulse-width-modulation and RPC optimizations for OpenCV. BeagleBoard.org has benefited from sponsorship from Texas Instruments, Circuitco, Digi-Key, element14 and others, but avoids any dependence on that sponsorship for sustaining the effort. The project has evolved over the past few years with over 1,000,000 boards in circulation with developers worldwide and strong roots in the Linaro, Yocto Project, Angstrom Distribution, Debian and Linux communities---and support for running most major Linux distributions including Ubuntu, Android, Fedora, ArchLinux, Gentoo, Buildroot and many more.

BeagleBoard was inspiration for Raspberry Pi and PocketBeagle is available for about $25 through over 30 distributors world-wide (and is even available at Micro Center in the USA), but is more than a throw-away computer. It is an instance of true open hardware, exposing users to the broader world of electronics, demystifying computers and fostering an environment of clones that have changed the industry for good.

Students will be expected to demonstrate an understanding of cross-compiling before being accepted, but support for demonstration is available through the IRC channel that typically has approximately 150 online chatters logged on at any time, most with sufficient experience to explain the process.

' Every accepted student will be sent a PocketBeagle, TechLab or GamePup, and either a BeagleBone AI, BeagleBone Black Wireless, BeagleBone Black, BeagleBone Blue, SeeedStudio BeagleBone Green, SeeedStudio BeagleBone Green Wireless or BeagleBoard-X15 before the first week of coding for testing their project. '

Additional hardware will be provided depending on need and value.

For more information, check out https://beagleboard.org and https://beagleboard.org/brief.

Students looking for ideas
Student proposals can encompass projects inspired from the following list of ideas or can include personal project ideas. Previous Google Summer of Code projects show that the key to success is being passionate about your project, so propose something that is extremely interesting to you, even if it is not on this list. We will be glad to help students develop ideas into projects via the BeagleBoard GSoC IRC or the BeagleBoard-GSoC mailing list. There are many potential project ideas and we will match students to projects based on their interests and help scope the proposals to something that can be completed in the Summer of Code timeframe.

There are more than a thousand existing projects listed at http://beagleboard.org/p. If you are interested in any of the projects listed on the BeagleBoard.org projects page, contact the project members to see if there are any aspects of their projects that can be enhanced to create a GSoC project. There are also several ideas on the ECE497 class project idea list. You can also check out last year's idea page. Note, however, we are looking for projects that provide a service to the developer community and aren't simply "look what cool thing I made or you can make". The projects should provide a useful software component for other people to utilize.

Mentors wondering where to help
Please start by registering your ideas for student projects below by following the template provided with the existing ideas. Furthermore, scroll down to the bottom and give everyone a bit of information about your expertise and availability by adding yourself to the table. Jason will make final approvals for mentor assignments based on if we first get accepted as a mentoring organization and best matching mentor skill sets with student project ideas deemed valuable to the community.

You will also need be invited by an administrator to register on the GSoC site and request to be a mentor for BeagleBoard.org.

General requirements
All projects have the following basic requirements:
 * 1) Students must create accounts on Github, eLinux, Freenode and Google Groups prior to creating their application.
 * 2) All newly generated materials must be released under an open source license.
 * 3) Individual students shall retain copyright on their works.
 * 4) Students will demonstrate their ability to cross-compile and utilize version control software by creating a "Hello World" application and generating a pull request to https://github.com/jadonk/gsoc-application/tree/master/ExampleEntryJasonKridner.  For assistance, please visit http://bbb.io/gsocchat or utilize the beagleboard-gsoc Google Group.  The "Hello World" application must print your name and the date out in an ARM Linux environment.  Freely available emulators may be used to test your application or you can ask anyone on the chat or mailing list to help you test.
 * 5) All projects will produce reusable software components and will not be "what–I-built-over-my-summer-vacation" projects. Including a hardware component is welcome, but the project *deliverable* will be software that may be utilized by a wide audience of the BeagleBoard.org community.
 * 6) Students will demonstrate their ability to collaborate by creating an eLinux wiki page for their proposal and utilizing Freenode to collect quotes regarding the usefulness of their proposal to the BeagleBoard.org community. The wiki timestamp will help mentors recognize the provenance of ideas from prospective students. Use of Google Docs for proposal development is discouraged due to insufficient revision control and extensive use of computing resources having numerous documents open simultaneously.
 * 7) Source code generated during the project must be released on Github (to be cloned to github.com/beagleboard or merged with appropriate upstream project upon successful completion).
 * 8) To help you to break your project down into manageable chunks and also to help the project's mentors to better support your efforts, weekly project status reports should be e-mailed to the the  beagleboard-gsoc Google Group. Each status report should outline:
 * 9) what was accomplished that week,
 * 10) any issues that prevented that week's goals from being completed and
 * 11) your goals for the next week.
 * 12) Students will provide two recorded audio/video presentations uploaded to Youtube or Vimeo (screencasts are appropriate), one near the beginning of the project summarizing their project goals and another in the wrap-up phase to summarize their accomplishments.  Examples can be found on http://beagleboard.org/gsoc. There is no requirement to show your faces or use English.

Idea template
Please place your idea in a suitable section.

Summarizing project name
Longer summary of the project. Goal: Concise statement that describes completion. Hardware Skills: Software Skills: Possible Mentors: Upstream Repository: References:

=Ideas= Throughout all of these ideas, contributions specifically contributing to the Linux kernel will be given extra attention. The ability for the BeagleBoard.org community to leverage software created out of GSoC is greatly expanded when those contributions land in the upstream Linux kernel where they are shared across many platforms and maintained by the broadest possible support community. In each application area, consideration how a kernel module submitted upstream could be a central component should be considered. In lieu of contributing to the Linux kernel, finding an upstream project, like ArduPilot, RTEMS, DonkeyCar, etc., where there is already an active community, is strongly desired. Of course, some projects are very BeagleBone-specific, like Adafruit_BBIO and BoneScript, and those projects do have an active user community and contributions are welcome in those areas, but more weight is given the more broad the impact of the coding project is. We've seen bug fixing projects to be very productive as well.

Feel free to look at previous ideas and migrate some here.

Kernel improvements
Improvements to the Linux kernel or kernel related projects in userspace that powers the basic infrastructure on which the BeagleBoard runs.

USB configfs in device tree
To speed up the boot process by configuring USB statically in the device tree instead of it being conventionally done through a script at boot time. Goal: USB configfs in device tree such that they can be configured statically in device tree ahead of boot and speed the boot process. Hardware Skills: USB Software Skills: C, Linux kernel, USB configfs Possible Mentors: rcn-ee Upstream Repository: https://github.com/beagleboard/linux/tree/4.19 kernel.org References: https://events.static.linuxfound.org/sites/events/files/slides/USB%20Gadget%20Configfs%20API_0.pdf

Update Cape compatibility layer
Goal: Update the compatibility layer for BeagleBone Black and AI to support more kernel versions. Hardware Skills: UART, I2C, SPI, ADC, GPIO and PWM Software Skills: C, Linux kernel Possible Mentors: Deepak Khatri, jkridner Upstream Repository: various References: Beagleboard:BeagleBone cape interface spec GSoC 2020 project page. lorforlinux's GSoC project documentation website.

Deep Learning
BeagleBoard-X15 has accelerators for running deep learning tasks using TIDL (1, 2). We'd love projects that enable people to do more deep learning application and end-nodes and leverage cloud-based training more easily. Goal here is to create tools that make learning about and applying AI and deep learning easier. Contributions to projects like ArduPilot and DonkeyCar (DIY Robocars and BlueDonkey) to introduce autonomous navigation to mobile robots are good possible candidates.

YOLO models on the X15/AI
Port the YOLO model(s) to the X15/AI so the accelerator blocks can be leveraged. Currently, running a frame through YOLOv2-tiny takes anywhere from 35 sec to 15 second depending on the how the code is run on the ARM.35 second being a pure brute force compilation for ARM; 15 second utilizing NEON and tweaked algorithms. The goal is to get things down to 1 second or less using the onboard accelerators. Note, there are over 6 different variants of YOLO (YOLOv1, YOLOv2, YOLOv2 and each one has a full size and a tiny version). The main interest is in getting either the YOLOv2 or YOLOv3 versions running. Please discuss with potential mentors on the desired approach as there are many approaches. Just to name a few: Porting the YOLO model into TIDL; OpenCL directly; OpenCL integration with the acceleration library; Integrating TIDL support with an acceleration library. Goal: Run YOLOv2 or YOLOv3 with the onboard hardware acceleration. Hardware Skills: None Software Skills: C, C++, Linux kernel, Understanding of NNs and Convolution. Possible Mentors: Hunyue Yau Upstream Repository: Numerous References: https://pjreddie.com/darknet/yolo/

OpenGLES acceleration for DL
Current acceleration on the X15/AI focuses on using the EVE and DSP hardware blocks. The SoC on those boards also feature an OpenGLES enabled GPU. The goal with this is to utilize shaders to perform computations. A possible frame work to utilize this on is the Darknet CNN framework. Goal: Accelerate as many layers types as possible using OpenGLES. Hardware Skills: None Software Skills: C, C++, Linux kernel, OpenGLES, Understanding of NNs and Convolution. Possible Mentors: Hunyue Yau Upstream Repository: Numerous References: https://pjreddie.com/darknet/

GPGPU with GLES
The BeagleBone and related boards all have a built in GPU that is often unused. It would be useful to create samples showing how it can be used for GPGPU purposes.Since there is no OpenCL drivers, this would need to be done with OpenGLES 2.0. The samples should take data from a C style array and load it onto the GPU. The GPU would then perform the task using sample shader code. The processed data would be retrieved from the GPU back into another C style array. A few processing tasks can be shown - simple do nothing to illustrate moving data between the CPU and the GPU and a real processing task such as running the image against a small kernel (convolution). Sample programs should also have a way of showing the time costs in moving data between GPU and CPU.

Low-Power Wide Area Networking
A number of wireless connectivity solutions to low-cost sensor nodes exist, including things built around TI CC13x, LoRa, narrow-band LTE and other low-power wide area networks. Projects that create tools and learning around these technologies should find a large user and mentor community around BeagleBone.

Automation and Industrial I/O
BeagleBone gets used a lot in automation tasks, be they in industrial, building, home or otherwise. Software that helps enable individual hobbyists, but can bridge into professional automation tasks, is strongly desired.


 * MikroElectronika click board manifests for the Greybus simulator, instead of device tree overlays
 * learning tools like BlockyTalky3 and Makecode, but with a focus on making automation easy
 * open source PLC software

librobotcontrol support for BeagleBone AI and Robotics Cape
Goal: Complete implementation of librobotcontrol on BeagleBone AI. Hardware Skills: Basic wiring Software Skills: C, Linux Possible Mentors: jkridner, lorforlinux Upstream Repository: https://github.com/jadonk/librobotcontrol/tree/bbai References:http://www.strawsondesign.com/docs/librobotcontrol/index.html

Makecode Arcade for PocketBeagle GamePup
Makecode is a framework for creating special-purpose programming experiences for beginners, especially focused on computer science education. Makecode has a blockly based programming environment served on the browser along with an in-browser board simulator. MakeCode Arcade is a similar environment to MakeCode, but the environment has code blocks that are oriented towards building games. The goal of this project is to support the Makecode Arcade target for the Beaglebone boards and demonstration of example games on the Pocketbeagle Gamepup Cape. Goal: Makecode target for Beaglebone boards with Breadboard simulator functionality making use of a UF2 daemon running in Beaglebone Hardware Skills: Basic breadboard prototyping skills Software Skills: Linux,Javascript,PXT Possible Mentors: Andrew Henderson Upstream Repository: TBD References: https://github.com/microsoft/pxt-arcade, https://github.com/microsoft/uf2-linux , https://beagleboard.org/capes

Blynk support for BeagleBone Boards
Blynk is a hardware-agnostic IoT platform with white-label mobile apps, private clouds, device management, data analytics, and machine learning. There are no good examples of Blynk with BeagleBone boards and there is no option for it in their mobile App right now. This project will change that and provide good visibility for BeagleBone boards with well-documented examples and How-To guides. Goal: Blynk support for BeagleBone Boards (Black, AI, Blue, and Pocket) with well-documented examples Hardware Skills: Basic breadboard prototyping skills Software Skills: Linux and Javascript Possible Mentors: Deepak Khatri, Vedant Paranjape Upstream Repository: TBD References: TBD

Low latency and soft peripherals using co-processors
The programmable real-time units are one of the coolest features of BeagleBone. Of course, the architecture of using a main processor running a high-level operating system and co-processors running without an operating system is a general architecture. Projects that help create tools and learning around this architecture can be rather successful around BeagleBone. See https://beagleboard.org/pru.


 * low-latency audio (bela.io)
 * LED lighting (Falcon Player, PocketScroller, etc.)

Another approach is to add support for Verilog (or VHDL) to synthesis PRU code for the soft peripherals. This can be based on the open source verilog toolchains.

Add features to simpPRU
Goal: Improve the features of simpPRU, namely implement a better error handler, add support for calling C code directly into simpPRU, also fix the known issues given the docs. If possible also fix the docs website Hardware Skills: Minimal Software Skills: C, Linux, Compilers Possible Mentors: Vedant Paranjape Upstream Repository: https://github.com/VedantParanjape/simpPRU/ References: https://github.com/VedantParanjape/simpPRU/wiki#things-to-be-implemented-in-future, https://github.com/VedantParanjape/simpPRU/wiki#known-issues, https://github.com/VedantParanjape/simpPRU/issues/5

Python for PRU
Goal: Use Python to program PRUs References: https://github.com/beagleboard/cloud9-examples/blob/3852ee0a11d5e5428a45576e528337f28a3822ef/PocketBeagle/pru/.work-in-progress/pruspeak.pru0.c

Patching Beaglebone PRU DMA support to the latest kernel versions
Goal: The BeagleBone PRU DMA project made use of the EDMA controller to transfer data between PRU and main (DDR) memory. Without DMA, the 2nd PRU on the PRUSS is utilized/wasted for data transfer. The project needs to be patched to the latest kernel version as it is currently in a non-working state. It could then also be integrated with PRUSS-Bindings to create a complete PRU API. Hardware Skills: Minimal Software Skills: Linux, C, kernel modules Possible Mentors: Pratim Ugale Upstream Repository: https://github.com/beagleboard/linux, https://github.com/pratimugale/PRUSS-Bindings or a fork of https://github.com/maciejjo/beaglebone-pru-dma References: https://gist.github.com/maciejjo/58a0d0213712e67fba9d0061f6b5bead, https://github.com/maciejjo/beaglebone-pru-dma/issues, https://github.com/pratimugale/PRUSS-Bindings/wiki

Port am335x_pru_package to remoteproc
The am335x_pru_package is a community supported set of tools and examples on using the PRU. It includes an assembler and a C library for managing the PRU over UIO. The BeagleBoard community mostly desires to migrate PRU development to remoteproc to give the Linux kernel greater knowledge of the cores.

Goal: Move all examples to remoteproc, including adding elf support to pasm, adding an option to build using clpru and updating the C library to use the remoteproc interface for basic PRU control and using mmap for a limited set of communications functions. Hardware Skills: N/A Software Skills: C, assembly, Linux kernel Possible Mentors: Kumar Abhishek, Zubeen Tolani Upstream Repository: https://github.com/beagleboard/am335x_pru_package References: v5 examples TI Training Labs

Create a PRU based soft-peripheral example
The PRU is a hard realtime co-processor with dedicated realtime pins. Previous GSoC have created an assortment of examples and foundation pieces. However, most of them have custom interfaces. This project is to tie things together to implement at least one example of using the PRU with a standard interface. For example, this can be a SPI master interface that can be bound with another peripheral via DT.

Goal: Create at least one non trivial example that includes both the PRU firmware and the kernel driver interface. Utilization of remoteproc (other means of loading the firmware will be considered provided it is appropriately justified) to load the firmware and control the PRU. A device driver should expose the functionality using standard kernel APIs. The example should NOT be a trivial one (i.e. GPIO controller, simple input events, plain on-off LEDs) unless proper justification is provided. Simple non trivial possible examples include SPI master, I2C master (potential HW issues), or UART. This project includes creating the relevant PRU firmware. Hardware Skills: Some understanding of I/O is needed esp if the I2C master is choosen. Software Skills: C, assembly, Linux kernel Possible Mentors: Kumar Abhishek, Zubeen Tolani Upstream Repository: N/A References: BeagleLogic & BeagleScope from previous years.

Security and Privacy
The BeagleBoard.org community cares a lot about understanding how information is managed. Projects that open up technology for more personal control and help secure data from external manipulation are generally well accepted. Consider how you can make contributions to existing projects in this area.


 * penetration testing (The Deck, Kali)
 * security appliance (Pangolin, ZeroTier Edge device)
 * self-hosted services (Freedombone)
 * car hacking (Macchina)

Example idea, a portable/plugable security appliance for use anywhere:


 * hardware: beaglebone with ethernet or beaglebone wireless, pocketbone + USB ethernet/wifi
 * OS: openwrt
 * configuration UI: bonescript/other
 * PRU accelerators...
 * privacy and safety tools...

Make port of Xen on BeagleBoard-x15
The project idea is to make Xen hypervisor available and easy to use on beagleboard-x15. To achieve this, it is planned to write Xen-supporting code and tutorials for Xen setup on the board. Another project goal is to improve user experience by working on optimizations for Beagleboard's kernel virtualization support code and/or on user-space tools. Previously, the problem was discussed in xen mailing list and in beagleboard mailing list. The general solution wasn't provided and it seems that the problem still does exist. The virtualization will make prototyping of virtualization-based security solutions easier in such areas like automotive computing and mobile privacy (BYOD problems).

Goal: to make virtualization available for end-users on Beagleboard-x15. Hardware Skills: basic electronics. Software Skills: C, C++, Linux kernel, Xen. Possible Mentors: Andrew Henderson, Michael Welling. Possible Co-mentors: Stefano Stabellini, Julien Grall, Iain Hunter. Upstream Repository: N/A. References: xen mailing list beagleboard mailing list

Porting multi-channel sound card drivers to Beagle AI
Goal: Porting sound card drivers to Beagle AI

Background / References: https://hackaday.io/project/9634-ctag-face-and-beast-multichannel-audio-systems

Software Skills: C/C++, Linux, Kernel

Possible Mentors: rma, henrix

Real-time audio network streaming
Goal: Building on a Beagle GSoC project of 2017, the idea is to extend / add audio network streaming capabilities using the AVB and / or the Ravenna / AES67 standards.

Background / References: https://elinux.org/BeagleBoard/GSoC/BeagleBoneAVB

Software Skills: C/C++, Linux, Kernel

Possible Mentors: rma, henrix

=Mentors= Previous mentors