Koraos - это операционная система, написанная и разработанная с нуля. Он разработан как хобби разработчиком энтузиастов.
Этот репозиторий содержит код для ядра системы KORA. Если вы хотите построить всю систему, посмотрите на хранилище Кораоса.
Я пытался построить свое собственное ядро с некоторое время. После многих переработков, перерывов и переосмысления я полностью перезагружаю его с тщательной заботой о дизайне. Моя цель всегда заключалась в создании программы, которая делает именно то, что они должны делать, и ничего более, легкого и быстрого с сильно развязанной архитектурой.
Это программное обеспечение все еще является молодым щенком, но я надеюсь в ближайшее время создать надежную систему. Он предоставит все основы функции современной системы и будет портативным на нескольких архитектурах (цель: x86, x86_64, arm).
Совместимость : когда я пытаюсь понять, как дела идут дела и почему я иногда выхожу за пределы строгих спецификаций POSIX или UNIX. Я стараюсь быть максимально соответствующим - с миром NT и Unix - но я разрешаю себе принимать разные варианты.
Построить ядро не похоже на создание обычного приложения. Может потребоваться дополнительная работа.
Репозиторий (как и другие от Кора) содержит близкий к стандартному 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. Помните, что для ядра это почти всегда кросс-компиляция . Наиболее распространенной ловушки является попытка построить ядро i386 на хосте x86_64 .
По умолчанию он использует отдельно стоящую среду, но заголовки хоста могут вызвать некоторые проблемы.
В случае или ошибок предпочитают использовать «кросс-компилятор».
Примечание . Обязательно установите все пакет, такие как Binutils, GCC, Make and GIT , а также ассемблер для некоторой архитектуры (например, NASM для
i386иamd64. Для проверки добавьте также Valgrind и LCOV .
Здесь также какой -то Variablez, принятый Makefile для расширения конфигурации:
VERBOSE=y : команды компиляции печатиQUIET=y : не печатайте шаг компиляции словесаCFLAGS : Добавьте дополнительные флаги в COMPILER CNODEPS=y : не включайте *.d файлы зависимости (по умолчанию для чистоты или если каталог 'obj еще не существует)NOCOV=y : удалить параметры покрытия для единичных тестовkname=? : Измените имя файла доставки ядра После сборки, если вы здесь, чтобы испачкаться, подумайте о qemu и gdb для отладки и расследования.
scripts/toolchain.sh (это требует времени, без журналов)koraos/make/build_toolchain.sh (это занимает еще больше времени). Нелегко описать функции ядра, так как требуется большинство компонентов, и все ядра обеспечивают примерно одинаковые, но отличаются качеством и поведением для всех этих функций.
Koraos'kernel использует виртуальную память с основным распределением страниц. Он использует правильную переработку страниц, но обмена не доступно. На архитектуре Intel правильно производится идентификация CPUS, но все же плохо используется. Ядро готово много ядер (безопасно), но все же требует некоторой работы, которая будет использована.
Ядро является многопроцессовым, многопоточным, но еще не многопользовательским. Задачи могут быть созданы как на ядре, либо в пользовательском пространстве. Новая задача может быть создана либо из чистого сланца (Window Way), либо раздвоена (Unix Way).
Ядро предоставляет многочисленные типы файлов и устройств: блокируемые устройства, устройства Char, трубы, каталог (или громкость), обычные файлы, видеопотоки (поверхность, камера или экраны), сетевые устройства и розетки. (Обратите внимание, что типы файлов отличаются от UNIX).
Все эти файлы и устройства могут быть доступны через развитые VFS (виртуальную файловую систему) с хорошими кеширующими средствами.
Сетевой стек поддерживает протоколы: Ethernet, ARP, IPv4, ICMP, DHCP, UDP, TCP, DNS и NTP Полем Ядро предоставило базовый клиент DHCP, который разрешает автоматическую конфигурацию IP.
Неполный раздел
Поскольку система не является полностью функциональной, большинство моих тестов выполняются с использованием потока ядра, но здесь некоторые рабочие системы - еще ничего не завершено:
/* --------
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 : API для поставщика шины (PCI или USB). Я планировал доставить версию 0.1, как только я смогу запустить вход в программы «Основа» , «Настольный компьютер», «Криш», «Папка» и «Луа» , и иметь хотя бы одну полнофункциональную файловую систему (например, VFAT или Ext2).