Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
09bdd27
Introduced new multi-book paradigm to handle separate "Tracks" for
Jul 16, 2025
62e88a5
Add architecture section and diagrams
Jul 18, 2025
e8f544f
Tracks sub-book content added
Jul 18, 2025
0570f4a
update the publishing yaml
Jul 21, 2025
ba094cc
update the publishing yaml
Jul 21, 2025
077f873
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Jul 22, 2025
9c357d5
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Jul 22, 2025
d849fc4
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Jul 22, 2025
68b7233
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Jul 22, 2025
fcbce6b
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Jul 22, 2025
b9cc3e0
index redirect added
Jul 22, 2025
a343cc1
Update EC build overview
Jul 22, 2025
7a51e84
Introduced new multi-book paradigm to handle separate "Tracks" for
Jul 16, 2025
9b148a9
Add architecture section and diagrams
Jul 18, 2025
bef0011
Tracks sub-book content added
Jul 18, 2025
ff71eae
update the publishing yaml
Jul 21, 2025
b4e2ef3
index redirect added
Jul 22, 2025
abed037
Update EC build overview
Jul 22, 2025
477b9fd
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 8, 2025
5fa4f30
Introduced new multi-book paradigm to handle separate "Tracks" for
Jul 16, 2025
dcb6125
Add architecture section and diagrams
Jul 18, 2025
72a12d6
Tracks sub-book content added
Jul 18, 2025
a2153d0
update the publishing yaml
Jul 21, 2025
085e16a
index redirect added
Jul 22, 2025
8ce2184
Update EC build overview
Jul 22, 2025
b0162d6
Introduced new multi-book paradigm to handle separate "Tracks" for
Jul 16, 2025
510e16e
Add architecture section and diagrams
Jul 18, 2025
6cc91d2
Tracks sub-book content added
Jul 18, 2025
6b770a1
update the publishing yaml
Jul 21, 2025
2e6ad36
post-merge reconcile
Aug 13, 2025
5fc4119
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 13, 2025
28ab3be
Fix yaml
Aug 13, 2025
4134a24
Fix publishing yaml
Aug 13, 2025
47f5342
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 13, 2025
e90d44d
Post merge fixes
Aug 13, 2025
fc23bd7
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 13, 2025
01413a2
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 13, 2025
2a62e69
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 13, 2025
d32a052
Fix flaws in publish yaml
Aug 13, 2025
0dcaad7
Fix flaws in publish yaml
Aug 13, 2025
a4dad29
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 13, 2025
686ad5e
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 13, 2025
946d0b7
Merge branch 'multiple-entry-points' of github.com:tremho/odp-documen…
Aug 13, 2025
3f8b99e
Fix Yaml command
Aug 13, 2025
61a664d
Fix typo - wrong word
Aug 14, 2025
d38be6b
Typo fix - stray character
Aug 14, 2025
545d94d
Clarify and correct registration pattern psuedocode
Aug 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 79 additions & 24 deletions .github/workflows/publish-guide-book.yml
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
# @file publish-mdbook.yml
#
# A Github workflow that compiles an mdbook located at guide_book/* and publishes it
# to the repository's github page.
#
name: Build and Publish Guide Book
name: Build and Publish ODP Books

on:
# Trigger this workflow manually if necessary
workflow_dispatch:

