Configurando a toolchain e o QEMU
1. TL;DR
- Use
riscv64-unknown-elf-gccpara todos os builds. - Rode programas com
qemu-system-riscv32em modo sistema. - Não usamos libc; toda saída vai pela UART
virtdo QEMU.
2. Antes de começar
Todos os arquivos-fonte estão disponíveis no GitHub RISC-V Experiments Repository.
3. Ferramentas necessárias
Precisamos do compilador cruzado GCC para RISC-V, QEMU, GDB e algumas ferramentas padrão de build. No Ubuntu 24.04 (ou sistemas baseados em Debian), instale com:
| |
gcc-riscv64-unknown-elf: o cross-compiler para software bare-metal.qemu-system-riscv32: emula um computador RISC-V de 32 bits.gdb-multiarch: depurador que conversa com diferentes arquiteturas (como nosso alvo RISC-V).binutils-riscv64-unknown-elf: fornecereadelf,objdump,objcopy, etc.
3.1. Instalar o Pwndbg
Pwndbg é um plug-in poderoso do GDB que fornece uma interface melhor para engenharia reversa e depuração. Ele será útil para inspecionar registradores e memória em capítulos posteriores.
| |
4. Estrutura do projeto
| |
| |
5. “Hello” mínimo na UART
Arquivo: src/hello_uart.c
| |
Compile e rode:
| |
Você deve ver a mensagem no terminal.
6. Rodando com GDB
Inicie o QEMU em modo pausado:
| |
Conecte em outro terminal:
| |
7. Exercícios
- Confirme que você consegue rodar
qemu-system-riscv32 --versionno seu sistema. - Confirme que você consegue rodar
riscv64-unknown-elf-gcc --versionno seu sistema. - Verifique se consegue usar make rodando
make --version. - Verifique se consegue rodar gdb-multiarch rodando
gdb-multiarch --version. - Mude a string e verifique que ela imprime corretamente.
- Adicione uma segunda linha
uart_putse faça passo a passo no GDB.
8. Resumo
- A toolchain
riscv64-unknown-elf-gcccompila código RV32 freestanding. - O QEMU
virtroda o ELF diretamente com-kernele sem BIOS. - Saída via UART fornece feedback imediato sem libc.