

هذه سلسلة تعليمية لمطوري Hobby OS الذين هم جدد في Arm Armv8-A Armv8-A. ستقدم البرامج التعليمية جولة مرشدين خطوة بخطوة حول كيفية كتابة kernel نظام تشغيل متجانسة embedded system من نقطة الصفر. وهي تغطي تنفيذ مهام أنظمة التشغيل المشتركة ، مثل الكتابة إلى وحدة التحكم التسلسلية ، وإعداد الذاكرة الافتراضية والتعامل مع استثناءات HW. كل ذلك مع الاستفادة من ميزات Rust الفريدة لتوفير السلامة والسرعة.
استمتع!
أطيب التحيات،
Andre (@Andre-Richter)
ملاحظة: بالنسبة للغات الأخرى ، يرجى البحث عن ملفات readme البديلة. على سبيل المثال ، README.CN.md أو README.ES.md . شكرا جزيلا لمترجمينا؟
kernel قابلة للتمهيد قابلة للتمهيد.README قسم قصير tl;dr يعطي نظرة عامة موجزة على الإضافات ، ويُظهر الكود diff في البرنامج التعليمي السابق ، بحيث يمكنك فحص التغييرات/الإضافات بسهولة.tl;dr . الخطة طويلة الأجل هي أن جميع البرامج التعليمية تحصل على نص كامل ، ولكن في الوقت الحالي ، هذا حصري للدروس التعليمية حيث أعتقد أن tl;dr و diff لا يكفي للحصول على هذه الفكرة.QEMU .UART .make doc في كل برنامج تعليمي. يتيح لك تصفح الرمز الموثق على نطاق واسع بطريقة مريحة.make doc 
تستهدف البرامج التعليمية في المقام الأول توزيعات قائمة على Linux . ستعمل معظم الأشياء أيضًا على MacOS ، ولكن هذا أمر تجريبي فقط.
تثبيت محرك Docker.
( Linux فقط ) تأكد من أن حساب المستخدم الخاص بك في مجموعة Docker.
تحضير أدوات Rust . سيتم التعامل مع معظمها على الاستخدام الأول من خلال ملف الصدأ toolchain.toml. ما تبقى لنا هو:
إذا كان لديك بالفعل إصدار من Rust مثبت:
cargo install cargo-binutils rustfiltإذا كنت بحاجة إلى تثبيت الصدأ من الصفر:
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME /.cargo/env
cargo install cargo-binutils rustfilt في حالة استخدام Visual Studio Code ، أوصي بشدة بتثبيت ملحق Rust Analyzer.
( MacOS فقط ) تثبيت بعض الأحجار Ruby .
تم اختبار هذا آخر مرة من قبل المؤلف مع Ruby Version 3.0.2 على macOS Monterey . إذا كنت تستخدم rbenv ، فإن ملف .ruby-version موجود بالفعل. إذا لم تسمع أبدًا عن rbenv ، فحاول استخدام هذا الدليل الصغير.
قم بتشغيل هذا في مجلد جذر المستودع:
bundle config set --local path ' .vendor/bundle '
bundle config set --local without ' development '
bundle install تحاول هذه السلسلة التركيز القوي على سهولة الاستخدام. لذلك ، بذلت الجهود للقضاء على أكبر نقطة ألم في التطور المدمج قدر الإمكان: Toolchain hassle .
تساعد Rust نفسها بالفعل الكثير في هذا الصدد ، لأنه يحتوي على دعم مدمج للمجمع. كل ما نحتاجه من أجل التوفيق بين مضيف x86 إلى بنية AArch64 من Raspberry PI سيتم تثبيتها تلقائيًا بواسطة rustup . ومع ذلك ، إلى جانب مترجم الصدأ ، سنستخدم بعض الأدوات الأخرى. من بين أمور أخرى:
QEMU لمحاكاة نواةنا على نظام المضيف.Minipush لتحميل نواة على Raspberry Pi عند الطلب فوق UART .OpenOCD و GDB للتصحيح على الهدف.هناك الكثير الذي يمكن أن يحدث خطأ أثناء تثبيت و/أو تجميع الإصدار الصحيح من كل أداة على جهاز المضيف الخاص بك. على سبيل المثال ، قد لا يوفر التوزيع الخاص بك أحدث إصدار مطلوب. أو تفتقد بعض التبعيات التي يصعب الحصول عليها لتجميع إحدى هذه الأدوات.
هذا هو السبب في أننا سنستفيد من Docker كلما كان ذلك ممكنًا. نحن نقدم حاوية مصاحبة لها جميع الأدوات أو التبعيات المطلوبة تم تثبيتها مسبقًا ، ويتم سحبها بشكل تلقائي بمجرد الحاجة إليها. إذا كنت ترغب في معرفة المزيد عن Docker و Peek على الحاوية المقدمة ، فيرجى الرجوع إلى مجلد Docker للمستودع.
نظرًا لأن kernel تم تطويره في البرامج التعليمية تعمل على الأجهزة الحقيقية ، فمن المستحسن بشدة الحصول على كابل التسلسلي USB للحصول على التجربة الكاملة.
CP2102 .GND و GPIO دبابيس 14/15 كما هو موضح أدناه.chainloader ، والذي سيكون آخر ملف تحتاج إلى نسخه يدويًا على بطاقة SD لفترة من الوقت. سيمكنك من تحميل حبات البرنامج التعليمي أثناء التمهيد عند الطلب على UART . 
بدأ الإصدار الأصلي من الدروس التعليمية كشوكة لبرامج Zoltan Baldaszti الرائعة على البرمجة المعدنية العارية على RPI3 في C . شكرا لإعطائي البداية!
مرخصة تحت أي من
في خيارك.
ما لم تقل صراحةً خلاف ذلك ، فإن أي مساهمة تم تقديمها عن عمد لإدراجها في العمل بواسطتك ، كما هو محدد في ترخيص Apache-2.0 ، تكون مرخصة مزدوجة على النحو الوارد أعلاه ، دون أي شروط أو شروط إضافية.