
Предупреждение! Почти ничего не завершено. Все здесь экспериментально и в очень активном развитии. Продолжить с осторожностью.
Компьютеры странные . Странно в том смысле, что они чувствуют себя волшебными, если вы не знаете, как они работают. Если и когда вы начинаете учиться, как оно работает, это волшебное чувство исчезает. Вы либо получите "вау! Это Бриллиант", либо "вау ... это дерьмо".
Итак, у вас в основном два варианта:
В случае, если это еще не было очевидно, я взял последнее.
По сути, я хотел узнать больше о «компьютерах». Работать над относительно высокоуровневым программным обеспечением довольно веселая, но у меня есть плохая привычка в конечном итоге смотреть на живые и работу низкого уровня.
«О, так мои призывы к
malloc()иnewв конечном итоге называют Syscallmmap()? Давайте проверим ее реализацию .. ОMAIRчто такоеVMA? Что такоеMMU?TCRTLB
Были эти слои абстракции , о которых я понятия не имел! Я должен был остановиться там, но нет. Вместо этого я сказал: «Хорошо. Мне очень нравится ощущение применения низкоуровневого . А теперь я здесь.
Работающий хобби работал операционная система /W "Microkernel . Название от самого политического и запутанного континента в мире игры престолов. Все повсюду, и ничего не имеет смысла.
Этот проект существует только для того, чтобы помочь мне узнать об операционных системах и повеселиться на этом пути. Я не утверждаю, что знаю много о разработке ОС . Таким образом, практики, дизайн шокировки и некоторые реализации, которые вы видите здесь, пугают вас.
Я предлагаю Kepp ваши ожидания низким>. <
Важное примечание: Вестерос находится в очень раннем развитии. Материал будет изменен, тормоз или прямые будут глупыми. Я еще еще предстоит определить конечную цель. До тех пор ожидайте все, везде, все сразу.
/dev и /proc (idk, если это возможно?)mkdir , touch & catДавайте немного больше погрузимся во внутреннюю работу вещей. Целевая машина очень специфична и статична . Я хотел сделать его как можно проще, поддерживая только архитектуру ARM64 (ARMV8) и машину Qemu's Arm Virt.
Вот целевая машина.

