MOS adalah sistem operasi seperti UNIX yang dikembangkan dari awal dan bertujuan untuk mematuhi POSIX.
? Fitur opsional
MacOS
Instal Paket
$ brew install qemu nasm gdb i386-elf-gcc i386-elf-grub bochs e2fsprogs xorriso
Buka konfigurasi bash Anda dan tambahkan baris di bawah ini. Bergantung pada konfigurasi bash Anda, file mungkin berbeda. Saya menggunakan ohmyzsh , jadi itu .zshrc
# .zshrc
alias grub-file=i386-elf-grub-file
alias grub-mkrescue=i386-elf-grub-mkrescue
Jalankan emulator
$ cd src && mkdir logs
$ ./create_image.sh && ./build.sh qemu iso
Buka terminal lain
$ cd src
$ gdb isodir/boot/mos.bin
# in gdb
(gdb) target remote localhost:1234
(gdb) c
✍? Jika Anda mendapatkan kesalahan ini hdiutil: attach failed - no mountable file systems , menginstal extfs untuk mac mungkin membantu
Ubuntu
Instal Packakges
$ sudo apt install build-essential autopoint bison gperf texi2html texinfo qemu automake-1.15 nasm xorriso qemu-system-i386Instal GCC Cross Compilier melalui https://wiki.osdev.org/gcc_cross-compiler#the_build
Instal GCC (versi 9.1.0) & binutils (versi 2.32).
Buka SRC/Toolchain/build.sh dan ubah variabel sysroot dan awalan agar sesuai dengan case Anda
PREFIX="$HOME/opt/cross"
TARGET=i386-pc-mos
# SYSROOT cannot locate inside PREFIX
SYSROOT="$HOME/Projects/mos/src/toolchain/sysroot"
JOBCOUNT=$(nproc)
Instal Mos Toolchain
$ cd src/toolchain
$ ./build.sh
Jalankan emulator
$ 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
Buka terminal lain
$ cd src
$ gdb isodir/boot/mos.bin
# in gdb
(gdb) target remote localhost:1234
(gdb) c
✍️ untuk mendapatkan alamat ruang pengguna untuk debugging
$ 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
Tes unit
$ cd test && git clone https://github.com/ThrowTheSwitch/Unity.git unity
$ make clean && make
Debugging
di build.sh , menambahkan -s -S tepat setelah qemu untuk beralih ke mode debug. Saat ini, saya menggunakan vScode + Debug asli -> klik run -> pilih "Lampirkan ke QEMU"
Pemantauan
Secara default, MOS mencatat output ke terminal. Jika Anda ingin memantau melalui file, melakukan langkah -langkah berikut
# src/build.sh#L71
-serial stdio
↓
-serial file:logs/uart1.log
$ tail -f serial.log | while read line ; do echo $line ; done
✍? Menggunakan tail dalam cara pipa untuk mewarnai output (seperti di atas) menyebabkan penundaan -> harus menyimpan secara manual di IDE untuk mendapatkan perubahan terbaru