HN เผยแพร่: Banan-OS ระบบปฏิบัติการคล้าย Unix ที่เขียนขึ้นใหม่ทั้งหมดตั้งแต่ต้น
(github.com/Bananymous)banan-os
โปรเจ็กต์นี้เป็นระบบปฏิบัติการงานอดิเรกที่เขียนด้วย C++ และรองรับสถาปัตยกรรม x86_64 และ i686 โดยมอบประสบการณ์การเรียนรู้ที่เป็นเอกลักษณ์เมื่อเทียบกับผลิตภัณฑ์อื่นหรือโปรเจ็กต์โอเพนซอร์สที่มีอยู่แล้ว
ฟีเจอร์
-
ทั่วไป
- พื้นที่ผู้ใช้ Ring3
- SMP (มัลติโพรเซสซิง)
- linear framebuffer (VESA และ GOP)
- network stack
- การโหลดไฟล์ปฏิบัติการ ELF
- AML interpreter (บางส่วน)
- สภาพแวดล้อมกราฟิกพื้นฐาน
- terminal emulator
- แถบสถานะ
- ตัวเรียกใช้งานโปรแกรม
- แอปที่มีประโยชน์บางตัว
- ELF dynamic linking
- หน่วยความจำแบบ copy-on-write
- file mapping
- anonymous mapping
-
ไดรเวอร์
- ดิสก์ NVMe
- ดิสก์ ATA (IDE, SATA)
- NIC E1000 และ E1000E
- NIC RTL8111/8168/8211/8411
- คีย์บอร์ด PS2 (ทุกชุดสแกนโค้ด)
- เมาส์ PS2
- USB
- คีย์บอร์ด
- เมาส์
- อุปกรณ์เก็บข้อมูลขนาดใหญ่
- ฮับ
- อุปกรณ์ virtio (เครือข่าย, สตอเรจ)
-
เครือข่าย
- ARP
- ICMP
- IPv4
- UDP
- TCP (บางส่วนและมีบั๊ก)
- Unix domain socket
- SSL
-
ระบบไฟล์
- virtual file system
- Ext2
- FAT12/16/32
- Dev
- Ram
- Proc
- Sys
- 9P
-
รองรับบูตโหลดเดอร์
- GRUB
- BIOS bootloader แบบกำหนดเอง
- UEFI bootloader แบบกำหนดเอง
โครงสร้างโค้ด
แต่ละคอมโพเนนต์หลักและไลบรารีมีไดเรกทอรีย่อยของตัวเอง แต่ละไดเรกทอรีมีไดเรกทอรี include ที่รวมไฟล์เฮดเดอร์ทั้งหมดของคอมโพเนนต์นั้นไว้ เฮดเดอร์ทั้งหมดถูก include ด้วย absolute path
การบิลด์
แพ็กเกจที่ต้องใช้
-
apt (ทดสอบบน 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
การคอมไพล์
-
หากต้องการบิลด์ toolchain สำหรับระบบปฏิบัติการนี้ สามารถรันคำสั่งต่อไปนี้ได้ ขั้นตอนนี้ทำเพียงครั้งเดียวและอาจใช้เวลานาน
./bos toolchain
-
หากต้องการบิลด์ตัวระบบปฏิบัติการเอง สามารถรันหนึ่งในคำสั่งต่อไปนี้ได้ ต้องใช้สิทธิ์ root เพื่อสร้าง/แก้ไขดิสก์อิมเมจ
./bos qemu./bos qemu-nographic./bos qemu-debug./bos bochs
-
สามารถบิลด์ได้โดยไม่รันเคอร์เนลหรือดิสก์อิมเมจ
./bos kernel./bos image
-
หากต้องการบิลด์สำหรับสถาปัตยกรรมอื่น ให้ตั้งค่าตัวแปรสภาพแวดล้อม
BANAN_ARCH=_arch_(เช่นBANAN_ARCH=i686) -
หากต้องการเปลี่ยนบูตโหลดเดอร์ ให้ตั้งค่าตัวแปรสภาพแวดล้อม
BANAN_BOOTLOADERโดยค่าที่รองรับคือBANAN(บูตโหลดเดอร์แบบกำหนดเอง) และGRUB -
หากต้องการรันด้วย UEFI ให้ตั้งค่าตัวแปรสภาพแวดล้อม
BANAN_UEFI_BOOT=1และต้องตั้งค่าOVMF_PATHให้ชี้ไปยัง OVMF ที่ถูกต้องด้วย (ค่าเริ่มต้นคือ/usr/share/ovmf/x64/OVMF.fd) -
หากดิสก์อิมเมจเสียหายหรืออยากสร้างใหม่ สามารถลบ
_build/banan-os.img_ด้วยตนเอง หรือรันคำสั่งต่อไปนี้./bos image-full
-
มีการสร้างสคริปต์ shell completion สำหรับ zsh ด้วย สามารถคัดลอกไฟล์
_script/shell-completion/zsh/_bos_ไปที่/usr/share/zsh/site-functions/หรือเพิ่ม_script/shell-completion/zsh_เข้าไปในfpathของ.zshrc
การมีส่วนร่วม
-
เนื่องจาก upstream โฮสต์อยู่บนเซิร์ฟเวอร์ส่วนตัว การรวม contribution จึงไม่ง่ายเหมือนบน GitHub หากส่ง PR บน GitHub ก็สามารถดาวน์โหลด diff และนำไปใช้ด้วยตนเองได้ หากต้องการ ก็สามารถให้บัญชีบนเซิร์ฟเวอร์ git ส่วนตัวได้ ในกรณีนั้นกรุณาติดต่อทางอีเมลหรือ Discord
-
เนื่องจากนี่เป็นประสบการณ์เพื่อการเรียนรู้เป็นหลัก จึงขอให้ติดต่อก่อนผ่านอีเมล Discord หรือ issue ก่อนเพิ่มฟีเจอร์ใหม่ หากส่ง PR มาเกี่ยวกับงานที่ผู้พัฒนากำลังวางแผนทำอยู่โดยไม่ได้สอบถามก่อน มีโอกาสสูงที่ PR จะถูกปิด แต่การแก้บั๊กยินดีต้อนรับเสมอ
-
ข้อความ commit ต้องมีรูปแบบดังนี้
- บรรทัดแรกต้องอยู่ในรูปแบบ " Subject: Description " โดย Subject ระบุพื้นที่ที่ได้รับผลกระทบ (เช่น Kernel, Shell, BuildSystem) และ Description เป็นคำอธิบายสั้น ๆ ของการเปลี่ยนแปลง บรรทัดแรกต้องยาวไม่เกิน 72 อักขระ
- เนื้อความของข้อความต้องอธิบายรายละเอียดของการเปลี่ยนแปลงและเหตุผลที่เปลี่ยน
-
commit ทั้งหมดต้องผ่าน pre-commit hook ที่กำหนดไว้ใน
.pre-commit-config.yamlสำหรับคำแนะนำในการตั้งค่า pre-commit โปรดดูที่ pre-commit.com
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
cat doom1.wadPlatanOS