Difference between revisions of "BeagleBoard/GSoC/2021 Proposal/beagle config"

From eLinux.org
Jump to: navigation, search
m
(4 intermediate revisions by the same user not shown)
Line 26: Line 26:
 
* Experience :  
 
* Experience :  
 
* [https://github.com/SAtacker/pid-tuning-gui/tree/satacker/cpp_port PID-Tuning-GUI] is my Graphing Qt application as well as for sending data to esp32 microcontroller using Boost.ASIO as Netowrking stack in order to configure the Proportional-Integral-Derivative (PID) Controller.
 
* [https://github.com/SAtacker/pid-tuning-gui/tree/satacker/cpp_port PID-Tuning-GUI] is my Graphing Qt application as well as for sending data to esp32 microcontroller using Boost.ASIO as Netowrking stack in order to configure the Proportional-Integral-Derivative (PID) Controller.
* [https://github.com/SAtacker/kernel_learn kernel learn] is a repo I had created for kernel learning purpose in which I had learned several Kernel development Basics .
+
* [https://github.com/SAtacker/kernel_learn kernel learn] is a repo I had created for kernel learning purpose in which I had learned Kernel module development Basics .
 
* I have realised the beauty of embedded systems after working on esp32 dev board and reading [http://exploringbeaglebone.com/ Exploring Linux with Beaglebone by  Derek Molloy] while in [https://www.sravjti.in/ Society of Robotics and Automation] as a core team member.  
 
* I have realised the beauty of embedded systems after working on esp32 dev board and reading [http://exploringbeaglebone.com/ Exploring Linux with Beaglebone by  Derek Molloy] while in [https://www.sravjti.in/ Society of Robotics and Automation] as a core team member.  
 
* This is the first time i am participating in GSoC
 
* This is the first time i am participating in GSoC
Line 36: Line 36:
 
== Description ==
 
== Description ==
  
* As we all know , nearly all of the user operations in Linux can be done using shell commands , scripts and Linux Userspace Api for advanced users. But all that being said for an average user and sometimes in production these steps can be repetitive and time consuming. For example- Simply sharing network i.e. editing iptables and enabling packet forwarding with Pocketbeagle is an uphill task without a script provided. However running scripts could be dangerous. Even adding a USB gadget without [https://github.com/RobertCNelson/boot-scripts/blob/master/boot/bbai_usb_gadget.sh rcn-ee's boot script] is definitely difficult.  
+
* As we all know , nearly all of the user operations in Linux can be done using shell commands , scripts and Linux Userspace Api for advanced users. But all that being said for an average user and sometimes in production these steps can be repetitive and time consuming. For example- Simply sharing network i.e. editing iptables and enabling forwarding on the host pc is an uphill task without a script provided. However running scripts could be dangerous.
 
* Enabling the PRU and loading the firmware is much daunting and unless anybody goes through their usage Documentations it will be difficult.  
 
* Enabling the PRU and loading the firmware is much daunting and unless anybody goes through their usage Documentations it will be difficult.  
* Not only does it makes beagle devices more friendly but provides an edge to beagleboard over other similar platforms.
 
 
* Hence '''I propose beagle-config''' which is a terminal based UI application that brings down the steep curve and enables anybody to config their beagle device as they wish. Also a host side application to enable ICS
 
* Hence '''I propose beagle-config''' which is a terminal based UI application that brings down the steep curve and enables anybody to config their beagle device as they wish. Also a host side application to enable ICS
 +
* Not only does it makes beagle devices more friendly but provides an edge to beagle devices over other similar platforms.
 
* Also while configuring sometimes if the script has hard coded values it makes difficult for the user to go back to default configurations. With beagle-config that won't be a problem anymore
 
* Also while configuring sometimes if the script has hard coded values it makes difficult for the user to go back to default configurations. With beagle-config that won't be a problem anymore
 
* '''Goal''' : Beagle-Config aims to provide the functionality to make the most common low level configuration changes in beagle devices easily and providing a terminal UI to do the same as well as a host side application for ICS
 
* '''Goal''' : Beagle-Config aims to provide the functionality to make the most common low level configuration changes in beagle devices easily and providing a terminal UI to do the same as well as a host side application for ICS
Line 46: Line 46:
  
 
* Beagle-Config consists of a host side application developed with cross platform framework Qt .  
 
* Beagle-Config consists of a host side application developed with cross platform framework Qt .  
* Here are few details of the beagle-config on user (board) side which will use bash, C/C++ as back end for low level access to linux's userspace api and [https://github.com/ArthurSonzogni/FTXUI FTXUI] for frontend.
+
* Beagle-Config on user (board) side which will use bash, C/C++ as back end for low level access to linux's userspace api and [https://github.com/ArthurSonzogni/FTXUI FTXUI] for frontend.
* All the below config options are stored in user's home directory with .beaglec
+
* All the configuration options are stored in user's home directory inside ~/beagleconf.json
 
* A restore to defaults option  
 
* A restore to defaults option  
* Light Vs Dark theme chooser
 
  
 
== Host ==
 
== Host ==
* Internet Connection Sharing Enabling
+
* Internet Connection Sharing Enabling nn linux as well as  windows
On linux as well as  windows
+
* console for SSH within the application
* SSH within the application
 
  
 
==User (Board) ==
 
==User (Board) ==
Line 61: Line 59:
  
 
* PRU enable/disable
 
* PRU enable/disable
This will enable hobbyists to enable / disable their PRUs if they want to test their PRU code in c or in simppru .
+
This will enable hobbyists to enable / disable their PRUs (/var/lib/cloud9/common/Makefile TARGET=gpio.prux start) if they want to test their PRU code in c or in simppru (Checks and asks if they want to install) .
 
Example -
 
Example -
 
                 PRU Conf
 
                 PRU Conf
Line 67: Line 65:
 
                         PRU 2 Enable Disable
 
                         PRU 2 Enable Disable
 
* GPIO configuration
 
* GPIO configuration
Enabling a GPIO pin for input/output
+
Enabling a GPIO pin for input/output using config-pin
 
Example -  
 
Example -  
 
                 GPIO 18 -
 
                 GPIO 18 -
 
                         Enable Disable Set Value
 
                         Enable Disable Set Value
 +
For beaglebone blue motor driver, servo driver configurations
  
 
* Internet Sharing and Client Configurations
 
* Internet Sharing and Client Configurations
Line 86: Line 85:
  
 
* eMMC stats
 
* eMMC stats
Enables users to extend the sd card partition size if avaible
+
Enables users to extend the sd card partition size if available
 
Example -  
 
Example -  
 
               eMMC Storage        Total 52 %
 
               eMMC Storage        Total 52 %
 
                     Free            --------
 
                     Free            --------
 
                     Extend          --------
 
                     Extend          --------
 +
 +
 +
* Freeze Packages
 +
apt-mark hold <package> and make a note of it in json
  
 
* Wireless Configurations
 
* Wireless Configurations
 
For wireless enabled devices like beaglebone black wireless configuring Access Point names , mDNS configurations, etc
 
For wireless enabled devices like beaglebone black wireless configuring Access Point names , mDNS configurations, etc
  
* Sensor Configurations
+
* Sensor Stats and Configurations
If beagle bone has onboard sensors then enabling them , viewing stats like charging status, battery status , power consumption, etc.
+
If beagle bone has onboard sensors then enabling them , viewing stats
 
+
For ex. on Beaglebone Blue 9-axis IMU, barometer,thermometer, and a balancing LiPo charger are present
* Audio Configurations
 
If beagle supports audio on board Specify Audio Output
 
  
 
* Password
 
* Password
Line 109: Line 110:
 
* User LED
 
* User LED
 
Configure the USR Leds on the board. Their frequency and events.  
 
Configure the USR Leds on the board. Their frequency and events.  
 +
 +
* Firmware Update
 +
Firmware - apt update and upgrade to update your system,
 +
  
 
=== Display Options ===
 
=== Display Options ===
Line 117: Line 122:
 
=== Interfacing Options ===
 
=== Interfacing Options ===
 
* Cape Configurations
 
* Cape Configurations
 +
Performs apt install bb-cape-overlays 
 
If a beagle board and its associated cape needs a configuration , this can be configured here easily.
 
If a beagle board and its associated cape needs a configuration , this can be configured here easily.
 
* Camera
 
Enable any standard camera interface and additional configurations
 
  
 
* SSH
 
* SSH
 
Configure ssh , enable / disable and setup password
 
Configure ssh , enable / disable and setup password
  
* SPI and I2C
+
* Provide an easy interface to manage uboot overlays
Enable/disable SPI and I2C interfaces and automatic loading of the SPI / I2C kernel modules if there are any existing.
+
U-Boot /boot/uEnv.txt configuration in /boot/uEnv.txt:
 
+
                    enable_uboot_overlays=1
* USB Gadget configurations
+
                To Disable eMMC:
Configures usb cdc-acm-ecm gadget using libusbgx in the back end.
+
                    disable_uboot_overlay_emmc
 
+
                To Disable HDMI VIDEO & AUDIO:
* Provide an easy interface to add overlays to device trees
+
                    disable_uboot_overlay_video
For example -  
+
                    disable_uboot_overlay_audio
    Select Node -
+
                    disable_uboot_overlay_wireless
      Select Property
+
                    disable_uboot_overlay_adc
            Edit Property
 
  Add Node -
 
      Add Alias
 
          Add Address
 
          Add Property
 
          Add register address
 
  
 
* Overlay File System
 
* Overlay File System
Line 147: Line 144:
 
* Timezone
 
* Timezone
 
Select your local time zone, starting with the region, e.g. India, then selecting a city, e.g. Mumbai. Type a letter to skip down the list to that point in the alphabet.
 
Select your local time zone, starting with the region, e.g. India, then selecting a city, e.g. Mumbai. Type a letter to skip down the list to that point in the alphabet.
 
* Keyboard
 
Configures Keyboard layout
 
  
 
* Update
 
* Update
Line 169: Line 163:
 
|-
 
|-
 
| 17/05/2021 to 07/06/2021 || Community Bonding ||  
 
| 17/05/2021 to 07/06/2021 || Community Bonding ||  
* Complete College exams , vivas, practicals and stuff
+
* Before it begins Complete College exams , vivas, practicals and stuff
 
* Make sure that stuff for project is available
 
* Make sure that stuff for project is available
 
* Coding Begins
 
* Coding Begins
Line 177: Line 171:
 
* Implement a basic TUI with basic operations like USR LED enable, disable, frequency
 
* Implement a basic TUI with basic operations like USR LED enable, disable, frequency
 
* Add  
 
* Add  
# Wireless  
+
# Network (ICS and Wireless settings)
 
# ssh  
 
# ssh  
 
# timezone  
 
# timezone  
Line 186: Line 180:
 
# PRU  
 
# PRU  
 
# GPIO  
 
# GPIO  
# eMMC resizer and stats
+
# eMMC stats and sd card resizer
 
configurations
 
configurations
 
|-
 
|-
 
| 28/06/2021 || Milestone #3 ||  
 
| 28/06/2021 || Milestone #3 ||  
* Integrate libusbgx for providing gadget schemes
+
* Add
* Use or implement similar functionality as in gadget tools
+
# Sensor stats and
# USB gadget
+
# Display
 
# boot  
 
# boot  
# sensor
+
# Password
 +
# Freeze Packages
 
configurations
 
configurations
 
|-
 
|-
| 05/07/2021 - 10/07/2021 || Milestone #4 ||  
+
| 05/07/2021 - 10/07/2021 || Milestone #4 ||
* Eliminate the boot scripts for usb-gadget configuration
 
 
* Review the configurations for errors   
 
* Review the configurations for errors   
 
* Documentation for everything till now
 
* Documentation for everything till now
Line 204: Line 198:
 
| 17/07/2021 || Milestone #5 ||  
 
| 17/07/2021 || Milestone #5 ||  
 
* Add  
 
* Add  
# Sensors
+
# U-boot
# Audio
 
# Display
 
* Add
 
# Cape
 
# Wireless
 
 
# File System  
 
# File System  
 +
# Firmware Update
 
configurations
 
configurations
 
|-
 
|-
 
| 24/07/2021 || Milestone #6 ||   
 
| 24/07/2021 || Milestone #6 ||   
 
* Build A Host side Qt application to enable ICS
 
* Build A Host side Qt application to enable ICS
* Add SSH within the Application itself
+
* Add SSH console within the Application itself
 
|-
 
|-
 
| 31/07/2021 - 03/07/2021|| Milestone #7 ||  
 
| 31/07/2021 - 03/07/2021|| Milestone #7 ||  
Line 223: Line 213:
 
|-
 
|-
 
| 10/08/2021 || Milestone #8 ||  
 
| 10/08/2021 || Milestone #8 ||  
* Compile with other latest kernels  
+
* Compile user(board) application with other latest kernels  
* Test the kernel modules and Verify the functionality
+
* Test the Host Application for cross platform functionality
* Test the Application for cross platform functionality
 
 
|-
 
|-
 
| 17/08/2021 || Milestone #9 ||  
 
| 17/08/2021 || Milestone #9 ||  
Line 231: Line 220:
 
* Document If anything remaining
 
* Document If anything remaining
 
* Add final About page
 
* Add final About page
* Distribute a debian package
+
* Distribute a Debian package
* Distribute Windows executables
+
* Distribute Windows executable
 
|-
 
|-
 
| 24/08/2021 || Milestone #10 ||  
 
| 24/08/2021 || Milestone #10 ||  
 
* Submit final work product and final mentor evaluation
 
* Submit final work product and final mentor evaluation
* Completion of youtube video
+
* Completion of YouTube video
 
|-
 
|-
 
| 31/08/2021 || Milestone #11 || Completion of GSoC
 
| 31/08/2021 || Milestone #11 || Completion of GSoC
Line 244: Line 233:
 
===Experience and approach===
 
===Experience and approach===
 
* Previously I have worked with Qt and Boost.ASIO . [https://github.com/SAtacker/pid-tuning-gui/tree/satacker/cpp_port PID-Tuning-GUI] is an application that sends data to ESP32 micro controller which supports WiFi connectivity. Handled Application threads and Plotting of data as well as sending user input to microcontroller.
 
* Previously I have worked with Qt and Boost.ASIO . [https://github.com/SAtacker/pid-tuning-gui/tree/satacker/cpp_port PID-Tuning-GUI] is an application that sends data to ESP32 micro controller which supports WiFi connectivity. Handled Application threads and Plotting of data as well as sending user input to microcontroller.
* [https://github.com/SAtacker/kernel_learn kernel learn] is a repo I had created for kernel learning purpose in which I had learned several Kernel development Basics .
+
* [https://github.com/SAtacker/kernel_learn kernel learn] is a repository I had created for kernel learning purpose in which I had learned several Kernel development Basics .
* I have played with pocketbeagle for a month and learned a lot about u-boot, device trees and Loadable Kernel Modules.
+
* I have played with Pocketbeagle for a month and learned a lot about u-boot, device trees and Loadable Kernel Modules.
 
* This gives me best of both the worlds embedded as well as a bit in frontend (Qt).  
 
* This gives me best of both the worlds embedded as well as a bit in frontend (Qt).  
  
Line 262: Line 251:
  
 
== Future Work ==
 
== Future Work ==
 +
* Theme options
 
* Flashing functionality can be added instead of making the user download a third part application like etcher
 
* Flashing functionality can be added instead of making the user download a third part application like etcher
 
* An IDE within the beagle-config host
 
* An IDE within the beagle-config host

Revision as of 03:45, 6 April 2021

Proposal for Beagle Config

Status

  • Pre-application phase

Proposal

  • Completed all the general requirements
  • Completed "Hello Wolrd" of cross compilation mentioned in the requirements list.
  • Sent a PR to the mentioned upstream #145

About You

About Your Project

  • Project name: Beagle Config

Description

  • As we all know , nearly all of the user operations in Linux can be done using shell commands , scripts and Linux Userspace Api for advanced users. But all that being said for an average user and sometimes in production these steps can be repetitive and time consuming. For example- Simply sharing network i.e. editing iptables and enabling forwarding on the host pc is an uphill task without a script provided. However running scripts could be dangerous.
  • Enabling the PRU and loading the firmware is much daunting and unless anybody goes through their usage Documentations it will be difficult.
  • Hence I propose beagle-config which is a terminal based UI application that brings down the steep curve and enables anybody to config their beagle device as they wish. Also a host side application to enable ICS
  • Not only does it makes beagle devices more friendly but provides an edge to beagle devices over other similar platforms.
  • Also while configuring sometimes if the script has hard coded values it makes difficult for the user to go back to default configurations. With beagle-config that won't be a problem anymore
  • Goal : Beagle-Config aims to provide the functionality to make the most common low level configuration changes in beagle devices easily and providing a terminal UI to do the same as well as a host side application for ICS

Implementation Details

  • Beagle-Config consists of a host side application developed with cross platform framework Qt .
  • Beagle-Config on user (board) side which will use bash, C/C++ as back end for low level access to linux's userspace api and FTXUI for frontend.
  • All the configuration options are stored in user's home directory inside ~/beagleconf.json
  • A restore to defaults option

Host

  • Internet Connection Sharing Enabling nn linux as well as windows
  • console for SSH within the application

User (Board)

System Options

The system options sub menu allows you to make configuration changes to various parts of the boot, login and networking process, along with some other system level changes.

  • PRU enable/disable

This will enable hobbyists to enable / disable their PRUs (/var/lib/cloud9/common/Makefile TARGET=gpio.prux start) if they want to test their PRU code in c or in simppru (Checks and asks if they want to install) . Example -

               PRU Conf
                       PRU 1 Enable Disable
                       PRU 2 Enable Disable
  • GPIO configuration

Enabling a GPIO pin for input/output using config-pin Example -

                GPIO 18 -
                       Enable Disable Set Value

For beaglebone blue motor driver, servo driver configurations

  • Internet Sharing and Client Configurations

Enables users to share their host internet within a click Example -

               Host 
                   Host A
                       Enable Internet
                       Advanced
                               Set IP gateway
                       Return to Defaults
               Host Name           BBB
                   Edit 
               Country Code       <Select Menu>
  • eMMC stats

Enables users to extend the sd card partition size if available Example -

              eMMC Storage        Total 52 %
                   Free            --------
                   Extend          --------


  • Freeze Packages

apt-mark hold <package> and make a note of it in json

  • Wireless Configurations

For wireless enabled devices like beaglebone black wireless configuring Access Point names , mDNS configurations, etc

  • Sensor Stats and Configurations

If beagle bone has onboard sensors then enabling them , viewing stats For ex. on Beaglebone Blue 9-axis IMU, barometer,thermometer, and a balancing LiPo charger are present

  • Password

Configure passwords along with addition of users, groups

  • Boot / Auto login

We can configure whether to boot in desktop mode or using just console enabled. Add option to login automatically.

  • User LED

Configure the USR Leds on the board. Their frequency and events.

  • Firmware Update

Firmware - apt update and upgrade to update your system,


Display Options

  • Resolution

Enable configuration of HDMI/DVI if the board supports it

Interfacing Options

  • Cape Configurations

Performs apt install bb-cape-overlays If a beagle board and its associated cape needs a configuration , this can be configured here easily.

  • SSH

Configure ssh , enable / disable and setup password

  • Provide an easy interface to manage uboot overlays

U-Boot /boot/uEnv.txt configuration in /boot/uEnv.txt:

                   enable_uboot_overlays=1
               To Disable eMMC:
                   disable_uboot_overlay_emmc
               To Disable HDMI VIDEO & AUDIO:
                   disable_uboot_overlay_video
                   disable_uboot_overlay_audio
                   disable_uboot_overlay_wireless
                   disable_uboot_overlay_adc
  • Overlay File System

Enable or disable a read-only file system

  • Timezone

Select your local time zone, starting with the region, e.g. India, then selecting a city, e.g. Mumbai. Type a letter to skip down the list to that point in the alphabet.

  • Update

Update Beagle-Config

  • About

Show strings, license, author , version name and kernel version

Timeline

Date Status Details
13/04/2021 to 17/05/2021 Application Review Period Right After submitting the application I will go through rigorous set of reference materials
  • Fix my bricked pocketbeagle by debugging using UART output
  • Go through FTXUI documentations
  • Resource for Shell scripting revision
17/05/2021 to 07/06/2021 Community Bonding
  • Before it begins Complete College exams , vivas, practicals and stuff
  • Make sure that stuff for project is available
  • Coding Begins
14/06/2021 Milestone #1
  • Introductory Video
  • Implement a basic TUI with basic operations like USR LED enable, disable, frequency
  • Add
  1. Network (ICS and Wireless settings)
  2. ssh
  3. timezone

configurations

21/06/2021 Milestone #2
  • Add
  1. PRU
  2. GPIO
  3. eMMC stats and sd card resizer

configurations

28/06/2021 Milestone #3
  • Add
  1. Sensor stats and
  2. Display
  3. boot
  4. Password
  5. Freeze Packages

configurations

05/07/2021 - 10/07/2021 Milestone #4
  • Review the configurations for errors
  • Documentation for everything till now
17/07/2021 Milestone #5
  • Add
  1. U-boot
  2. File System
  3. Firmware Update

configurations

24/07/2021 Milestone #6
  • Build A Host side Qt application to enable ICS
  • Add SSH console within the Application itself
31/07/2021 - 03/07/2021 Milestone #7
  • Documentation of everything till now
  • Brief overview and discussion with mentor
  • Bring in required changes
10/08/2021 Milestone #8
  • Compile user(board) application with other latest kernels
  • Test the Host Application for cross platform functionality
17/08/2021 Milestone #9
  • Add additional configurations for updates
  • Document If anything remaining
  • Add final About page
  • Distribute a Debian package
  • Distribute Windows executable
24/08/2021 Milestone #10
  • Submit final work product and final mentor evaluation
  • Completion of YouTube video
31/08/2021 Milestone #11 Completion of GSoC


Experience and approach

  • Previously I have worked with Qt and Boost.ASIO . PID-Tuning-GUI is an application that sends data to ESP32 micro controller which supports WiFi connectivity. Handled Application threads and Plotting of data as well as sending user input to microcontroller.
  • kernel learn is a repository I had created for kernel learning purpose in which I had learned several Kernel development Basics .
  • I have played with Pocketbeagle for a month and learned a lot about u-boot, device trees and Loadable Kernel Modules.
  • This gives me best of both the worlds embedded as well as a bit in frontend (Qt).

Contingency

  • There is a good documentation of FXTUI and Qt
  • Plenty of examples to get me through if I am stuck.
  • Past experience regarding Qt and DOM manipulation combined with experience in embedded and loadable kernel modules development will pay off in this duration .

Benefit

  • Having a seamless one click experience to configure is enjoyed by any user , be it production or a robotics team.
  • Provides a configuration file to the users. Remembers defaults and helps in accidental modification to low level configurations.

Quotes

Misc

  • For hello_world of cross compilation , sent a PR to the mentioned upstream #145

Future Work

  • Theme options
  • Flashing functionality can be added instead of making the user download a third part application like etcher
  • An IDE within the beagle-config host