Arsitektur Memori Raspberry Pi 1: Panduan Pengembangan OS Bare Metal

Dalam pengembangan sistem operasi bare metal pada Raspberry Pi 1 (SoC Broadcom BCM2835), pemahaman mendalam mengenai peta memori (memory map) adalah fondasi utama. Tanpa adanya sistem operasi perantara seperti Linux, pengembang bertanggung jawab penuh untuk mengelola tata letak instruksi dan data di dalam RAM.

Artikel ini akan membedah struktur memori Raspberry Pi 1 secara rinci, mulai dari alamat paling dasar hingga area kontrol perangkat keras.


Representasi Visual Memory Map

Berikut adalah struktur pemetaan memori pada Raspberry Pi 1 saat proses booting berlangsung:

Alamat Memori   Struktur / Bagian       Keterangan
0x00000000 ┬───────────────────┐
│ ARM Vector Table │ (Interupsi & Exception)
│ ATAGS / Dev Tree │ (Informasi Boot dari Firmware)
│ Stack (Grows Down)│ ← Biasanya SP diatur ke 0x8000
0x00008000 ┼───────────────────┤ ← Kernel Entry (Titik Mulai .text)
│ │
│ .text │ (Kode Program / Instruksi)
│ │
├───────────────────┤
│ .data │ (Variabel Global dengan Nilai)
├───────────────────┤
│ .bss │ (Variabel Global Kosong/Nol)
├───────────────────┤
│ │
│ Free RAM │ (Tempat untuk Heap / Alokasi Dinamis)
│ │
0x20000000 ┴───────────────────┘ ← Peripheral Base Address (I/O)
│ Registers (GPIO) │ (Memory Mapped I/O)
│ Registers (UART) │
└───────────────────┘

Analisis Bagian Memori

1. Area Low Memory (0x00000000 – 0x00007FFF)

Area ini merupakan wilayah yang sangat krusial pada saat inisialisasi awal.

  • ARM Vector Table: Terletak tepat di alamat 0x00000000. Bagian ini berisi tabel instruksi yang akan dieksekusi oleh prosesor ketika terjadi interupsi (interrupt), kesalahan memori (prefetch abort), atau perintah reset.
  • ATAGS / Device Tree: Firmware Raspberry Pi (GPU) meletakkan informasi sistem (seperti ukuran RAM dan command line) di alamat 0x00000100. Informasi ini sangat berguna bagi kernel untuk mengetahui spesifikasi perangkat keras yang sedang berjalan.
  • Stack Space: Dalam arsitektur ARM, stack tumbuh ke arah alamat yang lebih rendah (grows downward). Secara konvensi, pengembang sering mengatur Stack Pointer (SP) di alamat 0x8000. Hal ini memastikan stack memiliki ruang kosong yang cukup di bawah kernel tanpa risiko menimpa kode program.

2. Kernel Space (0x00008000 – Akhir BSS)

Alamat 0x00008000 adalah standar industri untuk memuat kernel pada Raspberry Pi 1.

  • .text (Code Section): Berisi instruksi mesin yang dapat dieksekusi. Di bagian paling awal (.text.boot), biasanya terdapat instruksi assembly untuk melakukan setup awal CPU.
  • .data (Data Section): Menyimpan variabel global atau statis yang sudah memiliki nilai awal. Data ini disalin dari file image kernel ke RAM.
  • .bss (Block Started by Symbol): Wilayah untuk variabel global yang belum diinisialisasi atau bernilai nol. Sesuai standar, area ini harus dibersihkan (diisi nilai nol) oleh kode boot sebelum fungsi utama (main) dijalankan untuk menghindari data sampah.

3. Free RAM (Heap)

Area yang terletak di atas bagian .bss hingga mencapai batas peripheral disebut sebagai Free RAM. Area ini digunakan untuk alokasi memori dinamis (Heap). Jika Anda mengimplementasikan fungsi seperti malloc() dalam OS Anda, di sinilah data tersebut akan dikelola.

4. Peripheral Base Address (0x20000000 ke atas)

Pada SoC BCM2835, kontrol perangkat keras dilakukan melalui Memory Mapped I/O (MMIO).

  • Alamat 0x20000000 bukanlah RAM fisik, melainkan titik akses ke register perangkat keras.
  • Contoh: Untuk mengontrol lampu LED (GPIO), pengembang harus menulis nilai ke alamat spesifik yang berada di atas rentang 0x20200000. Begitu pula dengan UART untuk komunikasi serial dan perangkat keras lainnya.

Kesimpulan bagi Pengembang

Memahami peta memori ini memungkinkan pengembang untuk membuat Linker Script (.ld) yang akurat. Kesalahan dalam memetakan alamat 0x8000 atau salah mengatur lokasi stack dapat mengakibatkan sistem mengalami crash seketika saat booting.

Dengan manajemen memori yang tepat, OS bare metal Anda akan memiliki stabilitas yang diperlukan untuk berkomunikasi langsung dengan perangkat keras Raspberry Pi 1.


Ingin Melangkah Lebih Jauh?

Langkah selanjutnya setelah memahami peta memori adalah menulis kode Linker Script dan Bootstrap Assembly untuk menginisialisasi Stack Pointer tepat di batas memori yang telah ditentukan.