عالم متنوع من الأنظمة المضمنة ومكان Embox فيه

بلغ عمر مشروع Embox بالفعل 9 سنوات ، لكن الكثيرين لا يفهمون ما هو وما الذي يتم تناوله ولماذا هناك حاجة إليه. بعض من سمعوا عن المشروع ويعرفون أن هذا نظام تشغيل ، يعتقدون أن Embox هو "نظام تشغيل محلي". في الواقع ، تم تصميم Embox كمحاولة لجعل نظام التشغيل "الخاص بهم" مع "لعبة ورق وقوارب" ، ولكن الشيء الرئيسي هو "لعبة ورق وقوارب". وهذا هو ، وضعت بعض الخصائص أو الجمع بينهما ، والتي كانت تفتقر إلى مشاريع أخرى ، في طليعة.

بالطبع ، لم يكن أحد سيكتب نظام تشغيل عالمي حتى مع بعض الرقائق. يعني سطر الوصف Embox - "صندوق الأدوات الأساسي للتنمية المدمجة" - أن المشروع يهدف إلى الأنظمة المدمجة. ومع ذلك ، فإن هذا المفهوم واسع للغاية ، ويشمل: إنترنت الأشياء (IoT) والروبوتات ، وأنواع التوت المختلفة (RaPi) والأنظمة على متنها ، و arduinki و ASU-TP ، ... يمكن أن تستمر القائمة ، كما تعلمون ، لفترة طويلة جدًا ، وهناك أماكن يعيش فيها نظام Linux بشكل رائع ، وهناك أماكن يكون Linux فيها زائدة عن الحاجة وتستخدم RTOS الصغيرة المختلفة. في هذه المقالة ، أود أن أتحدث عن العالم المضمن بكل تنوعه ، وكذلك عن مكان Embox فيه.

أجهزة لوحية واحدة


أجهزة الكمبيوتر الصناعية


لنبدأ بأجهزة الكمبيوتر ذات اللوحة الواحدة. العديد منهم مصنوع في التصميم الصناعي. معظمها مبني على معالجات بنيات ARM و x86. يعتقد الكثير من الناس أن معالجات x86 لا تستخدم في هذا القطاع ، وأن كل شيء مقصور على التوت وألواح beagleboards والموز وما إلى ذلك. ولكن قبل فترة طويلة من RaPi ، كانت هناك آلات أخرى ذات لوحة واحدة موجهة إلى قطاع أجهزة الكمبيوتر الصناعية ، وهو ما يسمى عامل الشكل PC / 104 . كانت أدنى من الأداء في أجهزة الكمبيوتر المكتبية التقليدية ، لأنها كانت مخصصة للمهام التي تسود الموثوقية على الوظائف. للسبب نفسه ، لم يتم استخدام Linux غالبًا كأنظمة تشغيل لمنصات الأجهزة هذه ، كان هناك العديد من أنظمة التشغيل الخاصة مع خصائص في الوقت الحقيقي ( VxWorks ، QNX ، LynxOS ، وما إلى ذلك ). لم أكتب "RTOS" (التي أدرجها في أنظمة التشغيل الثلاثة جميعها) للأسباب التي غالبًا ما توجد فيها Windows CE وتطويره لـ Windows Embedded على الأنظمة الأساسية للأجهزة هذه. وأنا لا أدير لساني لنسب هذه الحديقة بأكملها إلى RTOS.

دافع المستهلك واحد


وضع Malinki اتجاه مختلف تماما. إنها ، في الواقع ، لا تهدف إلى الأنظمة الصناعية في الوقت الفعلي ، ولكن إلى قطاع المستهلكين ، حيث يتم تقييم نسبة السعر / الوظيفة ، والتوت (ونظائرها) متقدمون بشكل كبير على منافسيهم في هذه المعلمة. بعد كل شيء ، عندما تشتري مقابل 30-50 دولارًا مشروطًا ، تحصل على وحدة نظام كاملة ، يمكنك من خلالها إنشاء جهاز بوظائف معقدة إلى حد ما باستخدام أدوات Linux. هذا مفيد جدا للنماذج أو DIY. بالإضافة إلى ذلك ، بالطبع ، يمكن استخدام التوت كجهاز كمبيوتر أو خادم صغير. لذلك ، غالبًا ما يتم استخدام توزيعات Linux الجاهزة مثل OS ، أولاً ، Raspbian - Debian لـ Raspberry Pi ، أو توزيع باسم مضحك للمتحدثين الروس Pidora - Fedora for RaspberryPi. بالنسبة للأنظمة الأخرى المماثلة ، هناك أيضًا توزيعات جاهزة مقدمة من كل من مصنعي المعدات ومجتمعات نظام التشغيل (الشركات المصنعة). توافق ، عندما تحتاج إلى إنشاء نموذج أولي ، فإن أسهل طريقة هي اتخاذ حزم تعليمات جاهزة وكتابة وظائف في بيثون. نتيجة لذلك ، احصل بسرعة على نموذج أولي عملي. مثال على ذلك روبوت يتعرف على خط يستخدم OpenCV .

