كيف يعمل
يحدد البرنامج الثابت UEFI بمعرفات GUID كل ما يتعامل معه تقريبًا: البروتوكولات التي توفرها برامج التشغيل، ووحدات DXE وPEI وSMM، ووحدات تخزين البرنامج الثابت، ومساحات أسماء المتغيرات، مثل مساحة متغيرات الإقلاع العامة أو مساحة قواعد بيانات تواقيع Secure Boot. الـ GUID وحده لا يعني شيئًا؛ تبحث هذه الأداة عن اسمه الرمزي في كتالوج يضم آلاف معرفات GUID من EDK2 ومن كبرى الشركات المصنعة للبرامج الثابتة.
الـ device path هو المسار الذي يستخدمه البرنامج الثابت للوصول إلى جهاز أو ملف: من جذر ناقل PCI إلى وحدة التحكم والقرص والقسم ومُحمِّل الإقلاع .efi. تحفظ إدخالات الإقلاع Boot#### مسار device path بصيغة ثنائية؛ وتحوّله الأداة إلى صيغته النصية وتشرح كل عقدة مع حقولها.
أمثلة
8BE4DF61-93CA-11D2-AA0D-00E098032B8CEfiGlobalVariableGuidمساحة أسماء المتغيرات العامة في المواصفة، مثل BootOrder أو Boot#### أو SecureBoot.db-d719b2cb-3d3a-4596-a3bc-dad00e67656fEfiImageSecurityDatabaseGuidاسم ملف من /sys/firmware/efi/efivars: المتغير db الخاص بـ Secure Boot. تستخرج الأداة الـ GUID من الاسم.Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)Fv → FvFile 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 = FullShellإدخال إقلاع لـ UEFI Shell مدمجة في البرنامج الثابت: يُبحث عن الملف بواسطة GUID داخل وحدة تخزين للبرنامج الثابت.01 00 00 00 20 00 55 00 45 00 46 00 49 00 20 00 4F 00 53 00 00 00 02 01 0C 00 D0 41 03 0A 00 00 00 00 01 01 06 00 02 1F 03 12 0A 00 00 00 FF FF 00 00 7F FF 04 00UEFI OS — PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)المحتوى الثنائي لمتغير Boot####: السمات والوصف وdevice path. إذا تم لصق ملف efivarfs، فإن بايتات سمات المتغير الأربعة الموجودة في بدايته يتم التعرف عليها تلقائيًا.حالات الاستخدام
- فهم ما يُقلعه كل إدخال يعرضه efibootmgr -v قبل تغيير ترتيب الإقلاع أو حذف أحد الإدخالات.
- تحديد معرفات GUID التي تظهر في سجل الإقلاع أو في تفريغ للمتغيرات أو في شيفرة EDK2.
- معرفة المتغير الذي يقابله كل ملف في /sys/firmware/efi/efivars، مثل قواعد بيانات تواقيع Secure Boot.
- تحديد القرص والقسم والملف التي يستخدمها إدخال إقلاع توقف عن العمل بعد استنساخ قرص أو استبداله.
- مراجعة وحدات صورة برنامج ثابت مفتوحة باستخدام UEFITool أو أدوات تحليل أخرى.
الأسئلة الشائعة
من أين أحصل على device path لإدخال إقلاع؟
في Linux، يعرض الأمر efibootmgr -v كل إدخال مع device path الخاص به نصيًا، وتحتوي ملفات Boot#### في /sys/firmware/efi/efivars على البيانات الثنائية الكاملة، ويمكن تفريغها باستخدام xxd أو hexdump -C. وفي UEFI Shell، يعرض الأمر bcfg boot dump -v الإدخالات، ويعرض map -v مسارات device path الخاصة بالأقراص.
لماذا لا يظهر GUID في الكتالوج؟
يمكن لأي شركة مصنعة إنشاء معرفات GUID لوحداتها الخاصة دون تسجيلها في أي مكان. يجمع الكتالوج معرفات EDK2 والمعرفات التي حددها المجتمع في البرامج الثابتة لكبرى الشركات المصنعة، لكن ستبقى دائمًا معرفات GUID خاصة بلا اسم. أما معرفات GUID للأقسام التي تظهر في عقد HD فهي فريدة لكل قرص ولا تظهر في الكتالوج أبدًا.
ما صيغ device path التي تقبلها الأداة؟
الصيغة النصية الواردة في المواصفة كما تعرضها UEFI Shell وEDK2، وسطرًا كاملًا من efibootmgr -v، والبيانات الثنائية بالنظام الست عشري، مفصولة بمسافات أو غير مفصولة، وكذلك كمخرجات xxd أو hexdump -C. ويمكن أن تكون البيانات الثنائية الـ device path وحده، أو محتوى متغير Boot####، أو ملف efivarfs مع سماته في بدايته.
هل يُرسل الـ device path إلى أي خادم؟
لا. يتم فك ترميز الـ device path في متصفحك. لا يُستعلم من الخادم إلا عن معرفات GUID للبرنامج الثابت التي تظهر في العقد، لعرض أسمائها؛ أما معرفات GUID للأقسام وبقية البيانات فلا تغادر جهازك.
ماذا تعني البيانات التي يعرضها efibootmgr بعد مسار الملف؟
هي البيانات الاختيارية للإدخال، التي يمررها البرنامج الثابت إلى مُحمِّل الإقلاع. فمدير الإقلاع في Windows، على سبيل المثال، يحفظ فيها مرجعًا إلى مخزن BCD الخاص به. وهي ليست جزءًا من الـ device path؛ وإذا تم لصق البيانات الثنائية للمتغير، تعرضها الأداة بشكل منفصل.