
تحذير! لا شيء تقريبا اكتمل بعد. كل شيء هنا هو تجريبي وفي تطور نشط للغاية. المضي قدما بحذر.
أجهزة الكمبيوتر غريبة . غريب بمعنى أنهم يشعرون بالسحر إذا كنت لا تعرف كيف يعملون. إذا ، ومتى تبدأ في تعلم كيفية عمله ، فإن هذا الشعور السحري يتلاشى. سوف ينتهي بك الأمر إلى "WOW! هذا رائع" أو "واو ... هذا هو القرف".
لذلك ، لديك خياران أساسا:
في حال لم يكن الأمر واضحًا بعد ، فقد أخذت هذا الأخير.
في الأساس ، أردت معرفة المزيد عن "أجهزة الكمبيوتر". يعد العمل على البرامج ذات المستوى العالي نسبيًا أمرًا ممتعًا للغاية ، لكن لدي عادة سيئة تتمثل في النظر إلى إنترنلز منخفضة المستوى وأعمال الأشياء.
"أوه ، إذن ، ننتهي مكالماتي إلى
malloc()وnewWeend في الاتصال بـ Syscallmmap()؟ دعنا نتحقق من تنفيذها .. أوه ، ما هوVMA؟ ما هوMMU؟ ما هوTLB؟؟ ما هوTCRوMAIR؟؟؟
كانت هناك هذه الطبقات من التجريد التي لم يكن لدي أي فكرة عنها! كان يجب أن أتوقف هناك ، لكن لا. بدلاً من ذلك ، قلت: "حسنًا. أحب حقًا الشعور بالدعوة للأشياء المنخفضة المستوى. دعنا نذهب إلى البرية ونحاول أن نتعلم جميع التجريدات عن طريق كتابة نظام تشغيل" بسيط ". ما الذي يمكن أن يحدث؟" والآن ، أنا هنا.
نظام تشغيل Hobbyist في العمل /W "المصنوع يدويًا" . الاسم من أكثر القارة السياسية والمفوضة في عالم Game of Thrones. [^2] أنا أحب حقًا (نعم ، تحكم على كل ما تريد) والفوضى السياسية التي تشبه أهدافي الخاصة مع هذا المشروع. كل شيء في كل مكان ولا يوجد شيء منطقي.
يوجد هذا المشروع فقط لمساعدتي في التعرف على أنظمة التشغيل والاستمتاع ببعض المرح على طول الطريق. لا أدعي أن أعرف الكثير عن تطوير نظام التشغيل . لذا ، فإن الممارسات ، وتصميم الشوكيز وبعض التطبيقات التي تراها هنا سوف تخيفك.
أقترح أن kepp توقعاتك منخفضة>. <
ملاحظة مهمة: Westeros في التطور المبكر للغاية . سوف تتغير الأشياء أو الفرامل أو المباشرة تكون غبية. ما زلت أحدد بعد هدف نهائي. حتى ذلك الحين توقع كل شيء ، في كل مكان ، في وقت واحد.
/dev و /proc (IDK إذا كان ذلك ممكنًا؟)mkdir ، touch & catدعونا نغوص أكثر قليلاً في العمل الداخلي للأشياء. الجهاز المستهدف محدد للغاية وثابت . أردت أن أبقيه بسيطًا قدر الإمكان من خلال دعم بنية ARM64 فقط (ARMV8) وجهاز Qemu Arm Virt.
ها هي الجهاز المستهدف.