لينكس في الأجهزة المدمجة


لكن العالم المضمن أوسع بكثير من بطاقات ARM القياسية ذات اللوحة الواحدة. علاوة على ذلك ، فهي تشكل جزءًا صغيرًا نسبيًا من الأجهزة ، ومساهمتها الرئيسية هي نشر وتبسيط الدخول في تطوير أجهزة هذه الفئة. يتم إنشاء الأجهزة التسلسلية على أساس نفس المعالجات (أنظمة على شريحة) أو ما شابه ذلك ، ولكن اللوحات مصممة للمهمة (مشروع ، جهاز). وبالتالي ، فإن التوزيعات المعيارية لازمة على الأقل ، لأنها تستخدم غالبًا نوعًا ما من مدير الحزم ، ويمكنك بسهولة تقديم الكثير من الاهتمام (ولكن ليس ضروريًا لحل مهمة محددة). عادةً ما تأتي الأجهزة المدمجة مع وظيفة كاملة ، بل إنها تسمى البرامج الثابتة. هناك فئة أخرى من توزيعات Linux لإنشاء البرامج الثابتة. تتيح لك هذه التوزيعات "تثبيت" الحزم اللازمة بشكل ثابت - من خلال تجميعها في نظام الملفات الجذر ، وليس ديناميكيًا - باستخدام مدير الحزم من المستودع. عادة ، يمكن بناء هذه التوزيعات ليس فقط تطبيقات التطبيقات والمكتبات ، ولكن أيضًا النواة في تكوين معين. وغالبًا ما يكون مترجمًا متقاطعًا ، لأن الترجمة على الجهاز نفسه ليست فعالة على الأقل.

مشروع يوكتو


حتى الآن ، يعتبر مشروع Yocto أشهر توزيع من نوعه (مشروع لإنشاء توزيعات). وهو ، بدوره ، يعتمد على مشروع OpenEmbedded آخر مشهور ، وهو نوع من أنظمة الإنشاء لتوزيعات Linux. إذا كنت ترغب في استخدام Raspberry Pi ليس كنظام صغير جاهز ، ولكن كجهاز مخصص مع Linux ، فإن Yocto أو نظائرها ستكون خيارًا رائعًا. شخصياً ، لا أرى مزايا قوية في استخدام توزيعات Linux غير القياسية مع قطع حديد قياسية ، ولكن إذا كنت تخطط لتطوير أجهزة مماثلة أو ترغب في تعلم التقنيات نفسها ، فإن هذا النهج يبدو أكثر واعدة. بعد كل شيء ، بينما يجري تطوير قطعة متخصصة من الأجهزة ، يمكن للمبرمجين تطوير وتصحيح أجزاء النظام الخاصة بهم (الخوارزميات ، برامج التشغيل ، المكتبات ، ...). مما يقلل كثيرا من وقت التنمية ، وبالتالي TTM سيئة السمعة (الوقت للسوق).

Openwrt


هناك مشروع مشهور آخر قائم على نظام Linux وهو OpenWRT . أنا متأكد من أن أولئك الذين يستمتعون بتخصيص أجهزة التوجيه قد سمعوا عنه. استنادًا إلى هذا المشروع ، يتم إجراء البرامج الثابتة للعديد من أجهزة التوجيه ، والتي تعد واحدة ثنائية ، بما في ذلك نظام kernel ونظام الملفات الجذر. يرتبط استخدام البرامج الثابتة (بدلاً من التوزيعات العالمية) في الأنظمة المضمّنة بفكرة أن وظيفة النظام النهائي معروفة في وقت تطويره ، أي أنه حتى في حالة تحديث إصدار جهاز التوجيه ، تتغير البرامج الثابتة بالكامل مع جميع الوظائف (أو يتم استبدال جزء من هذه البرامج الثابتة بطريقة خاصة ) التثبيت ، على سبيل المثال ، مجموعات المكاتب ، عادة ما يكون غير ضروري ، وغالبًا ما يكون محظورًا بشكل عام ، حيث قد يؤدي ذلك إلى عدم اليقين. هذا النهج يسمح ، من بين أمور أخرى ، حفظ كبير على الأجهزة. على سبيل المثال ، تحتوي أجهزة التوجيه نفسها على معالج أقل قوة وذاكرة أقل بكثير من الغدد العامة.

