MOS는 처음부터 개발 된 유닉스와 같은 운영 체제이며 POSIX를 준수하는 것을 목표로합니다.
? 선택적 기능
마코스
패키지를 설치하십시오
$ brew install qemu nasm gdb i386-elf-gcc i386-elf-grub bochs e2fsprogs xorriso
배쉬 구성을 열고 아래에 줄을 추가하십시오. 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 , Mac 용 Extf를 설치하면 도움이 될 수 있습니다.
우분투
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 도구 체인을 설치하십시오
$ 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-> 클릭 RUN-> "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를 수동으로 저장해야합니다.