Tahapan Pembelajaran Pembuatan OS Bare Metal Raspberry Pi

Fase 1: Inisialisasi & Output Dasar (Selesai)

Status: Completed (Blinking LED)

Fase ini adalah “Hello World” perangkat keras. Tujuannya membuktikan bahwa toolchain berfungsi, SD Card terbaca, dan kita bisa mengendalikan pin fisik CPU.

  • Materi: Setup Toolchain, Booting Process, Assembly Dasar, GPIO Output.

Fase 2: Komunikasi Serial (UART) — “Memberi Suara pada OS”

Saat ini OS kita “bisu”. Jika ada error, kita tidak tahu kenapa. Kita hanya punya lampu kedip. Langkah paling vital berikutnya adalah membuat saluran komunikasi teks.

  • Tujuan: Mengirim teks (“Hello World”) dari Raspberry Pi ke terminal Fedora Anda via kabel USB-to-TTL.
  • Materi Teknis:
    • Memahami protokol UART dan Register PL011 (PrimeCell UART).
    • Membuat fungsi pustaka standar sederhana: putc (kirim karakter), puts (kirim string), dan printf sederhana.
    • Menerima input keyboard dari laptop ke Raspberry Pi (Echo test).

Fase 3: Interupsi & Timer — “Membangun Refleks Sistem”

Saat ini kita menggunakan sleep (busy wait) yang memboroskan CPU. OS yang baik harus bekerja berdasarkan event, bukan menunggu.

  • Tujuan: Mengedipkan LED menggunakan Hardware Timer tanpa menghentikan CPU, dan menangani “Vector Table”.
  • Materi Teknis:
    • Exception Vector Table: Memahami alamat 0x000x20.
    • IRQ (Interrupt Request): Bagaimana hardware “mencolek” CPU agar berhenti sejenak.
    • System Timer vs ARM Timer: Mengonfigurasi timer internal BCM2835.

Fase 4: Antarmuka Grafis (Framebuffer) — “Menampilkan Wajah”

Setelah bisa berkomunikasi lewat teks, kita akan beralih ke HDMI. Namun, kita tidak akan menulis driver HDMI yang rumit, melainkan menggunakan layanan Mailbox Interface milik GPU.

  • Tujuan: Menggambar piksel, kotak warna, dan teks langsung ke layar monitor HDMI.
  • Materi Teknis:
    • Mailbox Property Interface: Cara CPU “titip pesan” ke GPU untuk minta resolusi layar (misal 1920×1080).
    • Linear Framebuffer: Menulis warna ke alamat memori tertentu untuk mengubah tampilan layar.
    • Font Rendering: Menggambar huruf piksel demi piksel (membuat terminal sendiri di layar).

Fase 5: Input Pengguna (GPIO Button)

Sebelum masuk ke keyboard USB (yang protokolnya sangat rumit untuk pemula), kita akan membuat input sederhana menggunakan tombol fisik (Push Button) pada Breadboard.

  • Tujuan: Menekan tombol fisik untuk mengubah warna layar atau kecepatan kedipan LED.
  • Materi Teknis:
    • GPIO Input & Pull-up/Pull-down Resistors.
    • GPIO Interrupts: Menangani penekanan tombol secara asinkron (tanpa mengecek terus-menerus/polling).

Fase 6: Manajemen Memori (Sederhana)

Kita tidak bisa selamanya menebak-nebak alamat memori manual. Kita butuh sistem alokasi.

  • Tujuan: Membuat implementasi fungsi malloc() dan free() sederhana.
  • Materi Teknis:
    • Konsep Heap.
    • Manajemen bitmap atau linked list untuk melacak memori yang terpakai vs kosong.

Fase 7: Multitasking (Scheduler) — “Jantung Sistem Operasi”

Ini adalah puncak dari dasar OS. Bagaimana menjalankan dua program (Task A dan Task B) seolah-olah bersamaan.

  • Tujuan: Menjalankan dua proses (misal: satu mengedipkan LED merah, satu menulis ke layar) secara bergantian dengan cepat.
  • Materi Teknis:
    • Context Switching: Menyimpan register Task A, memuat register Task B.
    • Round Robin Scheduler: Algoritma pembagian waktu CPU.