أنظمة الوقت الحقيقي


بالعودة إلى موضوع الآلات الحاسبة الصناعية ، من الضروري مناقشة مصطلح "نظام الوقت الفعلي". يعتقد الكثير من الناس أن أنظمة الوقت الفعلي أسرع. هذه مغالطة. ربما ، يرتبط مع المباني التاريخية. بعد كل شيء ، جاء المصطلح نفسه عندما كانت السيارات بطيئة. ولاحظ المستخدم أن رد فعل النظام قد يتخلف عن أفعاله. يعني مصطلح "الوقت الفعلي" أن النظام يجب أن يستجيب لأي تأثيرات ، بما في ذلك إجراءات المشغل. ولكن على أجهزة الكمبيوتر الحديثة ، من غير المحتمل أن يلاحظ المستخدم (المشغل) تثبيطها. في الغالبية العظمى من الحالات ، عند النقر فوق القائمة ، والرمز ، والزر ، سنرى على الفور إعادة رسم للشاشة ، ما لم يكن بالطبع كل شيء في حالة جيدة (الإنترنت موجود ، لا تتوقف العملية ، وما إلى ذلك). ولكن إذا حدث شيء غير متوقع ، على سبيل المثال ، فقد الاتصال ، فسنرى كيف تختلف أنظمة الوقت الفعلي (يجب أن تختلف). سنقوم ببساطة بإعادة تشغيل الهاتف الذكي العادي. لكن إذا كان هذا النظام يتحكم في محطة الطاقة ، فأنت تدرك أنت بنفسك أن هذا غير ممكن دائمًا. من هذا نستنتج أن نظام الوقت الفعلي يجب أن يستجيب بشكل سريع وغير متوقع لأي حدث أو مجموعة من الأحداث ، بغض النظر عن حالته وبيئته.

لينكس في أنظمة الوقت الحقيقي


بطبيعة الحال ، كانت هناك (وستظل) محاولات لإنشاء نظام في الوقت الفعلي من نظام Linux. أشهرها هي RTLinux ، حيث كانت في الأصل عبارة عن تصحيح لنظام Linux ، حيث استبدلت " جدولة صادقة تمامًا " الأصلية ، وبدقة أكثر دقة ، أدخلت الخاصة بها ، وهي إحدى المهام التي حددها برنامج جدولة Linux. عملت هذه المجدول على أولويات المهام الثابتة ؛ وبالتالي ، فقد عملت بشكل أكثر توقعًا. ولكن لم يعد Linux ، أو بالأحرى ، لم تكن وظيفة Linux في الوقت الفعلي.

ARINC-653


هناك طريقة أخرى لتوفير الوقت الفعلي ، تشبه إلى حد ما تصحيح RT لنظام Linux ، وهي الطريقة التي يتطلبها معيار ARINC653 أو ما يسمى بنهج MILS . يتضمن هذا النهج أن النظام مصمم في طبقات ، بينما تتضمن الطبقة السفلية جهاز مراقبة خفيف الوزن للغاية ، بناءً على المهام التي يتم تنفيذها بدرجات متفاوتة من الأهمية في أقسام محددة بشكل ثابت. لقد وصفت برنامج hypervisor بأنه خفيف جدًا لأنه يتضمن أنه يحتوي على أعلى درجة من الأهمية وبالتالي يجب التحقق من رمزه (الخوارزميات) بشكل كامل قدر الإمكان (من الناحية المثالية ، يجب إثبات عدم وجود حالات غير مُعالجة). لذلك ، يجب أن يكون الرمز صغيرًا قدر الإمكان. حسنًا ، و Linux ، كما قد تفهم على الأرجح ، يقع في قسم خاص به.

uCLinux


بدأت محاولات استخدام Linux في الأنظمة المدمجة منذ وقت طويل. كان أولها محاولة استخدام Linux في الأنظمة التي لا يوجد فيها دعم للأجهزة للذاكرة الظاهرية (MMU). كان هذا المشروع يسمى uCLinux وكانت مساهمته في نواة Linux هي NOMMU أو MMU-mode mode.

لينكس في أنظمة الوقت الحقيقي


