في Android 12، تحلّ ميزة bootconfig محل خيارات سطر الأوامر في النواة androidboot.*
المستخدَمة في Android 11 والإصدارات الأقدم. ميزة bootconfig هي آلية لتمرير تفاصيل الإعدادات من الإصدار وبرنامج التشغيل إلى Android 12.
توفّر هذه الميزة طريقة لفصل مَعلمات الإعداد لمساحة المستخدم في Android عن مَعلمات النواة. يؤدي نقل مَعلمات androidboot.*
النواة
الطويلة إلى ملف bootconfig إلى توفير مساحة على سطر الأوامر الخاص بالنواة وإتاحتها
للتوسيع في المستقبل.
يجب أن تتوافق كل من النواة ومساحة المستخدم في Android مع bootconfig
.
- أول إصدار يتضمّن هذه الميزة: Android 12
- أول إصدار من النواة يتوافق مع هذه الميزة: الإصدار 12-5.4.xx من النواة
تنفيذ ميزة bootconfig للأجهزة الجديدة التي يتم طرحها مع إصدار النواة 12-5.10.xx لست بحاجة إلى تنفيذ هذه الخطوة إذا كنت بصدد ترقية الأجهزة.
أمثلة ومصدر
أثناء عرض الأمثلة ورمز المصدر في هذا القسم، يُرجى ملاحظة أنّ تنسيق رمز bootconfig
يختلف قليلاً عن تنسيق سطر الأوامر الخاص بالنواة المستخدَم في الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم.
ومع ذلك، من المهم معرفة الفرق التالي عند استخدام هذه الميزة:
- يجب الفصل بين المَعلمات باستخدام تسلسل الهروب من السطر الجديد
\n
، وليس باستخدام المسافات.
مثال على برنامج الإقلاع
للاطّلاع على مثال على برنامج تحميل التشغيل، راجِع تنفيذ برنامج تحميل التشغيل المرجعي U-boot في Cuttlefish. في ما يلي عمليتان تم إدراجهما في المرجع. تعمل عملية الترقية الأولى على رفع مستوى توافق إصدار عنوان التشغيل إلى أحدث إصدار. في المثال، يؤدي أول تغيير إلى تحديث (أو رفع مستوى) توافق الإصدار إلى الإصدار التالي، أي الإصدار 4. يؤدي الأمر الثاني وظيفتَين، إذ يضيف معالجة bootconfig ويوضّح كيفية إضافة المَعلمات في وقت التشغيل:
مثال على الإنشاء
للاطّلاع على مثال على الإصدار يوضّح تغييرات mkbootimg
اللازمة لإنشاء vendor_boot.img
باستخدام الإصدار 4 من عنوان التمهيد الخاص بالمورّد، يُرجى الاطّلاع على mkbootimg changes for
bootconfig
.
اطّلِع على تغييرات Cuttlefish لإجراء ما يلي:
- استخدِم إصدار عنوان بدء التشغيل الخاص بالمورّد v4 (أو إصدارًا أحدث).
- أضِف bootconfig إلى سطر أوامر النواة وانقل المَعلمات المحدّدة إلى bootconfig.
التنفيذ
على الشركاء إضافة دعم إلى برامج التشغيل، ونقل مَعلمات androidboot.*
وقت الإنشاء من سطر أوامر النواة إلى ملف bootconfig. أفضل طريقة لتنفيذ هذا التغيير هي إجراء ذلك بشكل تدريجي. راجِع قسم التنفيذ والتحقّق التدريجيان للحصول على معلومات حول اتّباع عملية تدريجية.
إذا كانت لديك تغييرات تبحث في الملف /proc/cmdline عن androidboot.*
مَعلمات، وجِّهها إلى الملف /proc/bootconfig
بدلاً من ذلك. يتم ضبط خصائص ro.boot.*
باستخدام قيم bootconfig
الجديدة، لذا لن تحتاج إلى إجراء أي تغييرات على الرمز الذي يستخدم هذه الخصائص.
تغييرات الإصدار
أولاً، عليك رفع مستوى إصدار عنوان التمهيد إلى الإصدار 4:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
أضِف مَعلمة bootconfig
لسطر الأوامر في النواة. يؤدي ذلك إلى جعل النواة تبحث عن قسم bootconfig:
BOARD_KERNEL_CMDLINE += bootconfig
يتم إنشاء مَعلمات bootconfig من المَعلمات الواردة في المتغيّر
BOARD_BOOTCONFIG
، تمامًا كما يتم إنشاء سطر أوامر النواة من
BOARD\_KERNEL\_CMDLINE
.
يمكن نقل أيّ معلَمات androidboot.*
كما هي، على النحو التالي:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
التغييرات في برنامج الإقلاع
يُعدّ برنامج التحميل initramfs
قبل الانتقال إلى النواة. يبحث إعدادات تشغيل النواة عن قسم bootconfig، ويتأكّد من أنّه في نهاية initramfs,
مع التذييل المتوقّع.
يحصل برنامج Bootloader على معلومات التنسيق vendor_boot.img
من عنوان صورة التمهيد الخاصة بالمورّد.
الشكل 1. تخصيص الذاكرة في bootconfig على Android 12
ينشئ برنامج التحميل قسم bootconfig في الذاكرة. يحتوي قسم bootconfig على عمليات تخصيص الذاكرة لما يلي:
- المعلمات
- المقاس 4 B
parameters size
- المقاس 4 B
parameters checksum
- السلسلة السحرية لملف bootconfig الذي يبلغ حجمه 12 بايت (
#BOOTCONFIG\n
)
تأتي المَعلمات من مصدرَين: المَعلمات المعروفة في وقت الإنشاء، والمَعلمات غير المعروفة في وقت الإنشاء. يجب إضافة المَعلمات غير المعروفة.
يتم تجميع المَعلمات المعروفة في وقت الإنشاء في نهاية vendor_boot
الصورة في قسم bootconfig. يتم تخزين حجم القسم (بالبايت) في حقل رأس vendor boot vendor_bootconfig_size
.
لا تكون المَعلمات غير المعروفة في وقت الإنشاء معروفة إلا في وقت التشغيل في برنامج التحميل. يجب إضافة هذه المَعلمات إلى نهاية قسم مَعلمات bootconfig قبل تطبيق مقطع bootconfig اللاحق.
إذا كنت بحاجة إلى إضافة أي مَعلمات بعد تطبيق مقطع bootconfig الدعائي، عليك الكتابة فوق المقطع الدعائي وإعادة تطبيقه.
التنفيذ والتحقّق بشكل تدريجي
نفِّذ ميزة bootconfig بشكل تدريجي باتّباع العملية الموضّحة في هذا القسم. اترك مَعلمات cmdline الخاصة بالنواة بدون تغيير أثناء إضافة مَعلمات bootconfig.
في ما يلي خطوات التنفيذ التدريجي مع التحقّق من الصحة:
- أجرِ تغييرات على مُحمِّل بدء التشغيل والإصدار، ثم اتّبِع الخطوات التالية:
- استخدِم المتغيّر
BOARD_BOOTCONFIG
لإضافة مَعلمة bootconfig جديدة. - يجب إبقاء مَعلمات cmdline لنواة النظام كما هي، حتى يتمكّن الجهاز من مواصلة التشغيل بشكل صحيح. ويسهّل ذلك إلى حد كبير عملية تصحيح الأخطاء والتحقّق من الصحة.
- استخدِم المتغيّر
- تحقَّق من عملك من خلال مراجعة محتوى
/proc/bootconfig
. تأكَّد من ظهور المَعلمة التي تمت إضافتها حديثًا بعد تشغيل الجهاز. - انقل مَعلمات
androidboot.*
من سطر أوامر النواة إلى bootconfig، وذلك باستخدام المتغيّرBOARD_BOOTCONFIG
وبرنامج التحميل. - تأكَّد من أنّ كل مَعلمة من المعلمات متوفّرة في
/proc/bootconfig
وليست متوفّرة في/proc/cmdline
. إذا كان بإمكانك إثبات ذلك، يعني هذا أنّ عملية التنفيذ تمت بنجاح.
اعتبارات الترقية والرجوع إلى إصدار سابق من خلال OTA
عند إدارة عمليات الترقية والتخفيض عبر الأثير بين إصدارات مختلفة من Android أو إصدارات مختلفة من النواة، يجب توخّي الحذر.
Android 12 هو الإصدار الأول الذي يتوافق مع bootconfig. في حال الرجوع إلى أي إصدار أقدم من ذلك، يجب استخدام مَعلمات سطر الأوامر لنواة النظام بدلاً من bootconfig.
تتوافق إصدارات النواة من 12 إلى 5.4 والإصدارات الأحدث مع bootconfig. في حال الرجوع إلى أي إصدار أقدم من ذلك(بما في ذلك 11-5.4)، يجب استخدام مَعلمات سطر الأوامر لنواة النظام.
يمكن للمستخدمين الذين يترقّون من الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم إلى الإصدار 12 والإصدارات الأحدث مواصلة استخدام مَعلمات سطر الأوامر في النواة. وينطبق الأمر نفسه على ترقية إصدارات النواة.
تحديد المشاكل وحلّها
عند تنفيذ خطوة التحقّق، إذا لم تظهر لك المَعلمات المتوقّعة في /proc/bootconfig
، راجِع سجلّات النواة في logcat
. يتوفّر دائمًا إدخال سجلّ
لـ bootconfig إذا كانت النواة تتيح ذلك.
مثال على ناتج السجلّ
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
إذا ظهر سجلّ أخطاء، يعني ذلك أنّه حدثت مشكلة أثناء تحميل ملف bootconfig. للاطّلاع على أنواع الأخطاء المختلفة، يمكنك عرض init/main.c.