Koraos는 처음부터 작성되고 설계된 운영 체제입니다. 애호가 개발자가 취미로 개발되었습니다.
이 저장소에는 Kora 시스템의 커널 코드가 포함되어 있습니다. 전체 시스템을 구축하려면 Koraos 저장소를보십시오.
나는 얼마 동안 내 자신의 커널을 만들려고 노력했습니다. 많은 재 작업 후, 깨지고 다시 생각하면 디자인에 대한 세심한 관리로 하나를 완전히 다시 시작합니다. 저의 목표는 항상 그들이해야 할 일을하는 프로그램을 구축하는 것이 었습니다.
이 소프트웨어는 여전히 어린 강아지이지만 곧 신뢰할 수있는 시스템을 구축하기를 희망합니다. 최신 시스템의 모든 기본 기능을 제공하며 여러 아키텍처에서 휴대 할 수 있습니다 (목표 : x86, x86_64, ARM).
상호 운용성 : 상황이 어떻게 만들어지고 왜 그런지 이해하려고 노력하면서 때때로 엄격한 Posix 또는 Unix 사양을 벗어납니다. NT와 Unix World와 함께 가능한 한 준수하려고 노력하지만 다른 선택을 할 수 있습니다.
커널 구축은 정기적 인 응용 프로그램을 구축하는 것과 같은 것이 아닙니다. 추가 작업이 필요할 수 있습니다.
코라의 다른 저장소에는 표준 Makefile 에 가까운 저장소가 포함되어 있습니다. configure 스크립트는 사용할 수 있지만 다른 디렉토리에서만 빌드 할 수 있으며 필수는 아닙니다. 이 스크립트는 빌드 옵션을 검색하고 지속하는 데만 사용됩니다.
여기서 주요 명령 목록 :
make # Build the kernel for the host architecture
make check # Build and run unit-tests
make coverage # Run tests and coppute coverage
make install # Build and update the kernel (not yet)
make install-headers # Copy and erase kernelheaders to $(prefix)/include
# For cross-compile using 'i386-kora-gcc' compiler
make target=i386-pc-kora CROSS=i386-kora- CC=gcc
# Simpler using configure
/path/to/sources/configure --target=i386
make # No need to set target or cross. 커널의 경우 거의 항상 크로스 컴파일이라는 것을 기억하십시오. 가장 일반적인 함정은 x86_64 호스트에서 i386 커널을 구축하는 것입니다.
기본적으로 독립형 환경을 사용하지만 호스트 헤더는 몇 가지 문제를 일으킬 수 있습니다.
케이스 또는 오류의 경우 '크로스 컴파일러'를 사용하는 것이 선호됩니다.
참고 : Binutils, GCC, Make and Git 과 같은 모든 패키지를 설치하고 일부 아키텍처의 어셈블러 (
i386및amd64와 같은 AMSIC 및 AMD64와 같은 어셈블러를 설치하십시오. 점검은 Valgrind 및 LCOV를 추가하십시오.
여기서도 구성을 확장하기 위해 Makefile 에서 수락 한 일부 변수도 다음과 같습니다.
VERBOSE=y : 인쇄 컴파일 명령QUIET=y : 정점 편집 단계를 인쇄하지 마십시오CFLAGS : C 컴파일러에 추가 플래그를 추가하십시오NODEPS=y : 포함하지 마십시오 *.D 종속 파일 (clean for clean 또는 'obj'디렉토리가 아직 존재하지 않는 경우)NOCOV=y : 단위 테스트의 적용 범위 옵션을 제거하십시오kname=? : 커널 전달 파일의 이름을 변경하십시오 빌드 후, 더러워지기 위해 여기에 있다면 디버깅 및 조사를 위해 qemu 와 gdb 에 대해 생각해보십시오.
scripts/toolchain.sh 를보십시오 (시간이 걸리고 로그 없음)koraos/make/build_toolchain.sh 를보십시오 (더 많은 시간이 걸립니다). 대부분의 구성 요소가 필요하고 모든 커널이 거의 동일하지만 모든 기능의 품질과 동작이 다르므로 커널 기능을 설명하는 것은 쉽지 않습니다.
Koraos'Kernel은 기본 페이지 할당과 함께 가상 메모리를 사용하고 있습니다. 페이지의 적절한 재활용을 사용하지만 스왑을 사용할 수 없습니다. Intel Architecture에서는 적절한 CPU 기능 식별이 이루어 지지만 아직 사용되지 않았습니다. 커널은 멀티 코어 준비 (스레드-안전)이지만 여전히 일부 작업이 필요합니다.
커널은 멀티 프로세스, 멀티 스레드이지만 아직 다중 사용자는 아닙니다. 작업은 커널 또는 사용자 공간에 있도록 만들 수 있습니다. 깨끗한 슬레이트 (창 길) 또는 포크 (유닉스 웨이)에서 새로운 작업을 만들 수 있습니다.
커널은 블록 장치, 숯 장치, 파이프, 디렉토리 (또는 볼륨), 일반 파일, 비디오 스트림 (표면, 카메라 또는 화면), 네트워크 장치 및 소켓 등 다양한 유형의 파일 및 장치를 제공합니다. (파일 유형은 UNIX와 다릅니다).
이러한 모든 파일과 장치는 우수한 캐싱 시설을 갖춘 진화 VFS (가상 파일 시스템)를 통해 액세스 할 수 있습니다.
네트워크 스택은 프로토콜을 지원합니다 : Ethernet, ARP, IPv4, ICMP, DHCP, UDP, TCP, DNS 및 NTP . 커널은 자동 IP 구성을 허용하는 기본 DHCP 클라이언트를 제공했습니다.
불완전한 섹션
시스템이 완전히 작동하지 않기 때문에 대부분의 테스트는 커널 스레드를 사용하여 수행되지만 여기서는 일부 작업 시스템 호출입니다. 아직 완료되지 않았습니다.
/* --------
Tasks, Process & Sessions
--------- */
long sys_stop ( unsigned tid , int status );
long sys_sleep ( long timeout );
/* --------
Input & Output
--------- */
long sys_read ( int fd , char * buf , int len );
long sys_write ( int fd , const char * buf , int len );
long sys_open ( int fd , const char * path , int flags );
long sys_close ( int fd );
/* --------
File system
--------- */
int sys_pipe ( int * fds );
int sys_window ( int width , int height , unsigned features , unsigned evmask );
/* --------
Network
--------- */
int sys_socket ( int protocol , const char * address , int port );
/* --------
Memory
--------- */
void * sys_mmap ( void * address , size_t length , int fd , off_t off , unsigned flags );
long sys_munmap ( void * address , size_t length );
long sys_mprotect ( void * address , size_t length , unsigned flags );
/* --------
Signals
--------- */
/* --------
System
--------- */
long sys_ginfo ( unsigned info , void * buf , int len );
long sys_sinfo ( unsigned info , const void * buf , int len );
long sys_log ( const char * msg );대상 비트 현재 파일이 아닙니다
kernel/types.h : 기본 유형을 참조하고 불투명 구조를 선언합니다.kernel/utils.h : 할당, 문자열 및 시간과 같은 기본 런타임을 제공하십시오.kernel/core.h : 코어 구조 kSYS & kCPU 에 대한 액세스를 제공합니다.kernel/syscalls.h : syscall 루틴 목록은 sys_* 입니다.kernel/io.h : IOPORT, MMIO 및 DMA의 인터페이스.kernel/{...}.h : 커널 코어 모듈의 API를 제공합니다 (작업, 메모리, VFS ...).kernel/net/{...}.h : 네트워크 프로토콜 용 API (LO, ETH, IP4).kernel/bus/{...}.h : 버스 제공 업체 (PCI 또는 USB) 용 API. 기본 프로그램 로그온, 데스크탑, Krish, 폴더 및 LUA를 실행할 수 있으면 전달 버전 0.1을 계획하고 VFAT 또는 EXT2와 같은 전체 기능을 갖춘 쓰기 가능한 파일 시스템을 하나 이상 가지고 있습니다.