لتلخيص محاولات استخدام Linux في أنظمة الوقت الفعلي ، تحتاج إلى إجابة سؤال لماذا يحدث هذا. بمعنى أن Linux ليس من ناحية خاصة (في الوقت الحالي ، وفي شكله النقي) يتم تكييفه مع أنظمة الوقت الفعلي ، ومن ناحية أخرى ، تبذل محاولات للقيام بذلك باستمرار. وهذا يحدث بسبب إدخال قيود (استبدال المجدول ، تقديم برنامج مراقبة ، قيود على استخدام الذاكرة الظاهرية ، وما إلى ذلك). الجواب ، في رأيي ، يكمن في وجود لينكس رمز قاعدة عملاقة. هذه هي برامج التشغيل ، وهذه تطبيقات وظيفية ومكتبات. من الواضح ، إذا كنت ترغب في إنشاء نظام موثوق ، يجب عليك استخدام الأجزاء الجاهزة قدر الإمكان ، لأن تطوير أجزاء جديدة ، سواء كانت منطقية وظيفية أو محركًا ، تحتوي دائمًا على احتمال تقديم خطأ. ونظرًا لأن أنظمة الوقت الفعلي الحديثة لها متطلبات وظيفية عالية إلى حد ما ، فقد أصبح إعادة استخدام الوظائف الجاهزة من نظام Linux أكثر إغراء. بمعنى آخر ، لا يبدو أن ترقية نظام Linux إلى نظام في الوقت الفعلي أمر مكلف للغاية مقارنةً بتطوير الوظائف ، وإن كان يعتمد على نظام تشغيل في الوقت الفعلي ، لأن موثوقية النظام بأكمله ، وليس فقط دوره في شكل نواة نظام التشغيل ، يجب أن تكون موثوقة.

ويندوز في الأجهزة المدمجة


أريد العودة إلى Windows لفترة من الوقت. في مطلع مسيرتي ، أجريت مناقشة مع مطور أكثر خبرة لا يمكن استخدام Windows في أنظمة موثوقة. الذي اعترض عليه ، إذا قمت باختبار نظام مكتمل بالفعل مع البرنامج الوظيفي الضروري وحظرت أي تغييرات: تحديثات ، تثبيت البرنامج ، وما إلى ذلك ، سيكون النظام موثوقًا به بما يكفي للعديد من المهام ، بما في ذلك النظام الذي قررت. الآن ليس لدي شك في أن خصمي كان على حق ، وليس أنا. علاوة على ذلك ، تم استخدام MS-DOS القديم في الأنظمة الصناعية لفترة طويلة جدًا. والحقيقة هي أن تعدد المهام ، والذي يبدو ضروريًا للغاية ، يؤدي إلى عدم اليقين. وإذا قمت بتشغيل برنامج يتحكم بالكامل في النظام بأكمله ، فيمكنك تحقيق سلوك أكثر تحديدًا. بمعنى آخر ، إذا كان هناك عدد غير محدد من المهام تدور في النظام ، فمن غير المرجح أن يكون من الممكن تحقيق اليقين في عمل جميع وظائف النظام. لذلك ، فإن أسهل طريقة لزيادة إمكانية التنبؤ بالنظام هي الحد من وظائفه ، وبالتالي رفض العالمية في وقت التشغيل. الذي نلاحظه في الواقع في أمثلة استخدام Linux في أنظمة الوقت الفعلي المذكورة أعلاه.

ميكروكنترولر


مثال MS-DOS باعتباره نظام التشغيل الأساسي للأنظمة الصناعية في الوقت الحقيقي يقودنا إلى فكرة أنه إذا كنت تستخدم البرنامج الخاص بك فقط ، فيمكنك تحقيق سلوك يمكن التنبؤ به للنظام بأكمله. وهذا هو حقا! صحيح ، تحتاج إلى إبداء تحفظ أن هذا ممكن فقط إذا كانت وظيفة النظام صغيرة وثابتة بشكل واضح. إذا كانت جميع وظائف النظام تتمثل في التحكم في المحرك باستخدام GPIO وتلقي (إرسال) مجموعة محدودة من الأوامر عبر واجهة UART ، فليس من الضروري استخدام نظام التشغيل ، يمكنك إنشاء البرامج الثابتة (ما يسمى المعدن العاري). وغالبا ما يستخدم هذا النهج في ميكروكنترولر. ولكن منذ أن أصبحت ميكروكنترولر كبيرة (ARM 32 بت مع عدة كيلوبايت من ذاكرة الوصول العشوائي مقابل AVR-8 بت مع مائة بايت من ذاكرة الوصول العشوائي) ، زادت طلبات الوظيفة. الآن ، عند تطوير البرامج الثابتة ، يستخدمون على الأقل برامج من الشركات المصنعة ، مما يسمح لك باستخدام بعض الأمثلة الجاهزة للعمل مع متحكم دقيق ، على سبيل المثال ، STM32Cube .