Определены только основные периферийные устройства. К сожалению, это означает отсутствие USB, NVME и NIC. :( Может быть, в будущем?
Вот периферийные устройства, которые я планирую поддержать.
Ядро следует за простой конструкцией Microkernel (например, L4-семейства). Я хотел сделать простое ядро, которое легко понять, и помочь мне учиться как можно больше во время процесса.
Я изначально следил за XV6 MIT. Однако, когда их спросили, люди говорили мне, что это слишком "наивное/дешевое" и, вероятно, не помогут мне IRL ( кстати, они удивительные люди ). Итак, я решил принять их совет и пойти с дизайном Microkernel. это также кажется более интересным оо
Предупреждение! Мой дизайн Microkernel Microkernel сделает вас. Например, я помещаю драйверы устройства в пространство пользователя и планировщик в пространство ядра (в основном не следуя «правильной/акценемической» конструкции).
Просто дай мне некоторое время. Я все еще учусь, когда иду>. <
Вот общий обзор ядра. (Тодо: скоро будет обновлен ...)

TODO: Общие спецификации ОС. Что такое и будущие цели.


|-- Build <- Compiled objects, binaries & debug files
|-- Documents <- Reference documents
|-- Emulation <- QEMU scripts & Device Tree Structure
|-- Kernel <- The source code. Headers, C and C++ files
| `-- Arch <- Architecture related code
| `-- Drivers <- Driver source and header files
| `-- Library <- Library source and header files
| `-- Include <- Kernel header files
|-- Media <- Images and other media
|-- Toolchain <- Cross-compiling environment
|-- Userland <- User level source code
| `-- Dir. <- TBD.
|-- .gitignore <- Good ol' .gitignore
|-- Makefile <- Makefile
`-- README.md <- Main README
В настоящее время единственный способ загрузить Westerros находится на машине Qemu Aarch64 через параметр -kernel .
Часть, ответственная за запуск ядра (и, следовательно, ОС), называется Shim. Это небольшой кусок кода, связанный с изображением ядра, и отвечает за начальную загрузку системы.
Он обрабатывает некоторые операции до того, как ядра берет контроль.
Ссылка: SEL4 - Elfloader
State of Arm64 Машина (например, регистры) прямо перед kmain()
0xffff0000401080000x401010000x401020030x401020000x400007010x401030000x401040030x401040000x400007010xbbff440c04000b00000000 (DEVICE_nGnRnE)0b00000100 (DEVICE_nGnRE)0b00001100 (DEVICE_GRE)0b01000100 (NORMAL_NC)0b11111111 (NORMAL)0b10111011 (NORMAL_WT)0b00000000 (Res)0b00000000 (Res)0x4801000100b0 (48 bit)0b100 (44 bits, 16TB)0b01000 (16)0b01000 (16)0b0 (Hierarchical permissions enabled)0b0 (Hierarchical permissions enabled)0b0 (Top Byte used)0b0 (Top Byte used)0b0 (8 bit)0b0 (TTBR0_EL1.ASID defines the ASID)0b0 (Perform table walk)0b0 (Perform table walk)0b10 (4 KiB)0b00 (4 KiB)0b00 (Non-shareable)0b00 (Non-shareable)0b00 (Outer Non-cacheable)0b00 (Outer Non-cacheable)0b00 (Inner Non-cacheable)0b00 (Inner Non-cacheable)0x40101000 (k_l0_pgtbl)0x40103000 (u_l0_pgtbl)0xc508390b1 (MMU enabled)0b0 (Alignment fault checking is disabled)0b00b1 (SP Alignment check enabled)0b1 (SP Alignment check enabled for EL0)0b1 (System instruction memory barrier enabled for EL0 Aarch32)0b0 (Access to Stage 1 Normal memory from EL0 & EL1 are Stage 1 Non-cacheable)Ядра Вестероса следует за дизайном микрокерне. Разные люди/Орги имеют разные интерпретации о том, как следует разработать микрокернел (например, L4, Minix). Здесь я использую термин Micro в качестве как можно простым ядром. Это означает:
Все вышеперечисленное должно было быть реализовано в качестве приложений для пространства пользователя.
Ядро предоставит следующие услуги и функции:
mmap() )msgsend() , msgrecv() )thread_create() )intr_attach() )gettimeofday() )yield() ) Ядро требует [начального] пользовательского изображения из загрузчика. Это изображение должно содержать первый исполняемый файл эльфий, который будет запущен ядро (вероятно, root task и process manager ).
Изображение употребления может рассматриваться как инициатор, используемый в системах Linux.
Полный список всего, что дает ядро и внутренняя работа вещей, будет объяснена позже в будущем. Я еще еще предстоит их реализовать ..
Что касается справки, я высоко использовал следующие Microkernels & OSES:
Тодо: Несколько забавных вещей. Что ждет кого -то, кто они запускают ОС?
Следующие службы должны быть реализованы:
services.config ) Чтобы создать и запустить операционную систему, вам нужны три основные вещи: ARM GNU Toolchain , QEMU и немного терпения ™.
Можно построить все на вашей любимой операционной системе. ARM GNU Toolchain доступен как на Windows , так и на GNU/Linux . Тем не менее, я еще не тестировал Windows . Итак, вы один в этом пространстве. Извини :(
Приведенные ниже шаги представлены для хостов GNU/Linux (AARCH64) .
0. Убедитесь, что у вас есть git и make
$ apt install git make # if using `apt`
$ pacman -S git make # if using `pacman`1. Клонировать этот репозиторий
$ git clone https://github.com/TunaCici/WesterOS.git 2. Загрузите последний ARM GNU Toolchain
Перейдите на Arm Gnu Toolchain Downloads Web Page.
Выберите соответствующую цель Aarch64 Bare-Matel для загрузки. Версия не должна иметь значения, поэтому выберите последний. Тем не менее, какая размещение инструментов, которое вы загружаете, имеет значение. Выберите тот, который создан для вашей собственной операционной системы.
Например, если ваша ОС - GNU/Linux (x86_64), тогда вы загружаете:
https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
$ cd WesterOS/Toolchain
$ wget https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-aarch64-aarch64-none-elf.tar.xzВы обязаны проверить «целостность» и «подпись» загруженного файла. Используйте клавиши SHA256 , представленные на странице загрузки.
3. Извлеките загруженный ARM GNU Toolchain
Обязательно извлекайте его в Westeros/Toolchain .
$ tar -xvf arm-gnu-toolchain-12.2.rel1-aarch64-aarch64-none-elf.tar.xz 4. Измените TOOLCHAIN_PATH в Makefile
TOOLCHAIN_PATH должен указывать на ваш недавно загруженный и извлеченный ARM GNU Toolchain . Поскольку ваша хост -ОС и версия инструментов может отличаться от моей, вы должны отредактировать переменную пути.
Если не установлен правильно, процесс make сработает с помощью сообщения об ошибке, например:
make[1]: Toolchain/arm-gnu-toolchain-12.2.rel1-darwin-arm64-aarch64-none-elf/bin/aarch64-none-elf-as: No such file or directory
Итак, обязательно отредактируйте TOOLCHAIN_PATH .
# Open the main Makefile /w your favorite text editor
$ vim Makefile
# And change the `TOOLCHAIN_PATH` accordingly. For example..
> TOOLCHAIN_PATH=Toolchain/arm-gnu-toolchain-12.2.rel1-darwin-arm64-aarch64-none-elf
# Save & exit 5. Строительство с помощью make
$ make allСборка заканчивается сборкой сообщений. Наслаждайтесь жизнью <3 . Если вы этого не видите, свяжитесь со мной. Я попробую исправить проблему>. <
Вестерос можно запустить только с помощью QEMU. У меня нет планов, чтобы сделать полностью загруженное изображение для реального оборудования. Первоначально моя идея состояла в том, чтобы подражать малину Pi 4B , но я понял, что это может быть не «дружелюбно к новичкам» при тестировании и Deubgging. Итак, qemu это!
Бесстыдное время заглушки! Если вы хотите больше о QEMU, посетите мой QEMU_STARTER GitHub Thingy.
0. Убедитесь, что у вас установлен qemu-system-aarch64
$ apt install qemu-system qemu-utils # if using `apt`
$ pacman -S qemu-full # if using `pacman`1. Запустить Вестерос
$ make runПо состоянию на 9 июля 2023 года Вестерос прямо пуст! Итак, вы ничего не можете сделать, кроме как увидеть некоторые очень простые сообщения ядра на терминале:/
Опять же, Вестерос - операционная система любителей и процесс обучения . Вы должны действительно попытаться исследовать его исходный код. Я уверен, что вам там будет больше удовольствия.
TODO: Перейдите по пользователю к другому Readme, который в основном является документацией.