feat(genesis): hito G0 — workspace multi-arch + Cortex-M backend + STM32F7 HAL + blink#1
Merged
Merged
Conversation
…M32F7 HAL + blink
Workspace Cargo con 5 crates y primer ejemplo en HW real.
Crates:
- rugus-core arch-agnostic; trait Arch + scheduler stub +
syscall ABI v0.1 + Errno
- rugus-arch-cortex-m impl Arch para ARMv7-M/v7E-M/v8-M (stub G0;
real en G1)
- rugus-hal solo traits, #![forbid(unsafe_code)]:
GpioPin, SerialPort
- rugus-hal-stm32f7 impl HAL para familia STM32F7 (gpio mínimo,
features por variante f767/f769/f779)
- rugus-runtime panic-probe + defmt-rtt + entry macro para
targets Cortex-M
Ejemplo:
- examples/blink-stm32f769-disco binario standalone con su propio
memory.x, .cargo/config.toml, README. Toggle LD1 (PJ13) usando
rugus-hal-stm32f7::LedPin vía trait rugus-hal::GpioPin.
Docs (docs/):
- ARCHITECTURE capas, deps unidireccionales, trait Arch, política
unsafe por crate
- ROADMAP G0..G7 + G-infinito, métricas objetivo por arch
- PORTING cómo añadir nueva arch (Caso A), nuevo chip (B),
nuevo driver (C); checklist pre-merge
- HAL_TRAITS contrato público GpioPin/SerialPort, planeados
Timer/Rng/EthMac/Display/Crypto/BlockDev,
capacidades chip-specific
- SECURITY_MODEL modelo de amenazas, dominios MPU, boot Ed25519,
OTA dual-bank, trait SecretStore
- SYSCALL_ABI convención por arch (SVC/ECALL/etc), tabla v0.1,
validación de punteros user-space
- INVARIANTS 7 invariantes con mecanismo de verificación
- agent-memory/ project + preferences (P-1..P-7) + README
Infra:
- rustfmt.toml, rust-toolchain.toml con targets futuros documentados
- .github/workflows/ci.yml con matrix por target (preparada para crecer)
- AGENT_LOG.md inicializado con entrada G0
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- .gitattributes normaliza EOL a LF para fuentes; CRLF solo para
*.ps1/*.bat/*.cmd. Elimina los warnings al hacer git add desde
Windows/OneDrive.
- tools/flash-stm32f769-disco.ps1 helper PowerShell para build + flash
+ RTT del ejemplo blink, análogo al que tenía Panel-smartH antes del
refactor.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- README: nueva sección "Qué es Rugus (y qué no)" con tabla de
personalidades por arch + tagline. Rugus es OS con dos personalidades
según el chip (RTOS en MCUs sin MMU, OS general-purpose en SoCs con
MMU), usando un solo codebase via trait Arch.
- README: sección "Referencias canónicas" con xv6, Phil Opp, OSDev,
OSTEP, Tock, Hubris, Embassy, seL4 + manuales ARM/RISC-V.
- ARCHITECTURE: sección "Posicionamiento - RTOS y OS en un solo
codebase" con diagrama de taxonomía y tabla por backend.
- ARCHITECTURE: subsección "QEMU como red de seguridad" — cada arch
backend incluirá un ejemplo qemu-<arch> para CI sin HW; QEMU no
sustituye pruebas on-target pero caza el 80% de bugs de lógica.
- AGENT_LOG: entrada documentando la clarificación.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Arregla las 5 checks rotas y añade los 3 archivos estándar de proyecto
open source que faltaban.
Bugs fixes:
- stm32f7 0.15.1 no tiene feature `critical-section` (asumido por
error). Removida del workspace y de rugus-arch-cortex-m.
- `#[defmt::timestamp]` no es atributo en defmt 0.3+; es macro.
Corregido en rugus-runtime.
- Features per-part en rugus-hal-stm32f7 eran alias sin efecto; el
PAC agrupa por die (stm32f7x9 cubre F769/F779). stm32f767 retirado
(no encaja en ese die).
- cargo fmt: tres líneas BSRR write en gpio.rs excedían 100 cols.
Validación local: build dev/release, fmt, clippy con -D warnings, y
cargo doc — todos verdes.
Higiene open source:
- SECURITY.md política de vulnerabilidades; canal preferido
GitHub Security Advisories, SLAs por severidad
- CODE_OF_CONDUCT.md Contributor Covenant 2.1
- CHANGELOG.md Keep a Changelog format, entrada [0.1.0] G0
AGENT_LOG actualizado con entrada del fix + decisión sobre licencia
(mantener dual MIT/Apache; no cambiar a GPL).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This was referenced Jun 1, 2026
guillo93
added a commit
that referenced
this pull request
Jun 6, 2026
) `TaskSlot.stack_base` pasa de `u32` a `usize`. En los targets Cortex-M `usize == u32` (codegen y bits identicos; los cruces hacia el arch/MPU castean explicitamente a u32), pero en el host de tests (64-bit) el campo preserva el puntero completo sin truncar. Eso permite ejercer por primera vez en host la RECONSTRUCCION COMPLETA de stack de `respawn` (repintar el buffer real + rearmar el frame), antes solo validable en placa. Test host nuevo: respawn_reconstructs_stack_and_resets_task. Ensucia una tarea (hereda prioridad via PI + arma liveness), la mata y la respawnea; verifica Killed->Ready, prioridad reseteada a base, liveness desarmado y stack repintado por completo (high-water 0, prueba de que el fill recorrio el buffer real). Se actualiza el comentario obsoleto del guard test. host-tests 33->34. Validado en placa (sin regresion del cambio usize): F407 selftests PASS + W^X PASS + sandbox MPU contiene bad_app; F769 (telemetria fria) selftests PASS + respawn de bad_app #1/#2/#3 vivo en HW. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
5 tasks
guillo93
added a commit
that referenced
this pull request
Jun 6, 2026
…lar de faults (#97) * F5.C.3: API de ficheros userland por syscall+IPC bajo MPU + log circular de faults Cierra la línea F5.C exponiendo el almacén persistente rugus-fs a una tarea userland (nPRIV, sandboxeada por MPU) con el mismo diseño híbrido que la red (F5.B.2). ABI (rugus-core): - Syscalls fs_open/fs_read/fs_write/fs_close (SVC 0x50..0x53) con FsHooks + register_fs, dispatch fail-closed a Enosys, y trampolines userland — espejo exacto del patrón NetHooks. Nuevo Errno::Enoent (-10). Todo por valor en registros: el contenido viaja por un pool App-RW, ningún puntero cruza la frontera de confianza. rugus-fs: - Módulo faultlog: log circular de faults persistente sobre Rufs (anillo FIFO de CAP ranuras + contador seq persistido). Complementa la telemetría .uninit volátil; power-loss-safe por herencia de Rufs (append + CRC). Ejemplo fs-userland-stm32f769-disco (F769-only): - 2 tareas (kernel LED + app USER). La Rufs sobre QSPI la posee el kernel; los hooks privilegiados resuelven la E/S síncrona en contexto SVC (sin canal async: la flash es síncrona y el SVC corre a término). Arranque privilegiado: vuelca log de faults previos, registra evento de boot, incrementa boot_count. - La app userland NO llama defmt (el bloque de control RTT vive en RAM priv-only); reporta resultados por contadores en el pool que loguea el kernel. Tests host (rugus-host-tests): +7 (4 faultlog + 3 syscall_fs). Docs: SYSCALL_ABI.md y docs/boards/stm32f769-disco.md actualizados. Validado HW F769 (3 power-cycles): boot_count 3->4->5, log circular retiene #0(arg3)+#1(arg4) y añade #2, 1024+ verificaciones userland OK / 0 MISMATCH / cero faults. * style(fs-userland): aplica rustfmt al ejemplo F5.C.3 Corrige los 3 diffs que detectaba `cargo fmt --check` en CI (record multilínea, FileSlot shorthand, CFG_KEYS.get multilínea).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Primera entrega funcional de Rugus: kernel/OS Rust puro
no_stdmulti-arquitectura. Este PR contiene el hito G0 (génesis) completo y deja el repo listo para que cualquier ingeniero o agente IA pueda continuar desde G1.Visión
no_std. Cero FFI a C en el núcleo.rugus-coreno depende de PAC ni decortex-m; todo pasa por el traitArch. Empezamos con Cortex-M7 (STM32F7); la estructura admite Cortex-M0+/M4/M33, ARMv8-A, AVR, RISC-V sin reescribir el core.rugus-halseparado del kernel; cada chip-family implementa los traits en su crate.#![forbid(unsafe_code)]; boot Ed25519 + OTA dual-bank (G6).examples/blink-<board>parpadea en HW real.Qué entra
Workspace (5 crates)
rugus-coreArch, scheduler stub, syscall ABI v0.1,Errnorugus-arch-cortex-mArchpara ARMv7-M / v7E-M / v8-Mrugus-hal#![forbid(unsafe_code)]:GpioPin,SerialPortrugus-hal-stm32f7rugus-runtimeEjemplo
examples/blink-stm32f769-disco/— binario standalone con su propiomemory.x,.cargo/config.toml,README.md. Toggle LD1 (PJ13) usandorugus_hal_stm32f7::LedPinvía traitrugus_hal::GpioPin. Logsdefmtpor SWD/RTT.Documentación (
docs/)ARCHITECTURE.md— capas, dependencias unidireccionales, traitArch, políticaunsafepor crate, estrategia de testing host/QEMU/on-target.ROADMAP.md— hitos G0..G7 + G∞, métricas objetivo por arch (Cortex-M7 y Cortex-A53).PORTING.md— cómo añadir una arch nueva (Caso A), un chip nuevo (Caso B), un driver nuevo (Caso C); checklist pre-merge.HAL_TRAITS.md— contrato público de los traits, plan de crecimiento, capacidades chip-specific (Chrom-ART, JPEG HW, PIO, etc.) fuera del trait genérico.SECURITY_MODEL.md— amenazas, dominios MPU, boot Ed25519, OTA dual-bank, traitSecretStoresinget_key().SYSCALL_ABI.md— convención por arch (SVC/ECALL/etc), tabla v0.1, validación de punteros user-space.INVARIANTS.md— 7 invariantes con mecanismo de verificación.agent-memory/— README +project.md+preferences.md(P-1..P-7) para agentes IA que asistan.Infra de repo
CONTRIBUTING.mdcon reglas duras (Rust puro, políticaunsafepor capa, deps unidireccionales).rustfmt.toml,rust-toolchain.tomlcon targets futuros documentados..github/workflows/ci.ymlcon matrix por target — preparada para crecer cuando se añadan archs.AGENT_LOG.mdinicializado con entrada G0.Arquitecturas planificadas
Test plan
rustup target add thumbv7em-none-eabihfinstalado.cargo install probe-rs-tools --lockedinstalado.cargo build --workspacepasa sin errores.cargo build --workspace --releasepasa sin errores.cargo fmt --all -- --checkpasa.cargo clippy --workspace --all-targets -- -D warningspasa (probable que falle inicialmente por stubs no usados — iterar).cd examples/blink-stm32f769-disco && cargo runflashea.INFO rugus blink @ STM32F769I-DISCO, HSI 16 MHz defaultyINFO LD1 (PJ13) configured; toggling at ~1 Hz.Próximos pasos (G1)
Ver
docs/ROADMAP.md§ G1: HSE 25 MHz → PLL 216 MHz + AHB/APB, activar I/D-Cache del M7, FMC init SDRAM 16 MB, allocator simple en SDRAM, scheduler cooperativo round-robin, context switch real enrugus-arch-cortex-mcon PendSV + naked ASM en.itcm.Relación con otros repos
guillo93/Panel-smartH— panel smart-home. Será refactorizado en PR aparte como consumidor delgado de Rugus.🤖 Este PR fue preparado por Claude Opus 4.7 (agente IA) en sesión asistida. Ver
AGENT_LOG.mdpara contexto completo, decisiones no obvias y sugerencias para el próximo agente que toque el código.