تجربة بناء مجموعات Linux للحصول على تحديثات اللوحة الفردية مع الدعم

صورة

مقدمة


في الوقت الحالي ، يقدم السوق مجموعة واسعة من دافعي واحد لكل ذوق وبأسعار في متناول الجميع.

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

على الإنترنت ، لا توجد أي معلومات تقريبًا حول ما يجب أن يكون عليه إصدار الإصدار وكيفية تنفيذ التحديث الخاص به ، لذلك يضطر المطور إلى وضع "دراجة" أو استخدام تطوراته الخاصة ، والتي لا يتم اختبارها دائمًا بنسبة 100٪.

نظرًا لأنني أشارك في تطوير البرامج لمختلف أجهزة Linux (يمكن أن تكون محفظتي عبارة عن كلمة google بكلمة develinux) وأنا أيضًا مؤلف مشروع مكون من 11 جزءًا ، يجب علي التعامل بانتظام ليس فقط مع مجموعات التجميع ، ولكن أيضًا مع تطوير آليات التحديث عبر WEB أو USB flash.

في هذه المقالة أريد أن أشارك تجربتي ومعرفتي في المجالات ذات الصلة.

متطلبات التجميع


في عملية تطوير التجميعات والتحديثات للأجهزة المختلفة ، حددت العديد من المتطلبات بنفسي:

  • يجب ألا تتعرض المجموعة للتلف عند انقطاع التيار الكهربائي فجأة ؛
  • التجمع يجب تحميل بسرعة.
  • يجب أن يعمل محمل الإقلاع بلا عيب.
  • يجب أن يدعم التجميع التحديث.

سأحاول شرح هذه المتطلبات بمزيد من التفصيل أدناه ، وبعد ذلك سأصف 3 طرق في تقسيم الصور إلى أقسام وتحديثاتها.

يجب ألا تتعرض المجموعة للتلف عند إيقاف الطاقة فجأة.


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

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

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

ولكن ماذا عن حفظ التهيئة وتنزيل الملفات وما إلى ذلك تسأل؟
ولكن لهذا تحتاج إلى إنشاء أقسام منفصلة RW. إذا كنت تخطط للكتابة في NAND ، فأنا أوصي بخيار مثبت - UBIFS. إذا كان في NOR ، ثم jffs2. إذا قمت بالكتابة على محرك أقراص آخر ، فإنني أوصي بامتداد ext4 و btrfs و ReiserFS ، ولا يمكنني الإشارة إلى أفضل FS بينهم ، لأن كانت هناك مشاكل مختلفة مع الجميع.

في هذه الحالة ، دائمًا قبل تثبيت أقسام rw ، تأكد من فحص الأقسام بحثًا عن أخطاء باستخدام أدوات مساعدة مثل fsck.

الجمعية يجب تحميل بسرعة


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

يجب أن يعمل محمل الإقلاع بسلاسة


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

يجب تخزين أداة تحميل التشغيل في مكان آمن ، على محرك أقراص موثوق ، على سبيل المثال ، في شريحة NOR أو EEPROM منفصلة. يوجد أدناه مثال على وحدة نمطية تستند إلى شريحة imx6ull ، مع SPI NOR لتخزين أداة تحميل التشغيل.

صورة

بناء يجب أن تدعم الترقية


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

يجب التفكير في نظام التحديث في الجهاز بأدق التفاصيل واختباره بنسبة 100٪. خطأ واحد في هذا الجزء سيحول المكواة إلى قرميد ، لذلك يجب ألا يكون هناك أي تسامح أو استثناءات.

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

نظرة عامة على طرق التقسيم للتحديثات المستقبلية


من بين الطرق العديدة التي يمكنني التوصية بها 3 أنواع قمت بتنفيذها شخصيًا. هذه ليست جميع الطرق ؛ نطاقها خارج نطاق هذه المقالة. جميع الأنواع الثلاثة بها عيوب وهي أبعد ما تكون عن المثالية ، لكنها ، كما يبدو لي ، قريبة من المعنى الذهبي للحس السليم.

