diag(renaser): trazado por serie del arranque + DMA salta la página 0
Para localizar dónde colapsa el kernel en máquinas que no son la del autor, cada hito de `kernel_main` deja una traza por COM1 (con el panic-handler-a-serie de antes, ya tenemos boot trace + autopsia). - `baliza::Serie` se hace `pub(crate)` para que cualquier módulo deje trazas con `writeln!(baliza::Serie, ...)`. - `kernel_main`: traza tras adoptar el framebuffer, encender la baliza, fundar GDT/IDT/PIC, fundar el heap, fundar teclado/reloj/texto, publicar la consola, iniciar disco y almacén, arrancar el ratón, crear el ejecutor, cargar el userspace y arrancar el reactor. Y un volcado de `physical_memory_offset` + `region_dma` al inicio. - `drivers::disco::init`: registra offset, región, base de la arena y número de marcos disponibles. - Endurecimiento: `disco::init` ahora salta SIEMPRE la primera página física al elegir la base de la arena DMA. Algunos cargadores la dejan sin mapear como protección NULL; un marco DMA ahí se traduce a una dirección que peta al desreferenciar. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -43,8 +43,10 @@ fn serie_escribir(byte: u8) {
|
||||
}
|
||||
}
|
||||
|
||||
/// Sumidero de impresion al puerto serie — formatea sin tocar el heap.
|
||||
struct Serie;
|
||||
/// Sumidero de impresion al puerto serie — formatea sin tocar el heap. Publico
|
||||
/// para que cualquier modulo del kernel pueda dejar trazas en COM1 con un
|
||||
/// simple `writeln!(crate::baliza::Serie, "...", ...)`.
|
||||
pub(crate) struct Serie;
|
||||
|
||||
impl Write for Serie {
|
||||
fn write_str(&mut self, s: &str) -> core::fmt::Result {
|
||||
|
||||
Reference in New Issue
Block a user