7695dbf3ce
El kernel deja de empotrar el userspace por completo. Ya no carga ni un
solo .wasm: es boot quien siembra el disco con el grafo poblado.
- kernel/almacen.rs y manifiesto.rs migran al nucleo compartido `formato`
(tipos, postcard, BLAKE3, trazado de registros). El kernel pierde los
include_bytes!, genesis() y sembrar_genesis().
- boot::sembrar_grafo siembra un disco virgen con el bytecode de las apps
(deduplicado) y el Manifiesto de Genesis anclado en el superbloque.
- cargar_userspace sin rama de siembra; wasm/mod.rs sin TECHO_MEMORIA.
- alias `cargo kernel` -> --manifest-path (esquiva un ICE de cargo con
formato compartido entre el kernel y boot via artifact-dep).
Verificado en QEMU (screendump): disco virgen -> boot siembra 5 objetos,
el kernel monta su grafo; segundo arranque -> boot respeta el disco, la
cronista persiste. formato: 5/5 pruebas.
Nota: el crate `formato` y los 3 Cargo.toml entraron antes en 43e6b32 por
un `git add -A` de un trabajo concurrente; este commit cierra el resto.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
92 lines
4.0 KiB
Markdown
92 lines
4.0 KiB
Markdown
# renaser — guía operativa
|
|
|
|
**renaser** es un kernel asíncrono de *Espacio de Direccionamiento Único*
|
|
(SASOS) en Rust `#![no_std]`, bare-metal x86_64. Rompe con POSIX: interfaz
|
|
visual nativa desde el arranque, aislamiento **por software** (no por MMU),
|
|
el texto como caso particular del dibujo.
|
|
|
|
Documentos hermanos: `ARCHITECTURE.md` (arquitectura), `ROADMAP.md` (fases y
|
|
plan), `CHANGELOG.md` (registro técnico de cambios), `DIARIO.md` (crónica en
|
|
lenguaje llano), `README.md` (presentación).
|
|
|
|
## Construir y ejecutar
|
|
|
|
Desde la raíz del repositorio:
|
|
|
|
| Comando | Efecto |
|
|
|---|---|
|
|
| `cargo run` | compila el kernel, forja la imagen UEFI y abre QEMU |
|
|
| `cargo build` | compila el kernel + la imagen, sin lanzar QEMU |
|
|
| `cargo kernel` | alias: compila solo el kernel para `x86_64-unknown-none` |
|
|
|
|
Verificación headless (sin ventana): añadir
|
|
`-- -display none -monitor unix:/tmp/q.sock,server,nowait` y capturar con
|
|
`screendump` por el socket del monitor.
|
|
|
|
Reconstruir la app WASM del userspace tras tocar `apps/hello_wasm`:
|
|
|
|
```sh
|
|
cd apps/hello_wasm
|
|
cargo build --target wasm32-unknown-unknown --release
|
|
cp target/wasm32-unknown-unknown/release/hello_wasm.wasm ../../kernel/assets/app.wasm
|
|
```
|
|
|
|
## Estructura del espacio de trabajo
|
|
|
|
- `boot/` — orquestador de **anfitrión**: construye la imagen de disco UEFI con
|
|
la crate `bootloader` 0.11 y lanza QEMU. Es el **único miembro** del workspace.
|
|
- `kernel/` — el kernel **bare-metal**. Está **excluido** del workspace y se
|
|
compila solo como dependencia de artefacto de `boot` (target
|
|
`x86_64-unknown-none`). NUNCA debe ser miembro del workspace ni compilarse
|
|
para el anfitrión: lo haría fallar por un `_start` duplicado.
|
|
- `apps/` — aplicaciones del userspace, módulos `.wasm`
|
|
(target `wasm32-unknown-unknown`). Workspaces propios, excluidos.
|
|
|
|
Módulos del kernel (`kernel/src/`): `main`, `grafico`, `consola`, `baliza`,
|
|
`sync`, `gdt`, `interrupts`, `pic`, `drivers/`, `almacen`, `memory/`,
|
|
`async_system/`, `texto`, `wasm/`. El detalle de cada uno está en
|
|
`ARCHITECTURE.md`.
|
|
|
|
## Toolchain
|
|
|
|
Nightly, fijado en `rust-toolchain.toml`. Targets `x86_64-unknown-none` y
|
|
`wasm32-unknown-unknown`. Componentes `rust-src` y `llvm-tools` (los exige el
|
|
build script de la crate `bootloader`). Entorno verificado: Artix Linux,
|
|
QEMU 11, OVMF en `/usr/share/edk2/x64/OVMF.4m.fd` (sin módulo KVM → TCG).
|
|
|
|
## Convenciones
|
|
|
|
- **Idioma:** comentarios E identificadores en español.
|
|
- **`unsafe`:** confinado en células mínimas, envuelto de inmediato en una
|
|
abstracción segura. `#![deny(unsafe_op_in_unsafe_fn)]`. Cada bloque `unsafe`
|
|
lleva un comentario `SEGURIDAD:` que justifica su corrección.
|
|
- **Framebuffer / MMIO:** siempre `core::ptr::write_volatile`; jamás asignación
|
|
indexada directa (el optimizador la elidiría).
|
|
- **`no_std` estricto:** solo `core::*` y `alloc::*` (heap vivo desde la Fase 3).
|
|
Prohibido cualquier ruta de `std::*`.
|
|
- **Alineación:** 16 bytes para estructuras genéricas; 4096 bytes (página) para
|
|
buffers de memoria y regiones de asignador.
|
|
- Código densamente comentado; se cuida la coherencia de estilo entre módulos.
|
|
|
|
## Estado
|
|
|
|
Fases 1 a 5, 6.0, 6.1 y 6.2 completas; y la Fase 7 —el userspace nace del
|
|
grafo de objetos— en sus sub-fases 7a (Manifiesto de Génesis, carga desde el
|
|
grafo) y 7b (`boot` siembra la imagen, muere el `include_bytes!` del kernel).
|
|
Todo verificado en QEMU. Pendiente: 7c (persistencia inter-sesión). Ver
|
|
`ROADMAP.md`.
|
|
|
|
## Flujo de trabajo
|
|
|
|
En **cada iteración** de trabajo, sin excepción:
|
|
|
|
1. Actualizar `CHANGELOG.md` — la entrada técnica detallada del cambio.
|
|
2. Actualizar `DIARIO.md` — la misma jornada contada en lenguaje llano y
|
|
elegante, sin carga técnica (es una crónica humana, no un registro técnico).
|
|
3. Verificar en QEMU si el cambio es observable (con captura de pantalla).
|
|
4. `git commit` (mensaje en español, descriptivo) y `git push origin main`.
|
|
|
|
renaser vive ahora dentro del monorepo **brahman**; los commits van al remoto
|
|
de brahman (`gitea.gioser.net/sergio/brahman`). Mensajes de commit en español.
|
|
Verifica una fase en QEMU antes de darla por cerrada.
|