Neptune OS - это личность Windows NT для Microkernel SEL4. Он реализует то, что Microsoft называет «NT Executive», верхним уровнем ядра Windows NTOSKRNL.EXE , как пользовательский процесс под Microkernel Sel4. Исполнительный директор NT реализует так называемый NT Native API, нативный интерфейс системы вызова Windows, на котором строится более знакомый API Win32. Они подвергаются воздействию пользовательского режима через функции STUB в NTDLL.DLL с такими именами, как NtCreateProcess . Исполнительный директор NT также отвечает за разоблачение интерфейса программирования для драйверов устройств. Указанный интерфейс включает в себя такие функции, как IoConnectInterrupt и IoCallDriver . Наша архитектура позволяет драйверам устройства работать в отдельных процессах пользователя и общаться с исполнительным процессом NT через стандартные примитивы SEL4 IPC.
Возможной целью проекта ОС Нептуна является реализация достаточной семантики NT, так что пользовательская земля Reactos могла быть перенесена под ОС Neptune, а также большинство драйверов Reactos ядра. Теоретически мы должны быть в состоянии достичь бинарной совместимости с нативными исполняемыми файлами Windows, при условии, что наша реализация NT Native API является достаточно верной. Мы также должны иметь возможность достичь высокой степени переносимости исходного кода с драйверами устройств Windows и драйверами файловой системы, хотя мы не стремимся к полной совместимости исходного кода линии линии из-за архитектурных различий с Windows/Reactos, которые делают эту цель нереалистичной. Пожалуйста, смотрите раздел документации для получения дополнительной информации.
Текущее состояние проекта заключается в том, что мы внедрили достаточно исполнительных компонентов NT, чтобы поддержать достаточно полный стек файловой системы с поддержкой кэширования чтения и обратной связи, которая включает в себя драйвер файловой системы FAT12/16/32 fatfs.sys и драйвер диспетчерского контроллера fdc.sys . У нас также есть базовый стек драйверов клавиатуры, который включает в себя драйвер класса клавиатуры kbdclass.sys и драйвер порта PS/2 i8042prt.sys . Они позволяют нам запустить основную командную строку ntcmd.exe , взятую из проекта Reactos, которая поддерживает большинство общих команд оболочки, таких как pwd , cd , copy , move , del , mount и umount . Мы также включаем драйвер beep.sys , который издает раздражающий звук на динамике ПК.
Вся система подходит в дискету и может быть загружена из релиза v0.2.0002. Вы можете посмотреть короткую демонстрацию на YouTube. Вы также можете построить это самостоятельно. См. Раздел о здании.
Для следующего выпуска мы планируем перенести стек драйверов ATA/AHCI из Reactos, чтобы мы могли поддерживать большинство жестких дисков PATA/SATA. Мы также планируем написать/перенести набор дискетов диска, чтобы мы могли продемонстрировать, что конструкция MicroKernel не приводит к неприемлемым наказаниям на производительность.
Для систем I386 (вероятно, следует называться I686):
enable_paging в sel4/src/arch/x86/32/head.S ).Для систем AMD64:
fsgsbase . Это поддерживается только на мосту Айви, а затем. Чтобы запустить AMD64 на более ранних процессорах, вы можете отключить инструкцию FSGSBase в private/ntos/cmake/sel4.cmake . Также нам требуется CMPXCHG16B, который доступен с Nehalem, и, возможно, более раннего (более ранние процессоры Core 2 могут потребовать обновление микрокода). Для машин amd64 ThinkPad X230 был протестирован на работу.
Вам нужно будет построить под Linux (SEL4 не строится ни под другой операционной системой). Вам понадобятся следующие зависимости от питона, и, вероятно, больше.
jinja2
future
ply
setuptools
six
lxml
Вам также понадобятся cmake , clang , llvm и lld в качестве основного инструмента. clang - это нативный кросс -компилятор, который может генерировать цели ELF и PE. GCC не поддерживается, но теоретически может быть сделан для работы. Вам понадобится и ELF, и PE Toolchain (и, вероятно, тонна терпения), если вы хотите заставить GCC работать. Вам также нужен windmc , который является компилятором ресурса сообщений PE от mingw . Посмотрите на build.sh для сценария сборки. Предпочтительная версия Clang составляет 15, но недавние версии должны работать. Вам также нужна утилита cpio для построения initCpio. Наконец, для загрузки и загрузки ISO вам понадобятся следующие инструменты: syslinux (для загрузки гибких), grub и xorriso (для загрузки ISO) и mtools (для обоих).
Рекомендуется использовать IDE с поддержкой языкового сервера для просмотра исходного кода. Протестированная настройка представляет собой пакет lsp-mode на emacs с clangd в качестве языкового сервера. Сценарий build.sh генерирует файл compile_commands.json для clangd . Вам нужно будет установить JQ для этой цели.
Сначала клонируйте проект (убедитесь, что вы используете git clone --recurse-submodules поскольку мы включим ядро Sel4 в качестве подмодуля), а затем запустите
./build.sh [amd64] [release]
Если вы не указали amd64 , то это сборка i686 . Если вы не указываете release , то это сборка отладки. Чтобы создать шлейфу для загрузки, введите
./mkfloopy.sh [amd64] [release]
Чтобы создать загрузочный ISO, введите
./mkiso.sh [amd64] [release]
Чтобы имитировать, используя QEMU, запустите
./run.sh [direct|iso|uefi] [amd64] [release] [extra-qemu-args]
Если вы указали direct , то QEMU будет напрямую загружать ядро SEL4 и изображение NTOS (используя -kernel и -initrd ). Если вы указали iso или uefi , он загрузит загрузочный ISO, созданный mkiso.sh . Опция uefi также будет настроить QEMU для загрузки прошивки UEFI, которая обеспечивает хорошую консоль кадров высокой четкости. В противном случае используется загрузочная диспетчер, созданная mkfloppy.sh . Дополнительные аргументы передаются в Qemu. Например, чтобы запустить сборку выпуска i386 с помощью динамика ПК, включенного в QEMU, вы можете передать следующее (это предполагает, что вы используете недавнюю версию QEMU и имеете PulseAudio)
./run.sh release -machine pcspk-audiodev=snd0 -audiodev pa,id=snd0
Сборка отладки может работать медленно, особенно если вы включите регистрацию последовательных портов. Вы можете отключить журнал, изменяя главный заголовок исполнительного проекта NT (см. private/ntos/inc/ntos.h ).
Мы используем инструмент LLVM, поэтому кросс-компилирование в теории должно просто работать без особой обработки. На практике, на i386 / amd64 сценарий линкера для окончательного исполняемого файла Sel4, полагается на функции, которые поддерживает только линейный линкер GNU LD, поэтому мы не можем использовать линкеров LLVM (LLD) для связи ядра Sel4. Это означает, что вам понадобятся сшивки GNU LD для целевых тройков i686-pc-linux-gnu и x86_64-pc-linux-gnu установленных в обычном месте ( /usr/bin ), чтобы clang мог найти их и правильно вызвать их при связывании ядра Sel4. Часть PE инструментального оборудования полностью автономна и не требует особой обработки при перекрестномкомпилировании (это уже перекрестная обстановка, потому что мы нацелены на Windows на хосте Linux).
Кросс-компилирование проверяется на Archlinux, работающем на Loongarch64 (процессор Loongson 3A5000) с llvm-14 и, по-видимому, генерирует правильный код. Пожалуйста, откройте проблему, если вы столкнетесь с какой -либо проблемой.
Обратите внимание, что если ваш Grub построен для нативной платформы, а не I686/AMD64, загрузка ISO, сгенерированная mkiso.sh , не будет работать, так как grub-mkrescue попытается скопировать файлы загрузочной платформы нативной платформы в ISO. Чтобы исправить это, скрепите пакет Grub для i686/AMD64 (или просто запустите окончательное генерацию ISO в системе I686/AMD64).
Документации расположены в каталоге docs . Для разработчиков и тех, кто заинтересован в понимании внутренней работы Neptune OS, прочитайте Developer-Guide.md Guide.md, которая начинается с архитектурного обзора операционной системы и продолжает объяснять различные проектные решения отдельных компонентов ОС. Он также содержит руководство по портированию драйвера для тех, кто заинтересован в портировании драйверов из Reactos.