RTOSes


ولكن نظرًا لأن متطلبات الوظيفة تتزايد باستمرار ، فإن البرامج الثابتة لأجهزة التحكم الدقيقة يتم تصنيعها بشكل متزايد على أساس ما يسمى RTOS. على عكس أنظمة التشغيل الكبيرة في الوقت الفعلي ، فهذه مشاريع صغيرة مفتوحة المصدر توفر الوصول الكامل إلى جميع الشفرات في النظام. أي أن هناك مجموعة من المفاهيم: من ناحية ، يتم استخدام رمز جاهز ، ومن ناحية أخرى ، يتمتع المطور بحق الوصول الكامل إلى كل شيء في النظام ، يمكنك أن تقول البرامج الثابتة المعدنية.

هناك الكثير من RTOS لميكروكونترولر. لذلك ، من المستحيل التحدث عنهم جميعًا. سوف أفرد فقط عددًا قليلاً ، في رأيي ، مشاريع مثيرة للاهتمام وأتحدث بإيجاز عن ميزاتها.

FreeRTOS


ربما واحدة من مشاريع RTOS الأكثر شعبية الآن FreeRTOS . يقول البعض أن هذا ليس نظام تشغيل كامل ، ولكن فقط مجدول. ولكن إذا أخذت في الاعتبار المناقشة المذكورة أعلاه حول المعادن المجردة ، والعدد الكبير من ميكروكنترولر المدعومة وحقيقة أن الكثير من برامج التطبيقات مكتوبة ومتكاملة ، فإن الوظيفة الصغيرة تبدو أشبه بفضيلة أكثر من كونها عيبًا. هذا سمح لنا بأن نصبح معيارًا فعليًا للميكروكونترولر ، كما هو مكتوب على موقع المشروع.

كونتيكي


Contiki - RTOS التي طورها آدم دانكيلز ، مبتكر مكدسات TCP / IP المعروفة مثل lwIP و uIP. أود أن أقول أن نظام التشغيل بأكمله مبني حول مكدس الشبكة. يجعل وجود دعم IPv6 ومتطلبات الموارد الصغيرة هذا المشروع مثيراً لإنشاء أنواع مختلفة من الأجهزة اللاسلكية.

RTEMS


RTEMS التنفيذي في الوقت الحقيقي لأنظمة المعالجات. وضعت أصلا للجيش ، اختصار لتقف في الوقت الحقيقي التنفيذي لأنظمة الصواريخ ، ثم التنفيذي في الوقت الحقيقي للأنظمة العسكرية. جميلة جدا ولكن لا يزال مشروع مفتوح المصدر حية. ممثل مشرق لنهج libOS. عندما يرتبط البرنامج المطور بنظام تشغيل تم تجميعه بالفعل ، وهو ليس فقط النواة ، ولكن أيضًا جميع الخدمات المتاحة. يتم تجميعها وتسليمها كمكتبة إلى المترجم ، والتي هي مريحة للغاية في المراحل الأولى من التطوير.

eCos


نظام التشغيل المتكامل eCos . أيضا مشروع قديم جدا ، سابقا بشعبية كبيرة. تتمثل الفكرة الرئيسية في إنشاء نظام تشغيل قابل للتكوين للغاية ، أي تضمين ما تحتاجه في kernel فقط.

RTOSes الأخرى


والقائمة تطول لبعض الوقت. سأذكر مشروع NuttX آخر أدناه. بالنسبة لأولئك المهتمين بقائمة أكثر تفصيلاً ، أنصحك بمشاهدة ويكيبيديا . بالنسبة للميكروكنترولر ، أود أن أذكر أيضًا ChibiOS / RT و MicroC / OS (µC / OS) و Nut / OS و RIOT . ولكن بالطبع ، كل هذا يتوقف على المهمة.

اردوينو


