2 poin oleh GN⁺ 2024-12-06 | 1 komentar | Bagikan ke WhatsApp

banan-os

Proyek ini adalah sistem operasi hobi yang ditulis dalam C++ dan mendukung arsitektur x86_64 serta i686. Proyek ini memberikan pengalaman belajar yang unik dibandingkan produk lain atau proyek open source yang sudah ada.

Fitur

  • Umum

    • Ruang pengguna Ring3
    • SMP (multiproses)
    • Linear framebuffer (VESA dan GOP)
    • Stack jaringan
    • Pemuatan executable ELF
    • Interpreter AML (parsial)
    • Lingkungan grafis dasar
      • Emulator terminal
      • Bilah status
      • Peluncur program
      • Beberapa aplikasi yang berguna
    • Dynamic linking ELF
    • Memori copy-on-write
      • Pemetaan file
      • Pemetaan anonim
  • Driver

    • Disk NVMe
    • Disk ATA (IDE, SATA)
    • NIC E1000 dan E1000E
    • NIC RTL8111/8168/8211/8411
    • Keyboard PS2 (semua set scancode)
    • Mouse PS2
    • USB
      • Keyboard
      • Mouse
      • Penyimpanan massal
      • Hub
    • Perangkat virtio (jaringan, penyimpanan)
  • Jaringan

    • ARP
    • ICMP
    • IPv4
    • UDP
    • TCP (parsial dan memiliki bug)
    • Unix domain socket
    • SSL
  • Sistem file

    • Sistem file virtual
    • Ext2
    • FAT12/16/32
    • Dev
    • Ram
    • Proc
    • Sys
    • 9P
  • Dukungan bootloader

    • GRUB
    • Bootloader BIOS kustom
    • Bootloader UEFI kustom

Struktur kode

Setiap komponen utama dan pustaka memiliki subdirektori sendiri. Setiap direktori memiliki direktori include yang berisi semua file header untuk komponen tersebut. Semua header disertakan menggunakan path absolut.

Build

Paket yang dibutuhkan

  • apt (diuji pada Ubuntu 22.04)

    • build-essential, git, ninja-build, texinfo, bison, flex, libgmp-dev, libmpfr-dev, libmpc-dev, parted, qemu-system-x86, cpu-checker
  • pacman

    • base-devel, git, wget, cmake, ninja, parted, qemu-system-x86

Kompilasi

  • Untuk membangun toolchain untuk sistem operasi ini, Anda dapat menjalankan perintah berikut. Langkah ini hanya perlu dilakukan satu kali, dan mungkin memerlukan waktu lama.

    • ./bos toolchain
  • Untuk membangun sistem operasinya sendiri, Anda dapat menjalankan salah satu perintah berikut. Hak akses root diperlukan untuk membuat/memodifikasi image disk.

    • ./bos qemu
    • ./bos qemu-nographic
    • ./bos qemu-debug
    • ./bos bochs
  • Anda juga dapat membangun kernel atau image disk tanpa menjalankannya.

    • ./bos kernel
    • ./bos image
  • Untuk build bagi arsitektur lain, atur variabel lingkungan BANAN_ARCH=_arch_ (mis. BANAN_ARCH=i686).

  • Untuk mengganti bootloader, atur variabel lingkungan BANAN_BOOTLOADER. Nilai yang didukung adalah BANAN (bootloader kustom) dan GRUB.

  • Untuk menjalankan dengan UEFI, atur variabel lingkungan BANAN_UEFI_BOOT=1. Selain itu, OVMF_PATH harus diarahkan ke OVMF yang benar (default /usr/share/ovmf/x64/OVMF.fd).

  • Jika image disk rusak atau Anda ingin membuat yang baru, Anda dapat menghapus _build/banan-os.img_ secara manual atau menjalankan perintah berikut.

    • ./bos image-full
  • Script shell completion untuk zsh juga dibuat. Anda dapat menyalin file _script/shell-completion/zsh/_bos_ ke /usr/share/zsh/site-functions/ atau menambahkan _script/shell-completion/zsh_ ke fpath di .zshrc.

Kontribusi

  • Upstream dihosting di server pribadi, sehingga menggabungkan kontribusi tidak sesederhana di GitHub. Jika Anda mengirim PR di GitHub, diff dapat diunduh dan diterapkan secara manual. Jika diinginkan, akun di server git pribadi juga dapat disediakan. Dalam hal ini, silakan hubungi melalui email atau Discord.

  • Karena ini terutama untuk pengalaman belajar, sebelum menambahkan fitur baru, harap hubungi terlebih dahulu melalui email, Discord, issue, dan sebagainya. Jika Anda mengirim PR tanpa bertanya lebih dulu untuk pekerjaan yang sebenarnya sudah direncanakan, kemungkinan besar PR tersebut akan ditutup. Perbaikan bug selalu diterima.

  • Pesan commit harus diformat sebagai berikut.

    1. Baris pertama harus berformat " Subject: Description ", dengan Subject menunjukkan area yang terdampak (Kernel, Shell, BuildSystem, dll.), dan Description berupa penjelasan singkat tentang perubahan. Baris pertama harus ditulis dalam 72 karakter atau kurang.
    2. Isi pesan harus menjelaskan perubahan dan alasan perubahan tersebut secara rinci.
  • Semua commit harus lolos dari hook pre-commit yang didefinisikan di .pre-commit-config.yaml. Untuk petunjuk menyiapkan pre-commit, silakan lihat pre-commit.com.

1 komentar

 
GN⁺ 2024-12-06
Komentar Hacker News
  • Memuji implementasi driver USB dari nol. Menyebut bahwa ia sempat merusak sistem dengan memasukkan cat doom1.wad
  • Menyukai nama proyeknya. Bertanya bagian apa yang paling sulit untuk diimplementasikan, dan apakah ada hambatan serius
  • Menyebut bahwa kalimat yang biasanya secara konvensional disertakan dalam pengumuman kernel OS baru tidak ada
  • Menganggap proyek ini sangat keren. Bertanya kira-kira berapa jam per minggu yang dihabiskan untuk proyek ini, dan apakah profil pelajar itu berarti mahasiswa. Jika ya, penasaran apakah pengerjaan OS ini dilakukan sebagai bagian dari studi
  • Penasaran bagaimana proses pengembangannya berjalan. Bertanya apakah dijalankan di VM atau di perangkat keras sungguhan. Bertanya apa saja yang dipelajari selama pengembangan dan bagaimana catatan pengembangannya dikelola
  • Mengakui bahwa pekerjaan yang dibutuhkan pasti sangat banyak. Penasaran tantangan yang paling menonjol itu apa
  • Menganggap ini proyek dengan kumpulan fitur yang tidak terduga. Bertanya apakah ada rencana untuk mem-porting lebih banyak perangkat lunak
  • Menganggap proyek ini keren. Mengusulkan PlatanOS sebagai nama alternatif untuk fork
  • Menganggap ini pencapaian yang sangat mengesankan, dan juga menyukai nama proyeknya
  • Mengucapkan selamat atas side project yang keren ini. Meminta tips tentang titik awal atau bahan referensi bagi orang-orang yang ingin mencoba proyek serupa