النهج رقم 1


صورة

الطريقة الأسهل والأكثر بأسعار معقولة:
يتم وضع صورة على محرك أقراص ، على سبيل المثال بطاقة SD ، يتم وميضها من u-boot في محرك الأقراص المدمج بالجهاز ، على سبيل المثال ، NAND flash.
في u-boot ، تحتاج إلى إعداد البرامج النصية لهذا الغرض.
من الإيجابيات - هذا هو أسهل أنواع التحديث ، حيث سيستغرق تطويره يومًا واحدًا بحد أقصى.
عيوب هذا النهج هي عدم وجود تصور للعملية والقدرات المحدودة للغاية لمحمل الإقلاع ، أي لا يوجد منطق معقد بالأدوات القياسية ، إلا إذا توصلت بالطبع إلى الأمر u-boot الخاص بك (ولكن هذا هو نوع آخر من التحديث ، C هو قوة كبيرة). هذه الطريقة غير مخصصة للتحديثات عبر WEB - من الصعب التحكم في سلامة صورة البرنامج الثابت ؛ في بعض الحالات ، يجب ألا يتجاوز حجم التجميع حجم ذاكرة الوصول العشوائي.
بالإضافة إلى ذلك ، في بعض المهام ، يجب حفظ الإعدادات أثناء الترقية ، وهذا ، مع هذا النهج ، ليس من السهل تنفيذه.

النهج رقم 2


صورة


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

النهج يستخدم الحد الأدنى من البناء (حجم ramdisk من 8-16MB) والأخرى الرئيسية. Ramdisk هو أرشيف مضغوط ، لذلك سيكون إنشاء بنية بحجم 16 ميغابايت أصغر عدة مرات.
الهدف من التجميع الأدنى هو تقييم التجميع الرئيسي وتحميله.
يتم استضافة Ramdisk مع البرامج النصية kernel و u-boot في صورة FIT.

لماذا تناسب الصورة وماذا تعطي؟ صورة FIT عبارة عن تنسيق مدعوم بواسطة u-boot. إنه يضمن سلامة جميع المكونات (النواة ، dts ، ramdisk ، البرامج النصية). يتم تفريغ صورة FIT في u-boot ، وإذا لم يتقارب المجموع الاختباري ، سيرفض u-boot تحميله. هذا مناسب ، أي لا حاجة لرعاية ضبط النزاهة من قبل نفسك ، لا حاجة لكتابة العديد من الملفات بشكل منفصل أو اختراع الصور الخاصة بك ، كل شيء يتم عن طريق FIT image. عادةً ما تستغرق صورة FIT ما بين 7 إلى 20 ميغابايت ، ويجب كتابتها على محرك أقراص منفصل موثوق به للغاية ، على سبيل المثال ، في qspi أو فلاش. يمكن تخزين التجميع الرئيسي في ذاكرة أرخص لا يمكن الاعتماد عليها ، على سبيل المثال ، فلاش NAND. نظرًا لأن العمل الرئيسي سيحدث في التجميع الرئيسي ، فستتضرر تمامًا أولاً. في هذه الحالة ، سيأتي محرك منفصل مع الحد الأدنى من rootfs.

عملية التمهيد.

يقوم u-boot بتنزيل برنامج نصي يحاول استخدام تحديثات FIT (FIT2) ، ثم يقوم برنامج تشغيل المصنع FIT (FIT1).

إذا لم يكن FIT2 موجودًا أو تم انتهاك تكامله ، فسيفشل اختبار الملاءمة وسيحمل u-boot أول FIT (FIT1). إذا كانت هناك تحديثات FIT (FIT2) ، ولم يتم كسرها ، فسيتم تحميل ramdisk التي تتحقق من تحديثات rootfs (Rootfs2).

إذا تم قطع Rootfs2 ، فستحذف البرامج النصية تحديثات FIT (FIT2) ، ثم بعد إعادة تشغيل صورة المصنع التي تتكون من FIT (FIT1) وسيتم تنزيل Rootfs1.

