C ++의 하위 집합에 작성된 일부 유닉스와 같은 기능을 갖춘 모 놀리 식 커널을 기반으로하는 작은 32 비트 X86 PC 운영 체제.
참고 :이 메타 문서화는 여전히 진행중인 작업입니다 :-)
Unix와 같은 기능을 갖춘 작은 데스크톱 운영 체제는 Hogeschool Utrecht의 1 학년 TI 학생들이 이해할 수있는 C ++ 서브 세트로 작성되어 교육 맥락에서 사용될 수 있습니다.
가능하면 복잡성을 줄이고 가독성을 높이기 위해 성능과 기능이 희생됩니다. 이를 통해 교육적 맥락에서 사용하기 위해 소프트웨어가 더 이해할 수 있도록 도와줍니다. 그럼에도 불구하고, Hogeschool Utrecht의 OS-Courses의 중요한 주제가 구현되어야합니다.
실제 하드웨어에서는 잘 부팅해야하지만 Rikaios는 에뮬레이터 또는 가상 머신을 염두에두고 개발되었습니다. 지원되는 하드웨어는 단순성을 위해 의도적으로 제한됩니다.
의무적 면책 조항 : OS는 실제 하드웨어에서 실행할 때 마더 보드를 녹이고 애완 동물 마우스를 섭취 할 수 있습니다.
./aux 디렉토리를 참조하십시오. 그래도 화려한 것을 기대하지 마십시오. 현재 모든 직렬 터미널 캡처입니다!
현재 기능 세트가있는 OS는 2019 년 2 월부터 7 월까지 대략 6 개월 동안 개발되었습니다.
Rikaios는 아직 완전한 Linux 대용품이 아닙니다 ;-)
작업이 필요하거나 현재 작업중인 몇 가지 기능이 있습니다 (기여 섹션 참조).
grep -ERn 'TODO|FIXME|XXX' src/kernel/src src/kernel/include src/user/Rikaios의 목표는 작게 유지하는 것입니다. 예를 들어 네트워크 스택 또는 USB 드라이버는 구현을 위해 고려되지 않을 것입니다.
Rikaios를 구축하고 실행하려면이 소프트웨어가 설치되어 있어야합니다 (Linux-ish 호스트에).
버전 번호는 특히 Clang, LLVM 및 LLD의 경우 최근이어야합니다. 위의 종속성의 호환 버전이 포함 된 아치 Linux Dockerfile (@peikos 덕분)가 제공됩니다.
I686-ELF에 대한 GCC 크로스 툴 체인이있는 경우 원하는 경우 Clang/LLVM 대신 GCC를 사용할 수 있습니다. 도구 체인 전환 방법에 대한 자세한 내용은 src/kernel/Makefile 참조하십시오.
| 예배 규칙서 | 설명 |
|---|---|
/src/boot | 부트 로더 (Bootsect 및 Stage2) |
/src/boot/utils | 부트 로더 설치 프로그램 |
/src/kernel | 커널 코드 |
/src/kernel/include | 커널 헤더는 사용자 랜드에 노출되었습니다 |
/src/kernel/include/os-std | OS 표준 라이브러리 (수학, 컨테이너 등) |
/src/user | 사용자 지대 소프트웨어 |
/src/user/libsys | Userland C ++ 시스템 라이브러리 |
/src/disk | (FAT32) OS에서 사용할 수있는 파일 시스템 |
| Makefile | 설명 |
/src/Makefile | 모든 것을 빌드하고 부팅 디스크를 생성하고 에뮬레이터를 실행합니다 |
/src/boot/Makefile | 부트 로더 및 설치 프로그램을 구축합니다 |
/src/kernel/Makefile | 커널을 만듭니다 |
/src/user/Makefile | 사용자 랜드를 구축합니다 |
위의 모든 makefile에는 동일한 디렉토리의 Makefile.local 파일이 포함됩니다. 이를 통해 툴체인 실행 가능 이름 및 경로를 무시하고 선택적으로 추가 대상을 추가 할 수 있습니다.
멀티 코어 시스템에서 빌드 성능을 높이기 위해 -j 4 (또는 더 높은)를 통과하는 것을 잊지 마십시오.
커널과 부트 로더를 구축하고 QEMU 가상화기 / 에뮬레이터로 실행되는 부팅 디스크를 만듭니다. OS에 대한 직렬 연결은 Make 명령을 실행하는 터미널에서 열립니다.
디스크 만들기 && 달리기
현재 OS Shell 및 TTY 드라이버에는 정교한 라인 편집 기능과 명령 줄 기록 지원이 없습니다. 편의를 위해 rlwrap 로 QEMU를 래핑하여 호스트 측면에서 라인 편집 시설을 사용할 수 있습니다 (강력하게 권장).
디스크를 만들고 && rlwrap -a를 실행하십시오
VirtualBox에서 실행하려면 다음을 수행하십시오.
vdi 대상을 사용하여 디스크를 만듭니다.VDI를 만드십시오
그 다음에:
disk.vdi 파일을 IDE 디스크로 추가하십시오이제 VirtualBox를 통해 VM을 시작할 수 있어야합니다.
직렬 I/O는 일하기가 어려울 수 있습니다. 현재 OS 버전은 기본적으로 화면 및 키보드/마우스와 크게 상호 작용하지 않습니다.
시스템이 업 및 실행되면 직렬 터미널에 프롬프트가 표시됩니다 (모니터를 연결 한 경우 스플래시 화면도 나타날 수 있음). 직렬 터미널을 사용하여 OS와 상호 작용할 수 있습니다. 시작하려면 help 명령을 시도하십시오.
디스크에 다수의 유틸리티 프로그램이 제공됩니다. ls bin 입력하여 설치된 프로그램을 봅니다 (아직 /disk0p1 디렉토리에 있다고 가정). /disk0p1/bin 의 모든 ELF 프로그램은 전체 경로를 입력하지 않고 명령으로 실행할 수 있습니다 (암시 적 $PATH 디렉토리로 생각하십시오). 마찬가지로 forth.elf 와 같은 작업 디렉토리의 모든 ELF 파일은 이름을 입력하면 실행할 수 있습니다.
유틸리티의 작동 방식을 보거나 자체 추가하려면이 저장소의 src/user 디렉토리의 readme 파일을 참조하십시오.
키보드에서 ESC를 누르면 (직렬 터미널이 아닌 비디오 창에서) 내장 디버깅 유틸리티 인 커널 쉘이 가능합니다. 이는 실행 프로세스 및 메모리에 대한 다양한 통계 및 정보를 인쇄하는 데 사용될 수 있습니다 (Kshell에있는 경우 Help help Command 참조).
QEMU 또는 Bochs로 커널을 디버깅 할 수 있습니다.
시작 옵션은 ./src/gdbrc를 참조하십시오 (이 파일 경로를 Makefile.local 에서 무시할 수 있음).
디스크 만들기 && 디버그를 만드십시오
구성 옵션은 ./src/bochsrc를 참조하십시오 (이 파일 경로를 Makefile.local 에서 무시할 수 있음).
디스크 만들기 && 보크를 만드십시오
ld.lld : 오류 : 라이브러리를 찾을 수 없습니다 -lclang_rt.builtins -i386
locate clang_rt.builtins )kernel/Makefile.local 만듭니다 : LD_BUILTIN_DIR += /the/directory/containing/the/clang/lib 공개적으로 이용 가능한 문서가 현재 제한되어 있음을 이해하므로 주저하지 말고 문제를 열거나 이메일을 보내 주시기 바랍니다.
Github / Gitlab 문제를 열어서 노력이 복제되지 않도록하십시오 :-)
이를위한 프로세스는 앞으로 몇 주 안에 공식화되어야합니다. 다양한 정도의 난이도 / 크기로 확실히 작업 할 수있는 몇 가지 열린 문제 / 기능이 있습니다. 곧 문서화하겠습니다 ™.
이 프로젝트는 Apache 라이센스 2.0에 따라 라이센스가 부여됩니다. 자세한 내용은 ./license를 참조하십시오.
이 운영 체제는 다음과 같은 예외만으로 처음부터 작성되었습니다.