mos
1.0.0
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 ,則安裝extfs for Mac可能會有所幫助
Ubuntu
安裝Packakges
$ sudo apt install build-essential autopoint bison gperf texi2html texinfo qemu automake-1.15 nasm xorriso qemu-system-i386通過https://wiki.osdev.org/gcc_cross-compiler#the_build安裝GCC交叉編譯器
安裝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中, qemu之後添加-s -S以切換到調試模式。目前,我使用VSCODE +本機調試 - >單擊“運行 - >選擇“附加到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才能獲得最新的更改