أعتقد أن الحديث عن جزءا لا يتجزأ من سيكون غير مكتمل دون ذكر اردوينو. بعد كل شيء ، مثل RaPi فهي شائعة للغاية وساهمت إلى حد كبير في تعميم ميكروكنترولر. أنا شخصياً أشك في موضوع اردوينو ، لذا سأتجاهل انتقادات عشاق هذه التقنية. ولكن عن حقيقة أن هذه تقنية مثيرة للاهتمام للغاية ، يمكنني تقديم مثال على آلة الخبز ، الموضحة على محور حل جميل جدا حسنًا ، أو المثال الذي تم الاستشهاد به بالفعل مع روبوت يتعرف على خط بواسطة openCV ، ولكن يستخدم اردوينو أيضًا هناك.

Microkernel


لم يسبق لي أن ذكرت مفهوم microkernel ، والذي ، كما يعلم الكثير من الناس ، يجعل النظام موثوقًا به ويمكن التنبؤ به. من جهة ، هذا صحيح ، لكن من ناحية أخرى ، كما هو الحال دائمًا ، ليس تمامًا. بتعبير أدق ، هذا صحيح بالطبع ، لكن الاعتقاد بأن هذا المفهوم (الهندسة المعمارية) سيحول نظامك على الفور إلى نظام في الوقت الحقيقي الصعب هو وهم.إنه شعار تسويقي: "نحن نظام في الوقت الفعلي لأننا مبنيون على مبدأ النواة الصغيرة". ولكن مبدأ microkernel يتيح فقط تبسيط تطوير البرامج ، حيث يتم تنفيذ معظم الأجزاء في مساحة المستخدم. ولكن ماذا لو كان لديك خادم مكسور ، وهو أمر ضروري للعمل؟ أنت تعيد تشغيله ، لكن الأمر يستغرق بعض الوقت ، وإذا لم يكن لديك؟ بالإضافة إلى ذلك ، الهندسة المعمارية microkernel الكلاسيكية لها عيوبها! على سبيل المثال ، يكون بطيئًا ، نظرًا لوجود الكثير من مكالمات النظام (نقل الرسائل بين الخوادم وبرامج التطبيقات). خلاف ذلك ، كان الجميع قد تحولوا إلى بنية microkernel خالصة منذ فترة طويلة ، والذين ، على سبيل المثال ، رأوا مشاريع على L4 ، لكنها كذلك. حسنا ، بالطبع ، يتذكر الكثيرون حجة لينوس تورفالدس مع أندرو تانينباوم.

وهذا يعني أن مفهوم النواة الصغيرة ليس رصاصة فضية. ولكن كفكرة جيدة للغاية يتم تطبيقها على درجة أو أخرى في معظم أنظمة التشغيل الحديثة. وما زال إنشاء نظام موثوق في النهاية يعتمد على المطور النهائي والقدرات التي يوفرها نظام التشغيل لإنشاءه.

مكان Embox في الأنظمة المدمجة


لقد تحدثت بالفعل كثيرًا عن جوانب مختلفة من العالم المضمن ، لكنني لم أصل إلى مكان Embox فيه. حسنًا ، يمكنني القول أنه في الأمثلة الموضحة أعلاه ، قد لا تكون هناك حاجة لاستخدام Embox. علاوة على ذلك ، عادة ما نطلب من المستخدمين لماذا يحتاجون إلى Embox؟ إذا كان استخدام Embox لا يعطي أي مزايا ، فننصحك بتجربة شيء من القائمة أعلاه أو أي شيء آخر (على سبيل المثال ، Android). ولكن هناك عددًا من الحالات التي يعطي فيها استخدام Embox ربحًا ملموسًا.


سأبدأ مع أول استخدام لـ Embox. لم يكن حتى إمبوكس في ذلك الوقت ، ولكنه كان نوعًا من رمز C و المجمّع ، مما سمح لك بالبدء بسرعة كبيرة وتنفيذ شفرة النفعية. في تلك اللحظة ، كان مشروعًا لمساعدة المهندسين على تصحيح معدات تم تطويرها في FPGAs. كان يعرف كيف يعمل بسرعة كبيرة ، أسرع بكثير من التعليمات البرمجية المماثلة المكتوبة باستخدام RTEMS المذكورة بالفعل. هذا مهم لأنه تم استخدامه أيضًا في مرحلة محاكاة الفاصل الزمني. بالإضافة إلى ذلك ، بدأوا في استخدامه على أجهزة حقيقية ، ولهذا تمت كتابة مترجم صغير يمكنه استدعاء أوامر المستخدم. في وقت لاحق ، تم تطوير هذا الاتجاه ، وتم نقل مترجم لغة TCL ، لأنه مألوف لدى مطوري FPGA.وبما أن الفرق في تكوين معين تتمتع بوصول مباشر إلى المعدات (إلى مساحة العنوان بالكامل) ، فقد تمكن المطورون من إجراء اختبارات معقدة إلى حد ما.

