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