O MOS é o sistema operacional do tipo UNIX desenvolvido a partir do zero e pretende ser compatível com Posix.
? Recursos opcionais
Macos
Instale pacotes
$ brew install qemu nasm gdb i386-elf-gcc i386-elf-grub bochs e2fsprogs xorriso
Abra sua configuração Bash e adicione linhas abaixo. Dependendo da sua configuração Bash, o arquivo pode ser diferente. Eu uso ohmyzsh , então é .zshrc
# .zshrc
alias grub-file=i386-elf-grub-file
alias grub-mkrescue=i386-elf-grub-mkrescue
executar emulador
$ cd src && mkdir logs
$ ./create_image.sh && ./build.sh qemu iso
Abra outro terminal
$ cd src
$ gdb isodir/boot/mos.bin
# in gdb
(gdb) target remote localhost:1234
(gdb) c
✍? Se você receber este erro hdiutil: attach failed - no mountable file systems , a instalação de extfs para Mac pode ajudar
Ubuntu
Instalar packakges
$ sudo apt install build-essential autopoint bison gperf texi2html texinfo qemu automake-1.15 nasm xorriso qemu-system-i386Instale o GCC Cross Compilier via https://wiki.osdev.org/gcc_cross-compiler#the_build
Instale o GCC (versão 9.1.0) e binutils (versão 2.32).
Abra Src/Toolchain/Build.sh e modifique as variáveis Sysroot e Prefix para se encaixar no seu caso
PREFIX="$HOME/opt/cross"
TARGET=i386-pc-mos
# SYSROOT cannot locate inside PREFIX
SYSROOT="$HOME/Projects/mos/src/toolchain/sysroot"
JOBCOUNT=$(nproc)
Instale o MOS Toolchain
$ cd src/toolchain
$ ./build.sh
Executar emulador
$ 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
Abra outro terminal
$ cd src
$ gdb isodir/boot/mos.bin
# in gdb
(gdb) target remote localhost:1234
(gdb) c
✍️ Para obter o endereço do espaço do usuário para depuração
$ 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
Teste de unidade
$ cd test && git clone https://github.com/ThrowTheSwitch/Unity.git unity
$ make clean && make
Depuração
em build.sh , adicionando -s -S logo após qemu para mudar para o modo de depuração. Atualmente, eu uso o vscode + depuração nativa -> clique em Executar -> Escolha "Anexar ao qemu"
Monitoramento
Por padrão, o MOS Logs Saída para o terminal. Se você deseja monitorar via arquivo, fazendo as seguintes etapas
# src/build.sh#L71
-serial stdio
↓
-serial file:logs/uart1.log
$ tail -f serial.log | while read line ; do echo $line ; done
✍? O uso tail no tubo para colorir a saída (como acima) causa um atraso -> tem que salvar manualmente no IDE para obter as últimas alterações