Linux


كان أحد تطبيقات الطرف الثالث الأول شرطًا محددًا للحصول على شهادة الكود. كان هناك جهاز معين ذو وظائف محدودة ، بما في ذلك: العمل باستخدام مآخذ التوصيل (UDP) ونظام الملفات وبعض الوظائف الأخرى. تم تنفيذ جميع الوظائف من قبل العميل كبرنامج قائم على Linux. لم يكن هذا الجهاز x86 وليس ARM. كان له محيطه. كان من الضروري التصديق على الكود المستخدم في الجهاز ، نظرًا لعدم إمكانية استخدام التوزيعات المعتمدة هناك. أدت محاولة قطع نواة Linux إلى حوالي 500 ألف سطر من التعليمات البرمجية ، بالإضافة إلى وجود مشكلات في #ifdef ووحدات الماكرو الأخرى. وطلب العميل ، بتقييم تكلفة التصديق على هذا المنتج ، النظر في خيارات أخرى. Embox في ذلك الوقت كان بالفعل مكدس الشبكة ،نظام الملفات وتقرر تعديله مع مراعاة متطلبات التصديق. لذلك ، حصلنا على لغة وصف وحدة Mybuild ، إلى حد ما قمنا بحل المشكلة مع وحدات الماكرو ، وبعض المشاكل الأخرى. نتيجة لذلك ، حققنا أننا في الصورة النهائية لم نستخدم إلا الكود (المصرح به في التكوين) ، وعادة لا يتطلب الأمر الكثير لمهمة محددة.

لينكس بدون لينكس


الاتجاه مع شهادة عموما شعبية جدا. غالبًا ما يكون لدى العملاء رمز لنظام Linux ، لكن لسبب ما لا يمكنهم استخدام نظام التشغيل هذا على أجهزتهم. لدى Embox القدرة على نقل برامج التطبيق بسهولة من مشاريع مفتوحة المصدر ضمن Linux. وهكذا تم استدار ذلك عدد من المشاريع الشعبية، حتى كيو تي (جزءا لا يتجزأ من الإصدار) أو و صفه حبري SIP الهاتف . في الوقت نفسه ، حيث أنه عند استخدام Embox يتم تضمين الوحدات المطلوبة فقط ، تكون موارد التشغيل أقل بكثير.

فكرة تشغيل تطبيقات POSIX على الأنظمة ذات الموارد القليلة هي الفكرة الرئيسية لمشروع آخر مفتوح المصدر - NuttX. في بعض النقاط ، يتفوق هذا المشروع على Embox ، في بعض النقاط - بالعكس. أمثلة هواتف Qt و SIP ، على حد علمي ، NuttX صعب للغاية. لكن المشروع حقا مثير جدا للاهتمام.

تجدر الإشارة أيضًا إلى أن جزءًا من RTOS يضيف أيضًا طبقة POSIX. على سبيل المثال، FreeRTOS أو RTEMS، اليوم الذي يتفق تماما مع POSIX الملف 52، وهذا يعني "عملية واحدة، مواضيع متعددة، نظام الملفات" . RTEMS حتى يجعل تجارب ناجحة لإطلاق Qt على ميكروكنترولر

لينكس آمن


من ناحية أخرى ، إذا نظرنا إلى التجميع الثابت لصورة RTOS الصغيرة ، أي تحديد جميع الوظائف في وقت الإنشاء ، يمكننا أن نرى أن هذا يوفر حماية طبيعية ضد الأكواد الخبيثة ، أي الفيروسات. بالطبع ، في نظام Linux يمكنك إنشاء نظام أمان جيد للغاية ، ولكن لا تزال مشاكل الأمان الرئيسية مرتبطة بالعامل الإنساني (كلمات مرور ضعيفة ، فقدان كلمة المرور ، رفع حقوق المستخدم ، إلخ). أي أنه عند تلقي حقوق الجذر ، تصبح كل الحماية في الواقع غير ذات صلة ويمكنك تثبيت أي شيء في أي مكان. في حالة التجميع الثابت ، يمكن للمهاجم استخدام الوظيفة الحالية فقط. نعم ، قد يكون قادرًا على الحصول على إحصاءات أو القيام بضبط ما ، لكن ، يجب عليك أن تعترف ، أن هذا أقل شرًا مما هو عليه في حالة تثبيت البرامج الضارة. زائدعلى النظم العالمية ، تكلفة نظام الحماية ، دعنا نقول ، ليست صفرية. في حالتنا ، هذا أرخص بكثير ، لأنه تم تنفيذه بالفعل في مرحلة التصميم.