عملية التحديث.

تحتوي صورة التحديث على FIT و rootfs ومختلف معلومات التجميع ، بما في ذلك المجموع الاختباري لجميع مكوناته. يتم استخدام معلومات التجميع أثناء الترقية لمراقبة النزاهة والتوافق.

تحديث التقدم في الخطوات:

  • التحقق من الصورة للتأكد من توافقها مع الأجهزة والبرامج ،
  • التحقق من سلامة الصورة في ملف التحديث ،
  • نسخ Rootfs2 من ملف التحديث إلى قسم تم إعداده مسبقًا ،
  • التحقق من سلامة الصورة المنسوخة في القسم ،
  • نسخ FIT2 إلى القسم المناسب ،
  • إعادة تشغيل الكمبيوتر.

إذا فشلت العملية ، فإن عدم وجود أو تلف FIT2 لن يدمر النظام ، كما سوف يرفض u-boot ببساطة استخدامه وتحميل صورة المصنع. لذلك ، أثناء الترقية ، لم يتم التحقق من سلامة FIT2.

بعد التحديث ، سيتم وضع التجميع الجديد على محرك الأقراص الرئيسي في شكل FIT2 و Rootfs2.

هذه الطريقة مقاومة للأضرار الميكانيكية على محرك الأقراص والأخطاء FS.

في حالة حدوث أعطال حرجة ، ستبدأ صورة المصنع ، حيث سيعمل برنامج الاسترداد ، والذي ، على سبيل المثال ، يمكنه التحقق من NAND وتنزيل البرنامج الثابت من الشبكة باستخدام بروتوكول SSH ، ثم كتابته.

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

النهج رقم 3


صورة


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

التحديث مناسب لأي أحجام تجميع ، لأي أنواع محركات الأقراص. على عكس النوع السابق ، يتم هنا استخدام SPI NOR فقط للإقلاع على نظام التشغيل u ، وبالتالي يكون حجمه أصغر وتكلفة أقل ، 1 ميجابايت كافية.

لا يتطلب هذا النوع من التحديث إنشاء ramdisk منفصل ، مما يعني أنه يتم توفير وقت البرمجة لتطويره ودعمه في المستقبل.

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

منطق التنزيل والتحديث هو نفسه كما في النهج السابق.

في حالة التحميل ، يقوم u-boot أولاً بتنزيل تحديثات FIT (FIT2) ، إذا لم يكن هناك أو تم انتهاك التكامل ، يقوم u-boot بتحميل أول FIT (FIT1) ، التجميع الذي تم دمجه في المصنع ، وهكذا حتى يتم تحديث النظام. عند تحديث النظام ، ستظهر FIT2 و Rootfs2. في هذه الحالة ، عند بدء تشغيل الجهاز ، يبدأ تحديث FIT (FIT2) أولاً. في البرامج النصية التمهيد u التي يتم تخزينها في كل FIT ، يجب أن يكتب أي rootfs لتحميل.

قسم مشترك RW


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

لتلخيص


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

في الوقت الحالي ، أستخدم الأخيرين فقط ، حيث أنهما الأكثر ملائمة للمتطلبات. للتوضيح ، يمكنك رؤية أمثلة للأجهزة التي تستخدم هذه الأنواع من التحديثات (التفاصيل في حافظة مكونة من 11 قطعة):

  • مكرر RS485 عبر 4G / WiFi / LAN ،
  • 4K V-By-One تحكم العرض الصناعية المجلس ،
  • نظام متكامل لمراقبة المناخ حظيرة ،
  • 2DisplayPort-LVDS العرض الصناعي تحكم الفيديو ،
  • نظام مراقبة الخط
  • بوابة VPN.

إذا كانت مقالتي مفيدة ومثيرة للاهتمام ، فأنا على استعداد لزيادة مشاركة تجربتي والحلول التقنية التي أثبتت جدواها في مجال نظام لينكس المضمّن على هذا الموقع.

شكرا لكم جميعا
غورتشاكوف ايليا
برقية: develinux

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


All Articles