.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
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
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:
-
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.
-
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.
-
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.