Skip to content

Felipebc2/linux-kernel-lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Linux Kernel Syscall — T01 Sistemas Operacionais

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.

Objetivo

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.

Arquitetura

┌─────────────────────────────────────┐
│           QEMU (x86-64)             │
│  ┌───────────────────────────────┐  │
│  │  initramfs (BusyBox + init)   │  │
│  │  ┌─────────────────────────┐  │  │
│  │  │  sysinfo_call (C static)│  │  │
│  │  │  syscall 99 → kernel    │  │  │
│  │  └──────────┬──────────────┘  │  │
│  └─────────────┼─────────────────┘  │
│                ▼                    │
│  ┌─────────────────────────────────┐│
│  │  Kernel 6.6.87 + patch aluno    ││
│  │  sysinfo() → printk(secret)     ││
│  │  dmesg → RESPOSTA               ││
│  └─────────────────────────────────┘│
└─────────────────────────────────────┘

Estrutura do Repositório

.
├── 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

Pré-requisitos

  • WSL2 + Ubuntu 24.04 (ou Ubuntu nativo)
  • ~10 GB de espaço livre em disco

Como reproduzir

0. Variáveis de ambiente

export MATRICULA="2311292"
export JOBS=$(nproc)

1. Dependências

bash scripts/setup.sh

2. BusyBox

bash scripts/build-busybox.sh

3. Kernel

bash scripts/build-kernel.sh

4. initramfs

bash scripts/build-initramfs.sh

5. Rodar no QEMU

bash scripts/run-qemu.sh

Dentro do shell:

/bin/sysinfo_call
dmesg | grep SOLUCAO

Status das Etapas

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

Conceitos Demonstrados

  • 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 bufferprintk levels, 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

Referências

About

Compile and boot the linux kernel modified with QEMU

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors