MOSは、ゼロから開発されたUNIXのようなオペレーティングシステムであり、POSIXに準拠することを目指しています。
?オプションの機能
macos
パッケージをインストールします
$ 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ありません。
ubuntu
Packakgesをインストールします
$ sudo apt install build-essential autopoint bison gperf texi2html texinfo qemu automake-1.15 nasm xorriso qemu-system-i386https://wiki.osdev.org/gcc_cross-compiler#the_buildからGCC Cross Compilierをインストールします
GCC(バージョン9.1.0)とBinutils(バージョン2.32)をインストールします。
src/toolchain/build.shを開き、sysrootとprefix変数を変更して、ケースに適合します
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
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
ユニットテスト
$ cd test && git clone https://github.com/ThrowTheSwitch/Unity.git unity
$ make clean && make
デバッグ
build.shでは、 qemu直後に-s -Sを追加してデバッグモードに切り替えます。現在、vscode + native 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で手動で保存する必要があります