Tutorial 02 - Inicialización del runtime
tl;dr
- Extendimos la funcionalidad de
boot.spara que sea capaz de llamar código Rust por primera vez. Antes de que el cambio a Rust ocurra, se realizan algunos trabajos de inicialización delruntime(soporte para ejecución de código). - El código Rust que es llamado solo pausa la ejecución con una llamada a
panic!(). - Ejecuta
make qemude nuevo para que puedas ver el código adicional en acción.
Adiciones importantes
-
Adiciones importantes al script
kernel.ld: -
Nuevas secciones:
.rodata,.got,.data,.bss. -
Un lugar totalmente dedicado a enlazar argumentos de tiempo de arranque (boot-time) que necesitan estar listos cuando se llame a
_start(). -
_start()en_arch/__arch_name__/cpu/boot.s: -
Para todos los núcleos expecto el núcleo 0.
-
Configura el
stack pointer(puntero a la memoria pila). -
Salta hacia la función
_start_rust(), definida enarch/__arch_name__/cpu/boot.rs. -
_start_rust(): -
Llama a
kernel_init(), que llama apanic!(), que al final también pone al núcleo 0 en pausa. -
La librería ahora usa el crate aarch64-cpu, que nos da abstracciones sin coste y envuelve las partes que hacen uso de un
unsafe(partes con código que no es seguro y podría causar errores) cuando se trabaja directamente con los recursos del procesador. -
Lo puedes ver en acción en
_arch/__arch_name__/cpu.rs.
Diferencia con el archivo anterior
Please check the english version, which is kept up-to-date.