Proceso de Compilación del Bootloader para RISC-V

bootloader_riscv.asm
.section .text
.globl _start

_start:
    # Inicialización del stack
    lui sp, 0x80000          # Carga la dirección alta para el stack
    addi sp, sp, 0x0000      # Configura el stack en la dirección 0x80000000

    # Configuración GPIO
    lui t0, %hi(GPIO_BASE)   # Carga la parte alta de la dirección base GPIO
    addi t0, t0, %lo(GPIO_BASE) # Añade la parte baja

    lui t1, %hi(GPIO_MODE_REG) # Carga la parte alta del desplazamiento
    addi t1, t1, %lo(GPIO_MODE_REG) # Añade la parte baja
    add t2, t0, t1           # Calcula la dirección final
    li t3, 0x1               # Configura PIN1 como salida
    sw t3, 0(t2)             # Escribe en el registro de modo

    lui t1, %hi(GPIO_OUT_REG) # Carga la parte alta del desplazamiento
    addi t1, t1, %lo(GPIO_OUT_REG) # Añade la parte baja
    add t2, t0, t1           # Calcula la dirección final
    li t3, 0x1               # Escribe valor para encender el PIN1
    sw t3, 0(t2)             # Escribe en el registro de salida

    # Ciclo infinito
main_loop:
    j main_loop

.section .data
    .equ GPIO_BASE, 0x20000000
    .equ GPIO_MODE_REG, 0x00
    .equ GPIO_OUT_REG, 0x04
Makefile
AS = riscv64-unknown-elf-as
LD = riscv64-unknown-elf-ld
OBJCOPY = riscv64-unknown-elf-objcopy

OBJ = bootloader_riscv.o

all: bootloader_riscv.bin

bootloader_riscv.bin: $(OBJ)
	$(LD) -o bootloader_riscv.elf $(OBJ)
	$(OBJCOPY) -O binary bootloader_riscv.elf $@

%.o: %.asm
	$(AS) -o $@ $<

clean:
	rm -f *.o *.elf *.bin
Ensamblador
loadsManager/bootloader_riscv$ make
riscv64-unknown-elf-as -o bootloader_riscv.o bootloader_riscv.asm
riscv64-unknown-elf-ld -o bootloader_riscv.elf bootloader_riscv.o
riscv64-unknown-elf-objcopy -O binary bootloader_riscv.elf bootloader_riscv.bin 

El mensaje que viste indica que el proceso de compilación del bootloader para RISC-V se completó con éxito. 🎉

Desglose de las Etapas del Proceso:

  1. Compilación de ensamblador (riscv64-unknown-elf-as):

    El ensamblador (riscv64-unknown-elf-as) convirtió tu código fuente escrito en ensamblador (bootloader_riscv.asm) en un archivo objeto (bootloader_riscv.o).

    Este archivo objeto contiene instrucciones traducidas al lenguaje máquina pero aún no está listo para ejecutarse.

  2. Enlace (riscv64-unknown-elf-ld):

    El enlazador (riscv64-unknown-elf-ld) combinó tu archivo objeto (bootloader_riscv.o) con cualquier otra dependencia o configuración necesaria para generar un archivo ejecutable ELF (bootloader_riscv.elf).

    ELF es un formato estándar para ejecutables, útil para depuración y análisis.

  3. Generación del binario (riscv64-unknown-elf-objcopy):

    El comando objcopy transformó el archivo ELF (bootloader_riscv.elf) en un archivo binario (bootloader_riscv.bin).

    Este archivo binario es un formato puro que se puede cargar directamente en memoria o flashear en un dispositivo.

Resumen:

El archivo final bootloader_riscv.bin está listo para ser probado en un simulador, emulador o directamente en hardware compatible con RISC-V.

 

Destacado

Bootloader Avanzado en Ensamblador

Bootloader Avanzado en Ensamblador Características del Bootloader Se carga en la dirección 0x7C00 (BIOS). ...