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
أوبونتو
تثبيت Packakges
$ sudo apt install build-essential autopoint bison gperf texi2html texinfo qemu automake-1.15 nasm xorriso qemu-system-i386قم بتثبيت برنامج Cross Crossed عبر 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
$ 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 + Debug الأصلي -> انقر فوق "تشغيل -> اختر" إرفاق 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 للحصول على أحدث التغييرات