لينكس في الوقت الحقيقي


لقد كرست قليلا لاستخدام نظام لينكس في الوقت الحقيقي. وضح لماذا يصعب تحقيق ذلك ، وكذلك سبب إجراء المحاولات. لذا ، عد إلى المقالة التي تم الاستشهاد بها بالفعل على روبوت التعرف على خط OpenCV . إذا نظرت إلى الرابط ، فمن المحتمل أنك لاحظت أن OpenCV تدور على RaPi ، ويتم التحكم في المحركات على لوحة منفصلة من Arduino. هناك عدة أسباب لذلك: الأول هو المجدول ، والثاني هو أن الإدارة تأتي من وضع المستخدم ، وأن لينكس ليس لديه إمكانية الوصول إلى الأجهزة الموجودة فيه. كما يحتمل أنك خمنت ، في إمبوكس يمكن حل كلا المشكلتين أسهل بكثير من لينكس. وعلى نفس اللوحة بموارد كافية ، يمكنك تشغيل OpenCV والتحكم في المحركات.

كان هناك العديد من الأجهزة التي تجمع بين وظائف Linux والعمل في الوقت الفعلي. مثال على ذلك ، آلة CNC يتم التحكم فيها بواسطة واجهة ويب ، والتي وصفتها بإيجاز في مقال . حسنًا ، إذا صنعنا روبوتات على العديد من اللوحات ، فهذه أنظمة متعددة الوكلاء .

إنترنت الأشياء


الإيمبوكس ، مثلها مثل جميع ميكروكنترولر RTOS ، لديها متطلبات موارد منخفضة. هنامثال لعبة على اكتشاف stm32vl سبق وصفها على هابر تم إطلاق Embox حتى على MSP-430 16 بت مع 512 بايت من ذاكرة الوصول العشوائي. ولكن إذا نظرت ، على سبيل المثال ، إلى الكود من المقالة مع اللعبة ، ستلاحظ أنه لا يستخدم تدفقات POSIX القياسية ، ولكن تطبيقه الخاص للتدفقات الخالية من التكدس (الخيوط الخفيفة). بطبيعة الحال ، إذا ذهبت إلى أبعد من ذلك ونفذت جميع الشفرات بنفسك ، فأنا متأكد من أنه يمكنك تحقيق نتيجة أفضل فيما يتعلق بتكاليف الذاكرة. لكن أجهزة الاستشعار الذكية ليست سوى جزء واحد من إنترنت الأشياء. أنها تنقل البيانات إلى بعض العقد أكثر قوة. ويفعلون ذلك وفقا لبعض البروتوكول. ولكن إذا تم أيضًا تشغيل Embox على هذه العقدة ، وسيكون رمز المكتبة الذي ينفذ بروتوكول الاتصال أمرًا شائعًا ، فسيؤدي ذلك إلى تبسيط عملية التطوير. بعد كل شيء ، أولاً ، الكود شائع ، وحتى إذا كان هناك خطأ في تنفيذ البروتوكول ، فسيتم تسويته بواسطةأن نفس الرمز سيعمل على جانبي المحادثة. وثانياً ، يمكن تصحيح الكود على نظام أساسي بموارد كبيرة ، وهو أكثر دراية وبساطة.

يمكنك معرفة المزيد حول المصير الصعب للمشروع من خلال مشاهدة مقطع فيديو من أول عروضنا الأولى على CodeFreeze .

الخاتمة


يكشف هذا المقال فقط شريحة صغيرة في عالم متنوع المضمنة. لم يتم ذكر مواضيع مهمة مثل الأجهزة المنزلية ، السيارات ، الأجهزة ، ASU-TP. لكن كما قلت في البداية ، في المقال أريد فقط أن "أتحدث" عن ميزات المضمنة. آمل أن تكون المقالة مثيرة للاهتمام بما فيه الكفاية ، وبعد قراءتها ، تعلمت شيئًا جديدًا! ودعونا نناقش ميزات هذا المجال في التعليقات.

ملحوظة: حسنًا ، نعم ، Embox ليست فقط "مضمن" ، ولكن أيضًا " مفتوحة المصدر ". لذلك ، ندعوك لاستخدام المشروع وبالطبع للمشاركة فيه!

Source: https://habr.com/ru/post/ar440390/


All Articles