2022-04-01 07:14:44 +00:00
# Tutorial 01 - Esperar infinitamente
## tl;dr
* Se configura la estructura que tiene el proyecto.
* Se ejecuta una pequeño código hecho en ensamblador que tiene como función detener todos los núcleos del procesador que están ejecutando el kernel.
## Compilar
* El archivo `Makefile` permite ejecutar:
2022-04-19 20:54:42 +00:00
2022-04-01 07:14:44 +00:00
* `doc` : Genera la documentación.
2022-04-19 20:54:42 +00:00
2022-04-01 07:14:44 +00:00
* `qemu` : Ejecutar el kernel en QEMU.
2022-04-19 20:54:42 +00:00
2022-04-01 07:14:44 +00:00
* `clippy` : Analiza el código y sugiere mejoras.
2022-04-19 20:54:42 +00:00
2022-04-01 07:14:44 +00:00
* `clean` : Elimina todos los archivos generados durante la compilación, etc.
2022-04-19 20:54:42 +00:00
2022-04-01 07:14:44 +00:00
* `readelf` : Inspecciona el archivo `ELF` de salida.
2022-04-19 20:54:42 +00:00
* `objdump` : Inspecciona el ensamblador.
2022-04-01 07:14:44 +00:00
* `nm` : Inspecciona los símbolos.
## Código a revisar
2022-04-19 20:54:42 +00:00
* El script para enlazado específico para la `BSP` llamado `kernel.ld` .
2022-04-01 07:14:44 +00:00
* Carga la dirección en `0x8_0000` .
2022-04-19 20:54:42 +00:00
2022-04-01 07:14:44 +00:00
* Solo la sección `.text` .
* `main.rs` : [Atributos internos ](https://doc.rust-lang.org/reference/attributes.html ) importantes:
2022-04-19 20:54:42 +00:00
2022-04-01 07:14:44 +00:00
* `#![no_std]` , `#![no_main]` .
2022-04-19 20:54:42 +00:00
* `boot.s` : La función de ensamblador `_start()` que inicia `wfe` (Wait For Event / Esperar Hasta Un Evento), detiene todos los núcleos del procesador que están ejecutando `_start()` .
2022-04-01 07:14:44 +00:00
* Tenemos que definir una función que funcione como `#[panic_handler]` (manejador de pánico) para que el compilador no nos cause problemas.
2022-04-19 20:54:42 +00:00
2022-04-01 07:14:44 +00:00
* Hazla `unimplemented!()` porque se eliminará ya que no está siendo usada.
## Pruébalo
Dentro de la carpeta del proyecto, ejecuta a QEMU y mira el núcleo del procesador ejecutando `wfe` en bucle:
```
$ make qemu
[...]
IN:
0x00080000: d503205f wfe
0x00080004: 17ffffff b #0x80000
```