2 điểm bởi GN⁺ 2024-12-06 | 1 bình luận | Chia sẻ qua WhatsApp

banan-os

Dự án này là một hệ điều hành sở thích được viết bằng C++, hỗ trợ các kiến trúc x86_64 và i686. Nó mang lại trải nghiệm học tập độc đáo so với các sản phẩm khác hoặc các dự án mã nguồn mở hiện có.

Tính năng

  • Chung

    • Không gian người dùng Ring3
    • SMP (xử lý đa bộ)
    • Framebuffer tuyến tính (VESA và GOP)
    • Ngăn xếp mạng
    • Tải tệp thực thi ELF
    • Trình thông dịch AML (một phần)
    • Môi trường đồ họa cơ bản
      • Trình giả lập terminal
      • Thanh trạng thái
      • Trình khởi chạy chương trình
      • Một vài ứng dụng hữu ích
    • Liên kết động ELF
    • Bộ nhớ copy-on-write
      • Ánh xạ tệp
      • Ánh xạ ẩn danh
  • Trình điều khiển

    • Ổ đĩa NVMe
    • Ổ đĩa ATA (IDE, SATA)
    • NIC E1000 và E1000E
    • NIC RTL8111/8168/8211/8411
    • Bàn phím PS2 (mọi bộ mã quét)
    • Chuột PS2
    • USB
      • Bàn phím
      • Chuột
      • Lưu trữ dung lượng lớn
      • Hub
    • Thiết bị virtio (mạng, lưu trữ)
  • Mạng

    • ARP
    • ICMP
    • IPv4
    • UDP
    • TCP (một phần và có lỗi)
    • Unix domain socket
    • SSL
  • Hệ thống tệp

    • Hệ thống tệp ảo
    • Ext2
    • FAT12/16/32
    • Dev
    • Ram
    • Proc
    • Sys
    • 9P
  • Hỗ trợ bootloader

    • GRUB
    • Bootloader BIOS tùy chỉnh
    • Bootloader UEFI tùy chỉnh

Cấu trúc mã

Mỗi thành phần chính và thư viện đều có thư mục con riêng. Mỗi thư mục có một thư mục include chứa toàn bộ tệp header của thành phần đó. Tất cả header được include bằng đường dẫn tuyệt đối.

Build

Các gói cần thiết

  • apt (đã kiểm thử trên 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

Biên dịch

  • Để build toolchain cho hệ điều hành này, có thể chạy lệnh sau. Bước này chỉ cần thực hiện một lần và có thể mất nhiều thời gian.

    • ./bos toolchain
  • Để build chính hệ điều hành, có thể chạy một trong các lệnh sau. Cần quyền root để tạo/sửa ảnh đĩa.

    • ./bos qemu
    • ./bos qemu-nographic
    • ./bos qemu-debug
    • ./bos bochs
  • Cũng có thể build mà không chạy kernel hoặc ảnh đĩa.

    • ./bos kernel
    • ./bos image
  • Để build cho kiến trúc khác, đặt biến môi trường BANAN_ARCH=_arch_ (ví dụ BANAN_ARCH=i686).

  • Để thay đổi bootloader, đặt biến môi trường BANAN_BOOTLOADER. Các giá trị được hỗ trợ là BANAN (bootloader tùy chỉnh) và GRUB.

  • Để chạy với UEFI, đặt biến môi trường BANAN_UEFI_BOOT=1. Ngoài ra cần đặt OVMF_PATH tới OVMF phù hợp (mặc định là /usr/share/ovmf/x64/OVMF.fd).

  • Nếu ảnh đĩa bị hỏng hoặc muốn tạo mới, có thể xóa thủ công _build/banan-os.img_ hoặc chạy lệnh sau.

    • ./bos image-full
  • Script hoàn thành shell cho zsh cũng được tạo ra. Có thể sao chép tệp _script/shell-completion/zsh/_bos_ vào /usr/share/zsh/site-functions/ hoặc thêm _script/shell-completion/zsh_ vào fpath trong .zshrc.

Đóng góp

  • Upstream được lưu trữ trên máy chủ cá nhân, nên việc hợp nhất đóng góp không đơn giản như trên GitHub. Nếu gửi PR trên GitHub, có thể tải diff xuống và áp dụng thủ công. Nếu muốn, bạn có thể được cấp tài khoản trên máy chủ git cá nhân. Trong trường hợp đó, vui lòng liên hệ qua email hoặc Discord.

  • Đây chủ yếu là một trải nghiệm học tập, vì vậy vui lòng liên hệ trước qua email, Discord, issue, v.v. trước khi thêm tính năng mới. Nếu gửi PR cho phần việc mà tôi đang dự định làm mà không hỏi trước, khả năng cao PR sẽ bị đóng. Các bản sửa lỗi luôn được hoan nghênh.

  • Commit message phải được định dạng như sau.

    1. Dòng đầu tiên phải theo định dạng " Subject: Description ", trong đó Subject biểu thị khu vực bị ảnh hưởng (Kernel, Shell, BuildSystem, v.v.) và Description là mô tả ngắn gọn về thay đổi. Dòng đầu tiên phải dài tối đa 72 ký tự.
    2. Phần thân thông điệp phải giải thích chi tiết thay đổi là gì và tại sao thay đổi đó được thực hiện.
  • Mọi commit phải vượt qua các pre-commit hook được định nghĩa trong .pre-commit-config.yaml. Để biết hướng dẫn thiết lập pre-commit, hãy tham khảo pre-commit.com.

1 bình luận

 
GN⁺ 2024-12-06
Ý kiến trên Hacker News
  • Khen ngợi việc tự triển khai trình điều khiển USB từ đầu. Có nhắc rằng đã làm hỏng hệ thống bằng cách nhập cat doom1.wad
  • Thích tên của dự án. Hỏi phần khó nhất trong số những gì đã triển khai là gì, và liệu có trở ngại nghiêm trọng nào hay không
  • Nhắc rằng đang thiếu câu văn theo thông lệ thường có trong các bài công bố kernel OS mới
  • Nghĩ dự án rất tuyệt. Hỏi mỗi tuần dành khoảng bao nhiêu giờ cho dự án này, và liệu hồ sơ sinh viên có nghĩa là đang học đại học hay không. Nếu đúng vậy, cũng tò mò không biết bạn có làm việc về OS như một phần của việc học không
  • Tò mò về quy trình phát triển diễn ra như thế nào. Hỏi có chạy trong VM hay trên phần cứng thực, đồng thời hỏi đã học được gì trong quá trình phát triển và quản lý nhật ký phát triển như thế nào
  • Thừa nhận rằng hẳn đã cần rất nhiều công sức. Tò mò những thách thức nổi bật là gì
  • Cho rằng đây là một dự án có bộ tính năng ngoài dự kiến. Hỏi liệu có kế hoạch port thêm nhiều phần mềm hơn không
  • Nghĩ dự án rất ngầu. Đề xuất PlatanOS làm tên thay thế cho một bản fork
  • Cho rằng đây là một thành tựu rất ấn tượng và cũng thích tên của dự án
  • Chúc mừng vì đây là một side project rất hay. Xin gợi ý về điểm khởi đầu hoặc tài liệu cho những ai muốn thử một dự án tương tự