Compilação de um Kernel Linux 6.6.87 customizado, montagem de initramfs com BusyBox e execução de syscall modificada via patch. Projeto prático da disciplina de Sistemas Operacionais — IDP 2025/2.
Compilar e bootar um kernel Linux modificado por um patch personalizado dentro do QEMU,
executar um programa C estático que invoca a syscall sysinfo, e capturar a string
injetada pelo patch no kernel ring buffer via dmesg.
┌─────────────────────────────────────┐
│ QEMU (x86-64) │
│ ┌───────────────────────────────┐ │
│ │ initramfs (BusyBox + init) │ │
│ │ ┌─────────────────────────┐ │ │
│ │ │ sysinfo_call (C static)│ │ │
│ │ │ syscall 99 → kernel │ │ │
│ │ └──────────┬──────────────┘ │ │
│ └─────────────┼─────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────┐│
│ │ Kernel 6.6.87 + patch aluno ││
│ │ sysinfo() → printk(secret) ││
│ │ dmesg → RESPOSTA ││
│ └─────────────────────────────────┘│
└─────────────────────────────────────┘
.
├── sysinfo_call.c # Programa userspace que invoca sysinfo(2)
├── initramfs/
│ └── init # Script de boot do sistema mínimo
├── scripts/
│ ├── setup.sh # Instala dependências do sistema
│ ├── build-busybox.sh # Compila BusyBox 1.36.1 estático
│ ├── build-kernel.sh # Configura e compila o kernel
│ ├── build-initramfs.sh # Monta e empacota o initramfs
│ └── run-qemu.sh # Inicia o QEMU com kernel + initramfs
├── docs/
│ └── architecture.md # Notas técnicas e aprendizados
└── README.md
- WSL2 + Ubuntu 24.04 (ou Ubuntu nativo)
- ~10 GB de espaço livre em disco
export MATRICULA="2311292"
export JOBS=$(nproc)bash scripts/setup.shbash scripts/build-busybox.shbash scripts/build-kernel.shbash scripts/build-initramfs.shbash scripts/run-qemu.shDentro do shell:
/bin/sysinfo_call
dmesg | grep SOLUCAO| Etapa | Status |
|---|---|
| Ambiente e dependências | ✅ concluído |
| BusyBox 1.36.1 compilado | ✅ concluído |
| Kernel 6.6.87 configurado | ✅ concluído |
| Patch aplicado | ✅ concluído |
| Kernel compilado | ✅ concluído |
| initramfs montado | ✅ concluído |
| sysinfo_call.c compilado | ✅ concluído |
| Boot no QEMU | ✅ concluído |
| Resposta coletada | ✅ concluído |
- Compilação do Kernel Linux — configuração via
make defconfig, flags de build, bzImage - System calls no x86-64 — número de syscall (99 = sysinfo), convenção de registradores
- initramfs — filesystem em RAM, estrutura mínima, BusyBox como userland
- Kernel ring buffer —
printklevels,dmesg - Linking estático — por que o binário precisa ser estático num ambiente sem libc
- QEMU — emulação de hardware, boot com kernel + initrd customizados
- Linux Kernel Documentation
- BusyBox
- man 2 sysinfo
- Tanenbaum, A. S. — Sistemas Operacionais Modernos, 3ª ed.
- Arpaci-Dusseau — Operating Systems: Three Easy Pieces