MOS เป็นระบบปฏิบัติการที่มีลักษณะคล้าย UNIX ที่พัฒนาขึ้นตั้งแต่เริ่มต้นและตั้งเป้าหมายที่จะเป็นไปตาม POSIX
- คุณสมบัติเสริม
แม็กอส
ติดตั้งแพ็คเกจ
$ brew install qemu nasm gdb i386-elf-gcc i386-elf-grub bochs e2fsprogs xorriso
เปิดการกำหนดค่า Bash ของคุณและเพิ่มบรรทัดด้านล่าง ขึ้นอยู่กับการกำหนดค่า bash ของคุณไฟล์อาจแตกต่างกัน ฉันใช้ ohmyzsh ดังนั้นมันคือ .zshrc
# .zshrc
alias grub-file=i386-elf-grub-file
alias grub-mkrescue=i386-elf-grub-mkrescue
เรียกใช้อีมูเลเตอร์
$ cd src && mkdir logs
$ ./create_image.sh && ./build.sh qemu iso
เปิดเทอร์มินัลอื่น
$ cd src
$ gdb isodir/boot/mos.bin
# in gdb
(gdb) target remote localhost:1234
(gdb) c
? หากคุณได้รับข้อผิดพลาดนี้ hdiutil: attach failed - no mountable file systems การติดตั้ง extfs สำหรับ Mac อาจช่วยได้
Ubuntu
ติดตั้ง packakges
$ sudo apt install build-essential autopoint bison gperf texi2html texinfo qemu automake-1.15 nasm xorriso qemu-system-i386ติดตั้ง GCC Cross Compilier ผ่าน https://wiki.osdev.org/gcc_cross-compiler#the_build
ติดตั้ง GCC (เวอร์ชัน 9.1.0) & Binutils (เวอร์ชัน 2.32)
เปิด src/toolchain/build.sh และแก้ไขตัวแปร sysroot และคำนำหน้าเพื่อให้พอดีกับกรณีของคุณ
PREFIX="$HOME/opt/cross"
TARGET=i386-pc-mos
# SYSROOT cannot locate inside PREFIX
SYSROOT="$HOME/Projects/mos/src/toolchain/sysroot"
JOBCOUNT=$(nproc)
ติดตั้ง MOS Toolchain
$ cd src/toolchain
$ ./build.sh
เรียกใช้อีมูเลเตอร์
$ cd src && mkdir logs
$ ./create_image.sh
$ cd ports/figlet && ./package.sh && cd ../..
$ cd ports/bash && ./package.sh make && cd ../..
$ cd ports/coreutils && ./package.sh make && cd ../..
$ ./build.sh qemu iso
เปิดเทอร์มินัลอื่น
$ cd src
$ gdb isodir/boot/mos.bin
# in gdb
(gdb) target remote localhost:1234
(gdb) c
✍เพื่อรับที่อยู่ผู้ใช้พื้นที่สำหรับการดีบัก
$ i386-mos-readelf -e program
# find the line below and copy Addr
# [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
# [ x] .text PROGBITS xxx xxx xxx 00 AX 0 0 4
การทดสอบหน่วย
$ cd test && git clone https://github.com/ThrowTheSwitch/Unity.git unity
$ make clean && make
การดีบัก
ใน build.sh ให้เพิ่ม -s -S ทันทีหลังจาก qemu เพื่อเปลี่ยนเป็นโหมดดีบัก ขณะนี้ฉันใช้ VSCODE + Native Debug -> คลิก Run -> เลือก "แนบไปยัง QEMU"
การตรวจ
โดยค่าเริ่มต้น MOS จะบันทึกเอาต์พุตไปยังเทอร์มินัล หากคุณต้องการตรวจสอบผ่านไฟล์ให้ทำตามขั้นตอนต่อไปนี้
# src/build.sh#L71
-serial stdio
↓
-serial file:logs/uart1.log
$ tail -f serial.log | while read line ; do echo $line ; done
? การใช้ tail เป็นท่อเพื่อระบายสีเอาต์พุต (เช่นด้านบน) ทำให้เกิดความล่าช้า -> ต้องบันทึกด้วยตนเองใน IDE เพื่อรับการเปลี่ยนแปลงล่าสุด