المستقبل موجود بالفعل هنا أو قم بالرمز مباشرة في المتصفح

سأخبركم عن موقف مضحك حدث معي، وكيف أصبح مساهمًا في مشروع مشهور.

منذ وقت ليس ببعيد كنت أفكر في فكرة: تشغيل Linux مباشرة من UEFI...
الفكرة ليست جديدة وهناك عدد من الأدلة حول هذا الموضوع. يمكنك رؤية واحد منهم هنا

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

جوهر UEFI-Boot هو أن قسم ESP (قسم نظام EFI) مدمج مع دليل /boot. أولئك. توجد جميع النوى وصور التمهيد (initrd) على نفس القسم الذي يمكن لـ UEFI من خلاله تشغيل الملفات القابلة للتنفيذ، وعلى وجه الخصوص، تشغيل أدوات تحميل تمهيد النظام. لكن نواة Linux نفسها في العديد من التوزيعات تم تجميعها بالفعل باستخدام خيار UEFISTUB، والذي يسمح بإطلاق النواة نفسها من UEFI.

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

هناك طريقة أخرى.

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

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

ولكن هذا ليس من السهل القيام به. لا تعرف الأداة المساعدة efibootmgr القياسية (التي تُستخدم لتكوين مدير إلغاء تحميل UEFI) كيفية (أو بالأحرى لم تعرف كيف) لتعيين هذا البت. اضطررت إلى تثبيته يدويًا من خلال إجراء معقد وخطير إلى حد ما.

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

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

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

وهناك تم إرفاق Travis CI للتحقق من طلبات السحب. وأخبرني بجد بكل أخطائي. حسنًا، إذا كانت هناك أخطاء معروفة، فليست هناك حاجة لإصلاحها: مرة أخرى، مباشرة في المتصفح، وفي المحاولة الرابعة، نجح الكود (إنجاز بالنسبة لي).

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

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

ومع ذلك، ظل طلبي دون استجابة منذ 19 مارس 2019، وبدأت في نسيانه بالفعل.

ولكن بالأمس تمت إضافة هذا الطلب إلى الماجستير.

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

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

يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع. تسجيل الدخول، من فضلك.

هل يجب أن أكتب أكثر أم لا؟

  • نعم

  • لا يستحق كل هذا العناء

صوّت 294 مستخدمًا. امتنع 138 مستخدما عن التصويت.

المصدر: www.habr.com

إضافة تعليق