يتم تعريف فقط الأجهزة الطرفية الأساسية . للأسف ، هذا يعني عدم وجود USB و NVME و NIC. :( ربما في المستقبل؟
إليك الأجهزة الطرفية التي أخطط لدعمها.
تتبع النواة تصميمًا بسيطًا للموظف (مثل L4-Family). أردت أن أصنع نواة بسيطة يسهل فهمها ومساعدتي في التعلم قدر الإمكان أثناء العملية.
لقد اتبعت في البداية XV6 MIT. ومع ذلك ، عندما سئل الناس ، أخبرني الناس أنه كان "ساذجًا/رخيصًا" قليلاً وربما لن يساعدني IRL ( إنهم أشخاص مدهشون راجع للشغل ). لذلك ، قررت أن تأخذ نصيحتهم والذهاب مع تصميم microkernel. كما يبدو أكثر إثارة للاهتمام
تحذير! سيؤدي تصميم microkernel المصنوع يدويًا إلى أن يؤدي لك. على سبيل المثال ، أضع برامج تشغيل الجهاز في مساحة المستخدم والجدولة داخل مساحة kernel (في الأساس لا تتبع تصميمًا "مناسبًا/acedemic").
فقط أعطني بعض الوقت. ما زلت أتعلم كما أذهب>. <
إليك نظرة عامة عامة على النواة. (تودو: سيتم تحديثه قريبًا ...)

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
في الوقت الحالي ، فإن الطريقة الوحيدة لإقلاع Westeros هي على جهاز Virt Aarch64 الخاص بـ QEMU عبر المعلمة -kernel .
الجزء المسؤول عن إطلاق النواة (وبالتالي نظام التشغيل) يسمى Shim. إنه جزء صغير من التعليمات البرمجية المرتبطة بجانب صورة kernel ومسؤولة عن تمهيد النظام.
إنه يتعامل مع بعض العمليات قبل السيطرة على النواة.
المرجع: SEL4 - Elfloader
آلة 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)يتبع Westeros kernel تصميم Microkernel. لدى الأشخاص/العناصر المختلفة تفسيرات مختلفة حول كيفية تصميم microkernel (على سبيل المثال ، L4 ، minix). هنا أستخدم مصطلح Micro كما الحفاظ على النواة بسيطة قدر الإمكان. هذا يعنى:
كل ما سبق يجب تنفيذه كتطبيقات فضاء المستخدم.
ستوفر kernel الخدمات والوظائف التالية:
mmap() )msgsend() ، msgrecv() )thread_create() )intr_attach() )gettimeofday() )yield() ) يتطلب kernel صورة المستخدم [الأولي] من جهاز تحميل التشغيل. يجب أن تحتوي هذه الصورة على أول (ق) قابلة للتنفيذ (S) التي سيتم تشغيل kernel (من المحتمل أن تكون root task process manager ).
يمكن اعتبار صورة الاستخدام على أنها initrd المستخدمة في أنظمة Linux.
سيتم شرح القائمة الكاملة لكل شيء توفره kernel والأعمال الداخلية للأشياء في وقت لاحق على الطريق. ما زلت بعد تنفيذها ..
أما بالنسبة للرجوع ، فأنا استفدت من microkernels & sts التالي:
تودو: بعض الأشياء الممتعة. ما الذي ينتظر شخصًا ما يطلقونه على نظام التشغيل؟
يجب تنفيذ الخدمات التالية:
services.config ) لإنشاء وتشغيل نظام التشغيل ، تحتاج إلى ثلاثة أشياء رئيسية: ARM GNU Toolchain و QEMU وقليلًا من PAIDIENT ™.
من الممكن بناء كل شيء على نظام التشغيل المفضل لديك. تتوفر ARM GNU Toolchain على كل من Windows و MacOs و 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 تنزيل صفحة الويب.
اختر هدف AARCH64 العاري المماثل للتنزيل. لا ينبغي أن يكون الإصدار مهمًا ، لذا اختر أحدث إصدار. ومع ذلك ، التي استضافت الأدوات التي تقوم بتنزيلها لا يهم. اختر النظام الذي تم إنشاؤه لنظام التشغيل الخاص بك.
على سبيل المثال ، إذا كان نظام التشغيل الخاص بك هو 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 . إذا لم تراه ، اتصل بي. سأحاول إصلاح المشكلة>. <
لا يمكن تشغيل Westeros إلا باستخدام QEMU. ليس لدي أي خطط لإنشاء صورة قابلة للتشكيل بالكامل للأجهزة في العالم الحقيقي. كانت فكرتي في الأصل هي محاكاة التوت PI 4B ، لكنني أدركت أنه قد لا يكون ذلك "صديقًا للمبتدئين" عند الاختبار والتخلص. لذلك ، 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. إطلاق Westeros
$ make runاعتبارا من 9 يوليو 2023 ، فإن Westeros فارغة مباشرة! لذلك ، لا يمكنك فعل أي شيء سوى رؤية بعض رسائل kernel الأساسية للغاية على المحطة:/
ثم مرة أخرى ، Westeros هو نظام تشغيل هواة وعملية تعليمية . يجب أن تحاول حقًا استكشاف رمز المصدر. أنا متأكد من أنك ستحصل على المزيد من المرح هناك.
TODO: انتقل المستخدم إلى ReadMe آخر وهو الوثائق بشكل أساسي.