Oleh: Reza Ervani bin Asmanu
Banyak pengembang pemula bertanya, “Mengapa kita masih menggunakan Raspberry Pi 1 yang sudah tua untuk belajar membuat Sistem Operasi? Mengapa tidak langsung ke Raspberry Pi 4 atau 5?”
Jawabannya sederhana: Kompleksitas.
Memulai pengembangan OS Bare Metal langsung di Raspberry Pi 4 atau 5 ibarat mencoba belajar menjumlahkan angka sambil berlari maraton. Terlalu banyak “gangguan” arsitektur yang bisa memecah konsentrasi.
Di Reza Ervani Institute, kami memilih jalur progresif. Kami membangun fondasi di arsitektur yang sederhana (BCM2835), lalu melakukan “Porting” (migrasi kode) ke arsitektur yang lebih modern. Berikut adalah peta perbedaan dan tantangan yang akan kita hadapi saat bermigrasi nanti.
1. Tantangan Alamat Memori (Base Address)
Inilah perbedaan paling mendasar yang akan kita temui pertama kali. Semua kode driver GPIO dan UART yang kita tulis menggunakan alamat memori fisik (Memory Mapped I/O).
- Raspberry Pi 1 (BCM2835): Alamat dasar periferal ada di
0x20000000. - Raspberry Pi 2 & 3 (BCM2836/2837): Alamat dasar bergeser ke
0x3F000000. - Raspberry Pi 4 (BCM2711): Alamat dasar pindah lagi ke
0xFE000000. - Raspberry Pi 5 (BCM2712 + RP1): Arsitekturnya berubah total, sebagian besar IO ditangani oleh chip terpisah bernama RP1.
Apakah kode kita sia-sia?
Tentu tidak. Logika driver (urutan bit, konfigurasi register) tetap sama. Kita hanya perlu mengubah satu baris konstanta di file header kode kita:
Dari:
#define PBASE 0x20000000 // Untuk RPi 1
Menjadi:
#define PBASE 0x3F000000 // Saat migrasi ke RPi 3
Inilah pelajaran berharga tentang Portabilitas Kode.
2. Tantangan Arsitektur CPU (ARMv6 vs ARMv8)
- Raspberry Pi 1: Menggunakan ARM1176 (ARMv6). Ini adalah arsitektur 32-bit murni. Sederhana, instruksinya pendek, dan mudah dipahami untuk pemula Assembly.
- Raspberry Pi 3/4/5: Menggunakan Cortex-A (ARMv8). Ini mendukung mode 64-bit (AArch64).
Saat naik ke RPi 3 nanti, kita punya dua pilihan:
- Mode Kompatibilitas (32-bit): Kode RPi 1 kita bisa berjalan persis apa adanya.
- Mode Native (64-bit): Kita harus menulis ulang kode Assembly
start.S. Registerr0,r1berubah menjadix0,x1. Kita mendapatkan akses ke register yang lebih besar dan instruksi yang lebih cepat.
Belajar 32-bit dulu membuat transisi ke 64-bit jauh lebih masuk akal daripada langsung melompat ke 64-bit yang memiliki aturan ketat soal Exception Level (EL1, EL2, EL3).
3. Tantangan Multi-Core (Satu Otak vs Banyak Otak)
Ini alasan utama kenapa RPi 1 adalah guru terbaik.
- Raspberry Pi 1: Single Core. Kode kita berjalan berurutan. Sangat terprediksi.
- Raspberry Pi 2/3/4/5: Quad Core (4 Otak).
Saat Anda menyalakan RPi 3 secara Bare Metal, keempat intinya bangun bersamaan. Jika kita menggunakan kode RPi 1 mentah-mentah, 4 inti tersebut akan berebut menjalankan fungsi main() yang sama secara bersamaan. Akibatnya? Crash/Hang seketika karena tabrakan memori (Race Condition).
Pelajaran Mahal:
Saat migrasi ke RPi 3, kita akan belajar teknik baru di Assembly start.S: Core Parking.
Kita harus memerintahkan Core 1, 2, dan 3 untuk “Tidur Dulu” (masuk ke infinite loop), dan hanya membiarkan Core 0 yang bekerja. Nanti, di tahap lanjut, baru kita bangunkan mereka satu per satu. Pelajaran ini tidak akan Anda dapatkan jika terus-menerus memakai RPi 1.
Kesimpulan: Kita Berada di Jalur yang Tepat
Memulai dari RPi 1 memberikan keuntungan:
- Fokus: Tidak pusing memikirkan Multi-core synchronization di awal.
- Simpel: Dokumentasi BCM2835 jauh lebih mudah dibaca daripada BCM2711 (RPi 4).
- Fundamental: Konsep UART, GPIO, dan Timer di RPi 1 adalah blueprint yang diwariskan ke model-model setelahnya.
Jadi, rute kita adalah:
- Kuasai RPi 1: Sampai OS mini kita stabil (UART, Timer, Interrupt jalan).
- Fase Porting ke RPi 3: Mengubah
Base Address, memarkir Core tambahan, dan beralih ke 64-bit. - Fase Modern ke RPi 4/5: Menyesuaikan dengan arsitektur IO baru.
Kita sedang membangun gedung pencakar langit, dan saat ini kita sedang memastikan pondasi betonnya (RPi 1) benar-benar kering dan kuat sebelum memasang lantai kaca (RPi 5) di atasnya.
