ฉันลองทำระบบปฏิบัติการในแอสเซมบลี ฉันล้มเหลว รหัสนั้นโหดร้าย นี่คือความพยายามครั้งที่สองของฉันที่ฉันเดา
ฉันใช้ bootloader limine กับโปรโตคอล Stivale
เนื่องจาก repo นี้ใช้ limine เป็น submodule คุณจะต้องโคลน repo นี้โดยใช้ซ้ำ:
git clone --recursive https://github.com/soumitradev/BruhOS.git
การตั้งค่าคอมไพเลอร์ข้าม ขอแนะนำอย่างยิ่ง หากคุณต้องการรวบรวมโครงการนี้ ไฟล์ toolchain.sh พื้นฐานรวมอยู่ในรูทของ repo นี้ที่ติดตั้งคอมไพเลอร์ข้ามสำหรับแพลตฟอร์ม x86_64 สำหรับไฟล์ ELF
หลังจากติดตั้ง Cross Compiler คุณสามารถเรียก make run เพื่อเรียกใช้ OS ใน QEMU
ณ ตอนนี้มีคำสั่ง make ต่อไปนี้:
make all : สร้างไฟล์. hdd สำหรับระบบปฏิบัติการ แค่นั้นแค่นั้นmake disk : สร้างไฟล์. hdd สำหรับระบบปฏิบัติการ แค่นั้นแค่นั้นmake run : สร้างไฟล์. hdd สำหรับระบบปฏิบัติการและเรียกใช้ใน QEMUmake log : สร้างไฟล์. hdd สำหรับระบบปฏิบัติการเรียกใช้และให้ QEMU สร้างบันทึกmake logs : สร้างไฟล์. hdd สำหรับระบบปฏิบัติการเรียกใช้และให้ QEMU สร้างบันทึกmake debug : สร้างไฟล์. hdd สำหรับระบบปฏิบัติการเรียกใช้และแนบกับ GDB สำหรับการดีบักmake clean : ทำความสะอาดไดเรกทอรีการทำงานและลบสิ่งประดิษฐ์บิวด์ทั้งหมด การรันสคริปต์ toolchain.sh จะติดตั้งคอมไพเลอร์ข้ามที่ ~/.local/bin/cross_compiler/x86_64/ มันรวมถึง GCC, GDB และ Binutils Cross Compiler Binaries มีคำนำหน้า x86-64-elf- ตัวอย่างเช่นในการเรียกใช้ gcc คุณจะต้องเรียกใช้ ~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc โปรดทราบว่าคำนำหน้าจะถูกเตรียมไปยังไบนารีที่เราต้องการเรียกใช้อย่างไร
หมายเหตุ: ในการทำให้กระบวนการนี้เร็วขึ้นคุณจะต้องตั้งค่าจำนวนเธรดเป็นตัวแปรซึ่งโดยปกติจะมากกว่า 1 จำนวนเธรดที่เครื่องของคุณมี เครื่องของฉันมี 8 เธรดดังนั้นฉันตั้งค่าตัวแปร THREADS ในสคริปต์ toolchain.sh เป็น 9 โปรดตรวจสอบจำนวนเธรดที่คุณมีและเปลี่ยนตัวแปรนั้นในสคริปต์ toolchain.sh ตามลำดับ
ในการเขียนเวอร์ชัน GCC, GDB และ Binutils ล่าสุดคือ 10.2.0, 9.2 และ 2.35 ตามลำดับ หากคุณต้องการเวอร์ชันอื่นให้แทนที่ตัวแปร BINUTILSVERSION , GCCVERSION และ GDBVERSION ในสคริปต์ toolchain.sh เดียวกัน
หมายเหตุ: อย่าเรียกใช้สคริปต์นี้ในฐานะ Superuser การเรียกใช้สคริปต์จะต้องมีการเชื่อมต่ออินเทอร์เน็ตที่มั่นคงและกาแฟหนึ่งถ้วยเพราะใช้เวลาสักครู่;)
Limine เป็น bootloader ที่ยิ่งใหญ่ที่สุดที่เคยมีอยู่
Qword, Rock และ Dripos มีประโยชน์มาก รหัสนี้ค่อนข้างเป็นกลุ่มของรหัสของพวกเขา รหัสของพวกเขาเขียนได้ดีเข้าใจง่ายและเป็นสถานที่ที่ดีในการเริ่มเรียนรู้ OSDEV
เซิร์ฟเวอร์ Osdev Discord ยังเป็นสถานที่ที่ดีในการเรียนรู้ถามคำถามและโดยทั่วไปเป็นชุมชนที่ยอดเยี่ยม
ภาพหน้าจอเพราะมันไม่คุ้มค่ากับเวลาที่ได้รับเครื่องมือเพื่อทดสอบเคอร์เนลครึ่งเสร็จแล้ว


ไฟล์ทั้งหมดใช้มาตรฐาน C ++ 17 อย่าใช้ไลบรารีมาตรฐานใด ๆ ยกเว้น LIBGCC (ชัดเจนสำหรับการพัฒนา OS/เคอร์เนล) ควรทำความสะอาดไฟล์วัตถุและเคอร์เนลทั้งหมดก่อนที่จะใช้งาน make clean หรือลบไฟล์ด้วยตนเอง Gitignore มีตัวกรองพื้นฐานบางตัว แต่ตรวจสอบอีกครั้งว่าคุณไม่ได้ทำสิ่งประดิษฐ์แบบสร้างใด ๆ
ไฟล์ทั้งหมดยกเว้น makefile เป็นช่องว่างที่เยื้องด้วยเยื้องที่มี 2 ช่องว่าง ใช่ฉันชอบ 4 ช่องว่าง แต่มีประสบการณ์มาก่อนหน้านี้สิ่งนี้สามารถสร้างต้นไม้ขนาดใหญ่เช่นโครงสร้างและดูสะอาดกว่าด้วยการเยื้อง 2 พื้นที่ MakeFile ต้องการการเยื้องแท็บตามคำจำกัดความ การจัดรูปแบบจะทำให้มันแตก
ตรวจสอบให้แน่ใจว่าคุณใช้แนวทางการจัดรูปแบบ Google สามารถตั้งค่าในรหัส VS
อย่าผลักดันการกระทำใด ๆ โดยไม่ต้องทดสอบและทำให้แน่ใจว่าพวกเขาทำงาน
หากคุณสมบัติพื้นฐานทำงานตามที่ตั้งใจจะใช้ให้ผลักดันการกระทำของคุณ ฉันไม่คาดหวังให้คุณเห็นข้อบกพร่องด้านความปลอดภัยทุกอย่างและแก้ไขก่อนที่จะผลักดัน
ฉันอาจเพิ่มสคริปต์ตรวจสอบล่วงหน้าในภายหลังซึ่งทำให้แน่ใจว่ารหัสของคุณเป็นไปตามมาตรฐานเหล่านี้