MOS est le système d'exploitation de type Unix développé à partir de zéro et vise à être conforme à POSIX.
? Fonctionnalités facultatives
Macos
installer des packages
$ brew install qemu nasm gdb i386-elf-gcc i386-elf-grub bochs e2fsprogs xorriso
Ouvrez votre configuration bash et ajoutez des lignes ci-dessous. Selon votre configuration bash, le fichier peut être différent. J'utilise ohmyzsh , donc c'est .zshrc
# .zshrc
alias grub-file=i386-elf-grub-file
alias grub-mkrescue=i386-elf-grub-mkrescue
Émulateur de course
$ cd src && mkdir logs
$ ./create_image.sh && ./build.sh qemu iso
ouvrir un autre terminal
$ cd src
$ gdb isodir/boot/mos.bin
# in gdb
(gdb) target remote localhost:1234
(gdb) c
✍? Si vous obtenez cette erreur hdiutil: attach failed - no mountable file systems , l'installation d'extendus pour Mac pourrait aider
Ubuntu
Installer des packakges
$ sudo apt install build-essential autopoint bison gperf texi2html texinfo qemu automake-1.15 nasm xorriso qemu-system-i386Installez le compilateur Cross GCC via https://wiki.osdev.org/gcc_cross-compiler#the_build
Installez GCC (version 9.1.0) et binutils (version 2.32).
Ouvrez Src / Toolchain / build.sh et modifiez les variables sysroot et préfixes pour s'adapter dans votre cas
PREFIX="$HOME/opt/cross"
TARGET=i386-pc-mos
# SYSROOT cannot locate inside PREFIX
SYSROOT="$HOME/Projects/mos/src/toolchain/sysroot"
JOBCOUNT=$(nproc)
Installer la chaîne d'outils MOS
$ cd src/toolchain
$ ./build.sh
Émulateur de course
$ 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
Ouvrir un autre terminal
$ cd src
$ gdb isodir/boot/mos.bin
# in gdb
(gdb) target remote localhost:1234
(gdb) c
✍️ Pour obtenir une adresse d'espace utilisateur pour le débogage
$ 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
Test unitaire
$ cd test && git clone https://github.com/ThrowTheSwitch/Unity.git unity
$ make clean && make
Débogage
Dans build.sh , ajoutant -s -S juste après qemu pour passer en mode débogage. Actuellement, j'utilise VScode + Debug natif -> Cliquez sur Exécuter -> Choisissez "attacher à Qemu"
Surveillance
Par défaut, MOS journalise la sortie du terminal. Si vous souhaitez surveiller via le fichier, faire des étapes suivantes
# src/build.sh#L71
-serial stdio
↓
-serial file:logs/uart1.log
$ tail -f serial.log | while read line ; do echo $line ; done
✍? L'utilisation tail in Pipe Way pour colorer la sortie (comme ci-dessus) provoque un délai -> doit économiser manuellement dans l'IDE pour obtenir les dernières modifications