To develop a system to enumerate USB devices from device tree nodes on boot.
GSoC: GSoC entry
This project is currently just a proposal.
School: Michigan Technological University
Country: United States
Primary language: English
Typical work hours: 8AM-5PM US Eastern
Previous GSoC participation: This GSoC project is an opportunity to have a more structured introduction into participating in upstream Linux Kernel development. I have experience working on the X-ES custom kernel branch they maintain to support their products but I would like to make more broad contributions to the community.
About your project
Project name: 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.
I do not have a lot of experience mapping out a project over the course of 3 months and that may be reflected in the project outline.
2017-06-06: Gain understanding of configFS and libcomposite
2017-06-13: Gain an understanding of usb device enumeration and usb function drivers
2017-06-20: Build device tree property outline
2017-06-27: Start interface between device tree and configFS
2017-07-04: Continue interface between device tree and configFS
2017-07-11: Continue interface between device tree and configFS
2017-07-18: Verify USB device discovery and enumeration
2017-07-25: Start interface between USB device and function drivers
2017-08-01: Continue interface betwen USB device and function drivers
2017-08-08: verify USB functionality
2017-08-15: verify USB funcitonality
There are factors that will change this time line including my understanding of the USB subsystem. It may be that after the device listed in the device tree is enumerated, the USB subsystem of the kernel links it to the appropriate function drivers, or the function drivers are linked to the USB device when the device driver is compiled. The answer to this question and other similar to it will be resolved within the first 2 weeks of GSoC as I research the USB kernel subsystem to map out what the project needs to look like.
Experience and approach
I am a fourth year computer science student with a co-op at Extreme Engineering Solutions (X-ES). X-ES produces ruggadized single board computers that run a branch of the Linux kernel that the Linux team at X-ES develops and maintains. As an embedded systems engineer co-op on the Linux team I gained experience working with development on the Linux kernel for embedded systems. Projects I worked on included writing device drivers to interface with a chipset on a SPI bus. This project gave me exposure to working with device trees and writing device drivers to interface with systems over bus communications.
There are many resources online to help with Linux kernel development. Elixir provides a interface to kernel source code that is easy to navigate, forums exist for all aspects of the Linux kernel and its unlikely I will run into a problem dissimilar from problems other people have had in the past. In the event that the forums are of no use there is still the mailing lists.
If successfully completed, what will its impact be on the BeagleBoard.org community? Include quotes from BeagleBoard.org community members who can be found on http://beagleboard.org/discuss and http://bbb.io/gsocchat.
Why do you want to work on this project?
I want to be a contributor to the Linux kernel and this project would give me a structured introduction to the process. This project also allows me to build on my experience from working with X-ES on embedded Linux.