Resumo da série
Pontos-chave
- Toolchain: use sempre
riscv64-unknown-elf-gccpara builds bare-metal RV32. - Runtime:
_startconfigura a pilha e zera.bss; nenhuma libc é assumida. - QEMU: rode tudo no
qemu-system-riscv32com-bios nonee-kernel. - Depuração: GDB + QEMU fornece breakpoints, watchpoints e step de instruções.
- MMIO: saída UART em
0x10000000é o caminho de saída mais simples e confiável.
Índice
- ABI: ABI RV32 + tipos em C
- Assembly básico: Instruções básicas de assembly RISC-V
- Depuração: Debug de RV32 com QEMU + GDB
- ELF: Internals de ELF e Binutils
- Linker script: Scripts de linker e mapas de memória
- MMIO/UART: Interfaces no QEMU: UART e conceitos de MMIO
- Otimização: C → ASM: otimizações e volatile
- Rodar QEMU: Configurando a toolchain e o QEMU
- Tracing: Análise dinâmica com tracing no QEMU
Exercícios
- Escolha um programa e adicione uma nova função, então verifique o call frame no GDB.
- Modifique
src/uart.cpara adicionar um helperuart_puthex8e use-o em um exemplo do capítulo. - Substitua um exemplo em C por uma versão pura em assembly.
Resumo
Você agora tem um workflow completo de RV32 bare-metal que roda inteiramente no QEMU. Você consegue compilar, rodar, traçar e depurar sem nenhum hardware físico.