Hi all,
I’m Sahil Jaiswal, working on the project “Upstream Greybus Module for Zephyr” as part of GSoC 2025, under the mentorship of @ayush1325 , @vaishnav , and @moto-timo .
This thread will serve as a weekly log of my progress throughout the summer. Each post will outline the following:
Accomplishments
Resolutions to blockers
Ongoing blockers
Plans for the current week
Feel free to share any suggestions or feedback. Looking forward to an exciting and productive journey with you all!
2 Likes
Since Your Mentors Cannot Help You with Direct Answers,
I was thinking you could show off your communication errors
that are outstanding.
If this is not okay, I understand. I figured I could do some background research and look up ideas on the naming scheme of the errors and if there are any related coding blocks in association.
Seth
P.S. I know in GSoC, people and especially your mentors, cannot give a 100%, definitive answer to you because you need to handle your own use case in GSoC. So, I can understand if you do not want to share as of now. In any light, good luck and keep it up. You are making good headway.
Week 12 Report
Accomplishments:
- Raised PR for Greybus updates (PR: GitHub Link).
- Focused Twister effort on Greybus I2C (native_sim), enumerated tests and attempted discovery/build.
- Debugged Twister logs and tried mapped failures across YAML parsing, Kconfig, DTS, and DT to manifest stages.
Resolutions to Blockers:
Ongoing Blockers (Twister):
- Inconsistent test discovery (testcase.yaml structure/filters suspected).
- Platform selection gaps (native_sim filtering/overlays).
- Devicetree overlay issues (unknown/mismatched compatibles and vendor prefixes).
- Kconfig configuration aborts (undefined/renamed symbols).
- DT manifest conversion error from gbutil/manifesto: “invalid id for [None] (cannot be 0)” on string/interface IDs.
- Intermittent build error: “device.h: No such file or directory.”
Plans for Next Week:
- Upload Final Video.
- Final Summary Post.
- Submit Final Report.
Google Summer of Code 2025 – Final Evaluation Report
Project: Upstream Greybus Module for Zephyr
Organization: BeagleBoard.org
Student: Sahil Jaiswal
Mentors: @ayush1325, @vaishnav, @moto-timo
Project Size: 350 hours
Introduction
Greybus is a modular communication protocol originally developed for Project Ara and later extended to connect peripherals in embedded systems. Currently, the Greybus module for Zephyr exists as an out-of-tree module, which makes it:
- Hard to maintain
- Difficult for contributors
- Non-standard (depends on MikroBUS manifest, which is not part of the official Greybus specification).
The objective of my GSoC 2025 project was to upstream the Greybus module into mainline Zephyr. This project builds upon the Replace GBridge (2023) effort and aims to establish a long-term, testable, and community-friendly Greybus integration.
Project Goals
- Revive testing infrastructure for Greybus module.
- Make MikroBUS manifest optional, since it is not part of Greybus spec.
- Ustream the module as an official Zephyr module.
- Use Greybus abstractions inside greybus-host firmware for BeagleConnect.
Major Accomplishments
1. MikroBUS Manifest Optionalization
- Added new Kconfig option to enable/disable MikroBUS support.
- Introduced conditional compilation for MikroBUS-specific code.
- Verified binary size reduction (approx 70KB) when MikroBUS support is disabled.
- Ensured the module remains spec-compliant when MikroBUS is disabled.
2. Greybus Manifest Compliance
- Identified root cause of manifest rejection on BeaglePlay host: presence of non-spec descriptors (
DEVICE 0x07
, PROPERTY
, MIKROBUS
).
- Refactored default manifest to strictly follow Greybus spec (
INTERFACE
, BUNDLE
, CPORT
).
- Moved MikroBUS-specific descriptors behind Kconfig option.
- Successfully restored Greybus I2C instantiation on BeaglePlay.
- Verified functionality by instantiating OPT3001@0x44 and HDC2010@0x41 sensors and checking via
iio_info
.
3. CI/CD Infrastructure Modernization
- Revived existing GitHub Actions workflows and migrated to
zephyrprojectrtos/ci:latest
.
- Resolved
west
PATH errors and CMake misconfigurations.
- Fixed “No space left on device” CI failure by restructuring builds.
- Introduced
action-zephyr-setup
for cleaner environments.
- Achieved 50% CI build time reduction (7–8 minutes to 3–4 minutes).
- Migrated CC1352 host firmware from GitLab to GitHub with automated builds & artifact uploads.
4. Debugging CRC Failures in Greybus Communication
- Persistent CRC failures in host firmware on latest Zephyr.
- Added enhanced logging in Greybus driver for deeper analysis.
- Tested with micropython firmware and Zephyr builds on CC1352P7.
- Identified partial workarounds but left as an open for future work.
5. Twister Testing Integration (open for future work)
- Located Greybus Twister test suites and integrated initial builds (focus: Greybus I2C on
native_sim
).
- Debugged failures:
- Inconsistent test discovery.
- Devicetree overlay mismatches (unknown compatibles).
- Kconfig aborts (undefined/renamed symbols).
- Manifest conversion errors from gbutil/manifesto (
invalid id for [None]
).
Blockers & Resolutions
Blocker |
Resolution |
CRC failures in gb-beagleplay communication |
Added detailed logging, tested alternate firmwares, partial resolution but still open. |
Manifest rejection on host |
Refactored manifests to spec compliance, gated MikroBUS via Kconfig. |
CI workflow failures (“no space left on device”) |
Updated containers, fixed PATH & CMake, migrated to modern setup. |
Twister integration issues |
Debugged overlays, Kconfig, YAML parsing. Open for future work. |
Weekly Highlights
- Week 0–2: Setup environment, revived CI, began MikroBUS optionalization.
- Week 3–5: Debugged CRC failures, fixed CI build pipeline, reduced CI runtime.
- Week 6–8: Migrated CC1352 host repo, strict manifest compliance fixes, began Twister integration.
- Week 9–11: Resolved manifest rejection, verified I2C sensors via Greybus, restored iio_info detection.
- Week 12: Raised PR for Greybus updates, attempted automated testing integration, prepared final documentation & video.
Contributions
Possible Future Work
- Complete Twister-based automated test integration for Greybus.
- Fully resolve CRC communication failures on BeaglePlay host.
- Submit finalized module for Upstreaming into mainline Zephyr.
- Extend testing to cover more Greybus subsystems.
Learnings & Skills Gained
Over the summer, I gained hands-on experience in:
- Zephyr RTOS internals (device-tree, Kconfig, Twister testing).
- Embedded Firmware Flashing & Debugging (BeaglePlay, CC1352P7, BeagleConnect Freedom).
- Greybus Protocol (manifest parsing, spec compliance, I2C auto-instantiation).
- Linux System Debugging (
/sysfs
, iio_info
, overlays).
- CI/CD for Embedded Systems (GitLab CI, GitHub Actions).
- Collaborative open-source development (PR workflow, discussions with mentors, community contributions).
Acknowledgments
I am deeply grateful to my mentors @ayush1325, @vaishnav, and @moto-timo for their constant support, reviews, and encouragement throughout the project. Thanks also to the BeagleBoard.org and Zephyr communities for their invaluable documentation, feedback, and infrastructure support.
Conclusion
This GSoC project is a advancement in maintainability, portability, and spec compliance of the Greybus module for Zephyr, while also strengthening the BeagleConnect ecosystem.
I’m excited to continue contributing beyond GSoC — especially in automated testing and upstreaming efforts — and to support future contributors who will build upon this work.
Miscellaneous
1 Like