deodeokos
นี่คือโครงการระบบปฏิบัติการที่เขียนขึ้นตามหลักการของระบบปฏิบัติการมัลติคอร์ 64 บิตและหนังสือกู้ภัย
มันง่ายที่จะบันทึกดังนั้นอาจมีการเปลี่ยนแปลงและข้อผิดพลาดบ่อยครั้ง!
สิ่งแวดล้อมและการก่อสร้าง
- Apple M1 MacBook Air
- Docker (Ubuntu 18.04 / AMD64)
- ตั้งแต่ GCC, Qemu ... เป็นระบบปฏิบัติการที่เขียนในสภาพแวดล้อม x86_64 ถ้าคุณเป็น M1 คุณต้องเพิ่มตัวเลือกแพลตฟอร์ม Docker
docker build --platform linux/amd64 -t os:1.0 .
docker-compose up -d
docker exec -it os bash
./build.sh && ./qemu.sh
อ้างอิง
- สภาพแวดล้อม QEMU ที่นำมาใช้ในหนังสือและการกู้ภัยแบบหลายตัว -64 บิต -บิตคือ 0.10.4 ดังนั้นหากคุณใช้ QEMU ล่าสุดระบบปฏิบัติการจะไม่เกิดขึ้นอย่างถูกต้อง ฉันใช้เวอร์ชัน QEMU 2 และฉันจำเป็นต้องแก้ไข boot loader เพื่อแก้ปัญหา เปลี่ยน 80 -line
cmp al, 19 ของ bootloader.asm เป็น cmp al, 37 เพื่อทำงาน
การดีบัก
GDB
หากคุณดำเนินการดีบักผ่าน GDB คุณจะต้องมีเปลือกหอยสองตัว
docker exec -it os bash
./build.sh && ./qemu_debug.sh
gdb
target remote:1234
file 02.Kernel64/Temp/Kernel64.elf
การดีบักความคืบหน้าหลังจากการตั้งค่าเบรกพอยต์
vscode
ก่อนอื่นให้ติดตั้งส่วนขยายการดีบักดั้งเดิม
หากคุณดำเนินการแก้ไขข้อบกพร่องในสภาพแวดล้อม VSCODE ให้ทำตามกระบวนการต่อไปนี้
-
.vscode/task.json qemu build Execution - เรียกใช้ qemu debug ใน
.vscode/task.json - จุดพัก
- การดีบักด้วย F5
คุณสามารถปรับแต่งคำสั่งโดยการแก้ไขเนื้อหาของ .vscode/launch.json และ .vscode/task.json
เปลี่ยน
- 210125: การใช้งาน SPINLOCK SYNC
- 211220: การประมวลผลการกระจายแบบขัดจังหวะในโหมด I/O แบบสมมาตร
- 211116: การใช้งานหลายตัว 2 (การเปิดใช้งานหลัก)
- 211028: การใช้งานหลายตัว 1 (การใช้งานตาราง MP)
- 211020: การใช้ไดรเวอร์อุปกรณ์พอร์ตอนุกรม
- 211017: แคชระบบไฟล์และการใช้งาน Rampdic
- 211002: การใช้งานไฟล์ I / O
- 210927: การกำหนดค่าสภาพแวดล้อมการดีบัก
- 210902: การใช้งานระบบไฟล์อย่างง่าย
- 210830: เพิ่มฮาร์ดดิสก์ไดรเวอร์
- 210824: การใช้งานการจัดสรรหน่วยความจำแบบไดนามิก
- 210813: การใช้งานแบบมัลติเพล็ก
- 210809: โซลูชันเงื่อนไขการแข่งขันผ่าน mutex
- 210807: การใช้งานคิวแบบหลายระดับ
- 210802: การใช้งาน Round Robin Scheduler
- 210725: การใช้งานมัลติทาสกิ้งอย่างง่าย
- 210723: เพิ่มอุปกรณ์จับเวลา
- 210720: การใช้งานคอนโซลเชลล์
- 210719: การใช้งานการขัดจังหวะโดยใช้ PIC Controller
- 210717: เพิ่มการขัดจังหวะแป้นพิมพ์พื้นฐาน (การสำรวจ)
- 210716: เพิ่มคีย์บอร์ดไดรเวอร์
- 210712: แปลงจากโหมดการป้องกันเป็นโหมด IA-32E
- 210708: สร้างเคอร์เนลตัวแรก
- 210706: การเปลี่ยนจากโหมดจริงเป็นโหมดการป้องกัน
- 210701: เพิ่ม boot loader