# Triggers this workflow if a commit is pushed to main in which a file in
# bookshelf/** has been updated
push:
branches:
- main
paths:
- guide_book/**
- tracks/**
- .github/workflows/publish-guide-book.yml
- tracks/**
- .github/workflows/publish-guide-book.yml

jobs:
build:
name: Build Guide Book
name: Build All Books
runs-on: ubuntu-latest

steps:
Expand All @@ -29,39 +24,99 @@ jobs:
- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Install MdBook
run: cargo install mdbook

- name: Install Mermaid
run: cargo install mdbook-mermaid
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-mermaid

- name: Prepare Output Folders
run: |
mkdir -p .temp/guide
mkdir -p .temp/tracks
- name: Install mdBook and Plugins
run: |
cargo install mdbook
cargo install mdbook-mermaid

- name: Build the Guide Book
- name: Prepare Output Folders
run: |
mkdir -p .temp/guide
mkdir -p .temp/tracks

- name: Build Main Guide Book
run: |
cd guide_book
mdbook clean
mdbook clean
mdbook build
cp -r book/* ../.temp/guide/

- name: Prepare and Build Track Books
run: |
# Reusable copy function for TOML and mermaid files
for TRACK in contributor embedded_controller integrator patina security value_proposition; do
cp -r guide_book/book.toml tracks/$TRACK/
cp -r guide_book/mermaid* tracks/$TRACK/
done

- name: Upload Github Pages Site Artifact
# Shared content for specific tracks
mkdir -p tracks/value_proposition/src/why
cp -r guide_book/src/why/* tracks/value_proposition/src/why/

cp -r guide_book/src/intro/concepts/patina.md tracks/patina/src/patina_concepts.md

cp -r guide_book/src/intro/concepts/Embedded_controller.md tracks/embedded_controller/src/general.md
cp -r guide_book/src/architecture/embedded_controller.md tracks/embedded_controller/src/architecture.md
cp -r guide_book/src/architecture/ec_components.md tracks/embedded_controller/src/component_arch.md
cp -r guide_book/src/architecture/ec_services.md tracks/embedded_controller/src/ec_services_arch.md
mkdir -p tracks/embedded_controller/src/images
cp -r guide_book/src/intro/concepts/images/simplified_layers.png tracks/embedded_controller/src/images/
cp -r guide_book/src/intro/concepts/images/odp_arch.png tracks/embedded_controller/src/images/
cp -r guide_book/src/intro/concepts/EC_Services.md tracks/embedded_controller/src/secure_ec_services.md

cp -r guide_book/src/why/secure_trust.md tracks/security/src/secure_trust.md
cp -r guide_book/src/architecture/security_architecture.md tracks/security/src/security_architecture.md
cp -r guide_book/src/architecture/secure_boot.md tracks/security/src/secure_boot.md
cp -r guide_book/src/architecture/secure_firmware_updates.md tracks/security/src/secure_firmware_updates.md
cp -r guide_book/src/architecture/secure_ec_services.md tracks/security/src/secure_ec_services.md

# Build each track
for TRACK in contributor embedded_controller integrator patina security value_proposition; do
cd tracks/$TRACK
mdbook clean
mdbook build
mkdir -p ../../.temp/tracks/$TRACK/
cp -r book/* ../../.temp/tracks/$TRACK/
cd ../..
done

- name: Create Root Redirect to Guide Book
run: |
echo '<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=guide/index.html"></head><body></body></html>' > .temp/index.html

- name: Upload Pages Artifact
uses: actions/upload-pages-artifact@v3
with:
name: github-pages
path: guide_book/book/
path: .temp/

publish:
name: Publish Guide Book
needs: [build]
name: Publish Site
needs: build
runs-on: ubuntu-latest

environment:
name: github-pages # 👈 Required for GitHub Pages deployment
name: github-pages

permissions:
id-token: write
contents: read
pages: write

steps:
- name: Deploy Github Page
- name: Deploy GitHub Pages
uses: actions/deploy-pages@v4
with:
token: ${{ github.token }}
artifact_name: github-pages
artifact_name: github-pages

63 changes: 61 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,73 @@ Cargo.lock
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb

# VSCODE settings
.vscode

# Ignore book output
book

# Ignore local site build
.temp/guide
.temp/tracks

# Ignore common copied files
# These are copied from the guide book to the tracks
# and are not needed in the repository
tracks/advisor/book.toml
tracks/advisor/mermaid-init.js
tracks/advisor/mermaid.min.js
tracks/contributor/book.toml
tracks/contributor/mermaid-init.js
tracks/contributor/mermaid.min.js
tracks/embedded_controller/book.toml
tracks/embedded_controller/mermaid-init.js
tracks/embedded_controller/mermaid.min.js
tracks/engineer/book.toml
tracks/engineer/mermaid-init.js
tracks/engineer/mermaid.min.js
tracks/integrator/book.toml
tracks/integrator/mermaid-init.js
tracks/integrator/mermaid.min.js
tracks/patina/book.toml
tracks/patina/mermaid-init.js
tracks/patina/mermaid.min.js
tracks/security/book.toml
tracks/security/mermaid-init.js
tracks/security/mermaid.min.js
tracks/value_proposition/book.toml
tracks/value_proposition/mermaid-init.js
tracks/value_proposition/mermaid.min.js

tracks/embedded_controller/src/general.md
tracks/embedded_controller/src/architecture.md
tracks/embedded_controller/src/component_arch.md
tracks/embedded_controller/src/ec_services_arch.md
tracks/embedded_controller/src/images/
tracks/embedded_controller/src/secure_ec_services.md

tracks/security/src/secure_trust.md
tracks/security/src/security_architecture.md
tracks/security/src/secure_boot.md
tracks/security/src/secure_firmware_updates.md
tracks/security/src/secure_ec_services.md

# Ignore files duplicated for 'tracks'
tracks\value_proposition\src\why
tracks\patina\src\patina_concepts.md

tracks\embedded_controller\src\general.md
tracks\embedded_controller\src\architecture.md
tracks\embedded_controller\src\component_arch.md
tracks\embedded_controller\src\ec_services_arch.md
tracks\embedded_controller\src\images

tracks\security\src\secure_trust.md
tracks\security\src\security_architecture.md
tracks\security\src\secure_boot.md
tracks\security\src\secure_firmware_updates.md
tracks\security\src\secure_ec_services.md

# Ignore file generated by mdbook for return to library in inde
bookshelf/Shelf\ 4\ Specifications/library.html

# Ignore local notes
cheat_sheet.md
Expand Down
72 changes: 65 additions & 7 deletions .temp/build.bat
Original file line number Diff line number Diff line change
@@ -1,12 +1,70 @@
REM make book
md .temp
md .temp\guide
md .temp\tracks
cd guide_book
mdbook clean
mdbook build
REM move into place
xcopy "book\*" ".\..\.temp\guide" /E /I /Y

REM build site directory
cd ..\
md .\.temp
cd .\.temp
md .\guide
cd ..\guide_book
xcopy "book\*" "..\.temp\guide" /E /I /Y
REM copy the common toml and mermaid files
copy ".\book.toml" "..\tracks\contributor\" /Y
copy ".\mermaid*" "..\tracks\contributor\" /Y
copy ".\book.toml" "..\tracks\embedded_controller\" /Y
copy ".\mermaid*" "..\tracks\embedded_controller\" /Y
copy ".\book.toml" "..\tracks\integrator\" /Y
copy ".\mermaid*" "..\tracks\integrator\" /Y
copy ".\book.toml" "..\tracks\patina\" /Y
copy ".\mermaid*" "..\tracks\patina\" /Y
copy ".\book.toml" "..\tracks\security\" /Y
copy ".\mermaid*" "..\tracks\security\" /Y
copy ".\book.toml" "..\tracks\value_proposition\" /Y
copy ".\mermaid*" "..\tracks\value_proposition\" /Y

REM copy content shared across tracks
xcopy ".\src\why\*" "..\tracks\value_proposition\src\why" /E /I /Y
xcopy ".\src\intro\concepts\patina.md" "..\tracks\patina\src\patina_concepts.md" /E /I /Y

copy ".\src\intro\concepts\Embedded_controller.md" "..\tracks\embedded_controller\src\general.md" /Y
copy ".\src\architecture\embedded_controller.md" "..\tracks\embedded_controller\src\architecture.md" /Y
copy ".\src\architecture\ec_components.md" "..\tracks\embedded_controller\src\component_arch.md" /Y
copy ".\src\architecture\ec_services.md" "..\tracks\embedded_controller\src\ec_services_arch.md" /Y
md "..\tracks\embedded_controller\src\images"
copy ".\src\intro\concepts\images\simplified_layers.png" "..\tracks\embedded_controller\src\images\simplified_layers.png" /Y
copy ".\src\intro\concepts\images\odp_arch.png" "..\tracks\embedded_controller\src\images\odp_arch.png" /Y
copy ".\src\intro\concepts\EC_Services.md" "..\tracks\embedded_controller\src\secure_ec_services.md" /Y

copy ".\src\why\secure_trust.md" "..\tracks\security\src\secure_trust.md" /Y
copy ".\src\architecture\security_architecture.md" "..\tracks\security\src\security_architecture.md" /Y
copy ".\src\architecture\secure_boot.md" "..\tracks\security\src\secure_boot.md" /Y
copy ".\src\architecture\secure_firmware_updates.md" "..\tracks\security\src\secure_firmware_updates.md" /Y
copy ".\src\architecture\secure_ec_services.md" "..\tracks\security\src\secure_ec_services.md" /Y



REM make all track books and copy into place
cd ..\tracks\contributor
mdbook clean
mdbook build
xcopy "book\*" "..\..\.temp\tracks\contributor" /E /I /Y
cd ..\embedded_controller
mdbook clean
mdbook build
xcopy "book\*" "..\..\.temp\tracks\embedded_controller" /E /I /Y
cd ..\integrator
mdbook clean
mdbook build
xcopy "book\*" "..\..\.temp\tracks\integrator" /E /I /Y
cd ..\patina
mdbook clean
mdbook build
xcopy "book\*" "..\..\.temp\tracks\patina" /E /I /Y
cd ..\security
mdbook clean
mdbook build
xcopy "book\*" "..\..\.temp\tracks\security" /E /I /Y
cd ..\value_proposition
mdbook clean
mdbook build
xcopy "book\*" "..\..\.temp\tracks\value_proposition" /E /I /Y
27 changes: 18 additions & 9 deletions guide_book/src/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
- [Developer Experience](./why/developer_experience.md)
- [Sustainability and Cost](./why/sustainability.md)
- [Industry Standards](./why/standards.md)
- [Introduction](./intro/welcome.md)
- [Introduction](./intro/getting_started.md)
- [Welcome Developer](./intro/welcome.md)
- [Concepts](./intro/concepts/Concepts.md)
- [A Quick Look at Rust](./intro/concepts/rust_quick_look.md)
- [Patina](./intro/concepts/patina.md)
Expand All @@ -21,6 +22,16 @@
- [Button](./intro/tutorial/UserButton.md)
- [Listener](./intro/tutorial/LEDApi.md)
- [Logic](./intro/tutorial/Logic.md)
- [Architecture](./architecture/architecture.md)
- [Patina Framework](./architecture/patina_framework.md)
- [Component Model](./architecture/patina_components.md)
- [Embedded Controller](./architecture/embedded_controller.md)
- [Component Model](./architecture/ec_components.md)
- [EC Services](./architecture/ec_services.md)
- [Security Model](./architecture/security_architecture.md)
- [Secure Boot](./architecture/secure_boot.md)
- [Firmware Updates](./architecture/secure_firmware_updates.md)
- [Secure EC Services](./architecture/secure_ec_services.md)
- [Tracks of ODP](./tracks.md)
- [What is in ODP?](./what/what.md)
- [Building a virtual laptop](./laptop/laptop.md)
Expand Down Expand Up @@ -88,12 +99,12 @@
- [Integration](./how/ec/integration/integration.md)
-[Integration Tests](./how/ec/integration/integration_tests.md)
- [Embedded Targeting](./how/ec/embedded_target/embedded_targeting.md)
- [Project Board](./how/ec/embedded_target/project_board.md)
- [Dependencies](./how/ec/embedded_target/embedded_dependencies.md)
- [Code Changes](./how/ec/embedded_target/embedded_code_changes.md)
- [Logging](./how/ec/embedded_target/embedded_logging.md)
- [Flashing](./how/ec/embedded_target/embedded_flashing.md)
- [Testing](./how/ec/embedded_target/embedded_testing.md)
- [Project Board](./how/ec/embedded_target/project_board.md)
- [Dependencies](./how/ec/embedded_target/embedded_dependencies.md)
- [Code Changes](./how/ec/embedded_target/embedded_code_changes.md)
- [Logging](./how/ec/embedded_target/embedded_logging.md)
- [Flashing](./how/ec/embedded_target/embedded_flashing.md)
- [Testing](./how/ec/embedded_target/embedded_testing.md)
- [Integrating the Virtual Laptop](./laptop/integrating.md)
- [Summary and Takeaways](./conclusions.md)

Expand All @@ -114,5 +125,3 @@
- [EC Manufacturing Service](./specs/ec_interface/ec-manufacturing-service.md)
- [EC OEM Service](./specs/ec_interface/ec-oem-service.md)
- [Sample System Implementation](./specs/ec_interface/sample-system-implementation.md)


22 changes: 22 additions & 0 deletions guide_book/src/architecture/architecture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# ODP Architecture
The __Open Device Partnership (ODP)__ architecture is designed to provide a modular, scalable, and secure framework for developing embedded systems. Rooted in Rust's safety guarantees and shaped by a philosophy of composable components, ODP offers a consistent foundation for both low-level and system-level firmware development.

ODP spans two distinct domains: The __Patina framework__, a Rust-based system for building DXE-style boot firmware, and the __Embedded Controller (EC)__, architecture, supporting microcontroller-based runtime services and coordination.

Though their implementations differ, these domains are united under the ODP model by shared principles and architectural patterns. Together, they promote a unified approach to firmware engineering that emphasizes safety, reuse, and composability.

![ODP Architecture Patterns](./media/odp_domains.png)
> #### Figure: ODP Architecture Across Domains
> The ODP Core expresses a set of shared design patterns -- such as modularity, safety, and flexibility -- that are applied independently within two distinct ecosystems: Patina (x86 firmware) and Embedded Controller (μC runtime). Each domain develops its own components, tooling, and conventions while adhering to the same architectural principles.


## Common Patterns of ODP
While Patina and EC serve different ends of the firmware spectrum, they share a common set of patterns and priorities that define the ODP approach:
- **Modularity**: ODP components are explicitly modular. Each unit is independently defined and can be composed into larger systems through clearly defined interfaces. This is central to the dependency-injection models used by both Patina and EC's service registry architecture.
- **Safety**: Rust’s type system and ownership model are used to enforce memory and concurrency safety at compile time. This baseline ensures that ODP firmware avoids common pitfalls typical of C-based implementations.
- **Reusability**: Components are designed to be reusable across platforms, configurations, and targets. Traits and message interfaces abstract functionality, enabling code reuse without sacrificing clarity or safety.
- **Flexibility**: The ODP structure supports adaptation to a wide variety of host platforms and runtime environments. This flexibility allows implementers to scale from minimal EC services up to full boot firmware stacks.
- **Community**: ODP is built on open standards and community contributions. This encourages collaboration, knowledge sharing, and the evolution of best practices across the ecosystem, which only enhances the robustness of the architecture and its promises of safety and modularity.


The Open Device Partnership is founded more upon _alignment_ than _unification_ and is supported and extended by the principles of a strong Open Source community, where it will expand and evolve.
Loading