HN công bố: Banan-OS, hệ điều hành kiểu Unix được viết từ đầu
(github.com/Bananymous)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 đặtOVMF_PATHtớ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àofpathtrong.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.
- 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ự.
- 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
Ý kiến trên Hacker News
cat doom1.wadPlatanOSlàm tên thay thế cho một bản fork