Fastboot هو اسم وحدة وبرنامج تحميل. يتيح نظام التشغيل Android 10 والإصدارات الأحدث تغيير حجم الأقسام من خلال نقل عملية تنفيذ fastboot من برنامج التشغيل إلى مساحة المستخدم. تتيح عملية النقل هذه نقل رمز التحديث إلى موقع جغرافي مشترك يمكن صيانته واختباره، مع تنفيذ الأجزاء الخاصة بالمورّد فقط من fastboot من خلال طبقة تجريد الأجهزة (HAL). بالإضافة إلى ذلك، يتيح نظام التشغيل Android 12 والإصدارات الأحدث إمكانية تثبيت أقراص ramdisk من خلال إضافة أمر fastboot.
توحيد وضعَي Fastboot وRecovery
بما أنّ عملية التشغيل السريع واسترداد البيانات في مساحة المستخدم متشابهتان، يمكنك دمجهما في قسم واحد أو ملف ثنائي واحد. ويوفّر ذلك مزايا، مثل استخدام مساحة أقل، وتقليل عدد الأقسام بشكل عام، وإمكانية مشاركة fastboot وrecovery للنواة والمكتبات.
Fastbootd هو اسم وضع وبرنامج خفي في مساحة المستخدم.
لإتاحة fastbootd
، يجب أن ينفّذ برنامج التحميل أمرًا جديدًا لكتلة التحكّم في التشغيل (BCB) من boot-fastboot
. للدخول إلى وضع fastbootd
، يكتب برنامج التشغيل boot-fastboot
في حقل الأوامر الخاص برسالة BCB ويترك حقل recovery
الخاص برسالة BCB بدون تغيير (لإتاحة إعادة تشغيل أي مهام استرداد تمت مقاطعتها). لن يتم إجراء أي تغييرات على الحقول status
وstage
وreserved
أيضًا.
يحمّل برنامج التشغيل ويتم تشغيله في صورة الاسترداد عند ظهور
boot-fastboot
في حقل أمر BCB. بعد ذلك، يحلّل وضع الاسترداد رسالة BCB
وينتقل إلى وضع fastbootd
.
أوامر ADB
يوضّح هذا القسم الأمر adb
لدمج fastbootd
. تختلف نتائج الأمر
استنادًا إلى ما إذا كان يتم تنفيذه من خلال النظام أو
من خلال وضع الاسترداد.
الأمر | الوصف |
---|---|
reboot fastboot |
|
أوامر Fastboot
يوضّح هذا القسم أوامر fastboot لدمج fastbootd
،
بما في ذلك الأوامر الجديدة لتثبيت وإدارة الأقسام المنطقية. تؤدي بعض الأوامر إلى نتائج مختلفة، وذلك حسب ما إذا كان قد تم تنفيذها بواسطة برنامج التشغيل أو بواسطة fastbootd
.
الأمر | الوصف |
---|---|
reboot recovery |
|
reboot fastboot |
إعادة التشغيل إلى fastbootd |
getvar is-userspace |
|
getvar is-logical:<partition> |
تعرض الدالة yes إذا كان القسم المحدّد قسمًا منطقيًا،
no بخلاف ذلك.
تتيح الأقسام المنطقية استخدام جميع الأوامر المدرَجة أدناه. |
getvar super-partition-name |
تعرِض هذه الدالة اسم القسم الرئيسي. يتضمّن الاسم لاحقة الفتحة الحالية إذا كان القسم الفائق هو قسم A/B (وهو ليس كذلك عادةً). |
create-logical-partition <partition> <size> |
تنشئ هذه السمة قسمًا منطقيًا بالاسم والحجم المحدّدَين. يجب ألا يكون الاسم مستخدَمًا من قبل كقسم منطقي. |
delete-logical-partition <partition> |
يحذف هذا الإجراء القسم المنطقي المحدّد (ما يؤدي إلى محو القسم). |
resize-logical-partition <partition> <size> |
تغيير حجم القسم المنطقي إلى الحجم الجديد بدون تغيير محتواه يتعذّر تنفيذ العملية إذا لم تتوفّر مساحة كافية لتغيير الحجم. |
flash <partition> [ <filename> ] |
تكتب هذه السمة ملفًا في قسم الذاكرة المؤقتة. يجب أن يكون الجهاز في حالة فتح القفل. |
erase <partition> |
محو قسم (ليس من الضروري أن يكون المحو آمنًا) يجب أن يكون الجهاز في حالة غير مقفلة. |
getvar <variable> | all |
تعرض هذه السمة متغير برنامج تحميل الإقلاع أو جميع المتغيرات. إذا لم يكن المتغير موجودًا، سيتم عرض رسالة خطأ. |
set_active <slot> |
يضبط هذا الأمر فتحة التشغيل المحدّدة لاختبار A/B على في نظام التشغيل Android، تكون الفتحات عبارة عن مجموعات مكرّرة من الأقسام التي يمكن تشغيلها بشكل مستقل. تُسمّى الفتحات |
reboot |
تعيد هذه الطريقة تشغيل الجهاز بشكل طبيعي. |
reboot-bootloader (أو reboot bootloader ) |
تعيد تشغيل الجهاز في برنامج الإقلاع. |
fastboot fetch vendor_boot <out.img> |
يُستخدَم في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث لإتاحة تثبيت ملفات ramdisk خاصة بالمورّد.
تعرض هذه السمة حجم القسم بالكامل وحجم الجزء. يحصل على البيانات لكل جزء،
ثم يجمع البيانات معًا
للحصول على التفاصيل، يُرجى الاطّلاع على |
fastboot flash vendor_boot:default <vendor-ramdisk.img> |
يُستخدم في Android 12 والإصدارات الأحدث لتوفير إمكانية تنزيل ملفات ramdisk خاصة بالمورّد. هذا هو نوع خاص من أمر الفلاش. تنفّذ هذه السمة
للحصول على التفاصيل، يُرجى الاطّلاع على
|
fastboot flash vendor_boot:<foo> <vendor-ramdisk.img> |
يُستخدم في Android 12 والإصدارات الأحدث
لإتاحة إمكانية تنزيل ملفات ramdisk خاصة بالمورِّد. يجلب صورة لمزيد من التفاصيل، يُرجى الاطّلاع على
|
Fastboot وبرنامج الإقلاع
يُحمّل برنامج الإقلاع الأقسام bootloader
وradio
وboot/recovery
، ثم يُعيد تشغيل الجهاز في وضع fastboot (مساحة المستخدم) ويُحمّل جميع الأقسام الأخرى. يجب أن يتيح برنامج الإقلاع تنفيذ الأوامر التالية.
الأمر | الوصف |
---|---|
download |
تنزيل الصورة إلى الفلاش |
flash recovery <image>/ flash boot <image>/ flash
bootloader <image>/ |
يتم تثبيت قسم recovery/boot وبرنامج الإقلاع. |
reboot |
تعيد هذه السياسة تشغيل الجهاز. |
reboot fastboot |
إعادة التشغيل للدخول في وضع Fastboot |
reboot recovery |
إعادة التشغيل إلى وضع الاسترداد |
getvar |
تعرض هذه السمة متغير برنامج الإقلاع المطلوب لتثبيت صورة الاسترداد أو الإقلاع (على سبيل المثال، current-slot وmax-download-size ). |
oem <command> |
أمر يحدّده المصنّع الأصلي للجهاز |
الأقسام الديناميكية
يجب ألا يسمح برنامج Bootloader بتثبيت أو محو الأقسام الديناميكية، ويجب أن يعرض رسالة خطأ في حال محاولة تنفيذ هذه العمليات. بالنسبة إلى الأجهزة التي تم تعديلها لتتضمّن أقسامًا ديناميكية، تتيح أداة fastboot (وبرنامج الإقلاع) وضع فرض لتمرير قسم ديناميكي مباشرةً أثناء وضع برنامج الإقلاع. على سبيل المثال، إذا كان system
قسمًا ديناميكيًا على الجهاز الذي تم تعديله، سيؤدي استخدام الأمر fastboot --force flash system
إلى تمكين برنامج التشغيل (بدلاً من fastbootd
) من نقل بيانات القسم.
الشحن في وضع إيقاف التشغيل
إذا كان الجهاز يتيح الشحن في وضع إيقاف التشغيل أو إعادة التشغيل تلقائيًا في وضع خاص عند توصيل الطاقة، يجب أن يتجاوز تنفيذ الأمر fastboot oem off-mode-charge 0
هذه الأوضاع الخاصة، وذلك لكي يتم تشغيل الجهاز كما لو أنّ المستخدم ضغط على زر التشغيل.
طبقة تجريد الأجهزة (HAL) الخاصة بـ Fastboot OEM
لاستبدال أداة fastboot الخاصة ببرنامج bootloader بالكامل، يجب أن تتعامل أداة fastboot مع جميع أوامر fastboot الحالية. العديد من هذه الأوامر مصدرها الشركات المصنّعة للأجهزة الأصلية وهي موثّقة ولكنها تتطلّب تنفيذًا مخصّصًا. لا تتوفّر مستندات للعديد من الأوامر الخاصة بمصنّعين أصليين للأجهزة. للتعامل مع هذه الأوامر، يحدّد Fastboot HAL أوامر OEM المطلوبة. يمكن لمصنّعي المعدات الأصلية أيضًا تنفيذ أوامرهم الخاصة.
في ما يلي تعريف fastboot HAL:
import IFastbootLogger;
/**
* IFastboot interface implements vendor specific fastboot commands.
*/
interface IFastboot {
/**
* Returns a bool indicating whether the bootloader is enforcing verified
* boot.
*
* @return verifiedBootState True if the bootloader is enforcing verified
* boot and False otherwise.
*/
isVerifiedBootEnabled() generates (bool verifiedBootState);
/**
* Returns a bool indicating the off-mode-charge setting. If off-mode
* charging is enabled, the device autoboots into a special mode when
* power is applied.
*
* @return offModeChargeState True if the setting is enabled and False if
* not.
*/
isOffModeChargeEnabled() generates (bool offModeChargeState);
/**
* Returns the minimum battery voltage required for flashing in mV.
*
* @return batteryVoltage Minimum battery voltage (in mV) required for
* flashing to be successful.
*/
getBatteryVoltageFlashingThreshold() generates (int32_t batteryVoltage);
/**
* Returns the file system type of the partition. This is only required for
* physical partitions that need to be wiped and reformatted.
*
* @return type Can be ext4, f2fs or raw.
* @return result SUCCESS if the operation is successful,
* FAILURE_UNKNOWN if the partition is invalid or does not require
* reformatting.
*/
getPartitionType(string partitionName) generates (FileSystemType type, Result result);
/**
* Executes a fastboot OEM command.
*
* @param oemCmd The oem command that is passed to the fastboot HAL.
* @response result Returns the status SUCCESS if the operation is
* successful,
* INVALID_ARGUMENT for bad arguments,
* FAILURE_UNKNOWN for an invalid/unsupported command.
*/
doOemCommand(string oemCmd) generates (Result result);
};
تفعيل fastbootd
لتفعيل fastbootd
على جهاز، اتّبِع الخطوات التالية:
إضافة
fastbootd
إلىPRODUCT_PACKAGES
فيdevice.mk
:PRODUCT_PACKAGES += fastbootd
تأكَّد من تضمين fastboot HAL وboot control HAL وhealth HAL في حزمة صورة الاسترداد.
أضِف أي أذونات SEPolicy خاصة بالجهاز يتطلبها
fastbootd
. على سبيل المثال، يتطلّبfastbootd
إذن الكتابة في قسم خاص بالجهاز لتثبيت هذا القسم. بالإضافة إلى ذلك، قد يتطلّب تنفيذ fastboot HAL أيضًا أذونات خاصة بالجهاز.
للتحقّق من صحة fastboot في مساحة المستخدم، شغِّل مجموعة اختبارات المورّد (VTS).
Flash vendor ramdisks
يتيح الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث إمكانية
تثبيت ramdisk باستخدام أمر fastboot إضافي يجلب صورة
vendor_boot
كاملة من الجهاز. يطلب الأمر من أداة fastboot على الجهاز المضيف قراءة عنوان قسم vendor_boot وإعادة إنشاء الصورة وتثبيت الصورة الجديدة.
لاسترداد صورة vendor_boot
كاملة، تمت إضافة الأمر fetch:vendor_boot
إلى كل من بروتوكول fastboot وتنفيذ بروتوكول fastbootd
في نظام التشغيل Android 12. يُرجى العِلم أنّ fastbootd يتضمّن هذه الميزة، ولكن قد لا يتضمّنها برنامج التشغيل نفسه. يمكن لمصنّعي المعدات الأصلية إضافة الأمر fetch:vendor_boot
إلى تنفيذ برنامج التشغيل الخاص بهم للبروتوكول. ومع ذلك، إذا لم يتم التعرّف على الأمر في وضع برنامج التشغيل، لن يكون خيار تثبيت حزم ramdisk الفردية الخاصة بالمورّد في وضع برنامج التشغيل خيارًا متاحًا من المورّد.
التغييرات في برنامج الإقلاع
يتم تنفيذ الأمرَين getvar:max-fetch-size
وfetch:name
في fastbootd
. لتوفير إمكانية وميض ramdisk البائع في برنامج التشغيل، يجب تنفيذ هذين الأمرين.
تغييرات Fastbootd
getvar:max-fetch-size
مشابهة لـ max-download-size
. تحدّد هذه السمة الحد الأقصى للحجم الذي يمكن للجهاز إرساله في ردّ DATA واحد. يجب ألا يجلب برنامج التشغيل حجمًا أكبر من هذه القيمة.
تُجري fetch:name[:offset[:size]]
سلسلة من عمليات التحقّق على الجهاز. إذا كانت كل الشروط التالية صحيحة، سيعرض الأمر fetch:name[:offset[:size]]
البيانات:
- يعمل الجهاز بإصدار قابل لتصحيح الأخطاء.
- الجهاز غير مقفل (حالة التشغيل باللون البرتقالي).
- اسم القسم الذي تم استرجاعه هو
vendor_boot
. - تقع قيمة
size
ضمن النطاق 0 <size
<=max-fetch-size
.
عند التحقّق من صحة هذه القيم، تعرض الدالة fetch:name[:offset[:size]]
حجم القسم
والإزاحة.
ملاحظات:
fetch:name
تعادلfetch:name:0
، التي تعادلfetch:name:0:partition_size
.fetch:name:offset
تعادلfetch:name:offset:(partition_size - offset)
وبالتالي، fetch:name[:offset[:size]]
=
fetch:name:offset:(partition_size - offset)
.
عندما لا يتم تحديد offset
أو partition_size
(أو كليهما)، يتم استخدام القيم التلقائية، وهي 0 بالنسبة إلى offset
، والقيمة المحسوبة لـ partition_size - offset
بالنسبة إلى size
.
- تم تحديد الإزاحة، ولم يتم تحديد الحجم:
size = partition_size - offset
- لم يتم تحديد أي منهما: يتم استخدام القيم التلقائية لكليهما،
size = partition_size
- 0.
على سبيل المثال، يجلب fetch:foo
قسم foo
بأكمله عند الإزاحة 0.
تغييرات السائق
تمت إضافة أوامر إلى أداة fastboot لتنفيذ تغييرات في برامج التشغيل. ويرتبط كل منها بالتعريف الكامل الخاص به في جدول أوامر Fastboot.
fastboot fetch vendor_boot out.img
- يتم استدعاء
getvar max-fetch-size
لتحديد حجم الجزء. - استدعاءات
getvar partition-size:vendor_boot[_a]
لتحديد حجم القسم بأكمله - عدد مرات طلب
fastboot fetch vendor_boot[_a]:offset:size
لكل جزء (حجم الجزء أكبر من حجمvendor_boot
، لذا لا يكون هناك عادةً سوى جزء واحد). - تجميع البيانات معًا، إلى
out.img
- يتم استدعاء
fastboot flash vendor_boot:default vendor-ramdisk.img
هذا هو نوع خاص من أمر الفلاش. يتم جلب
vendor_boot
الصورة، كما لو تم استدعاءfastboot fetch
.- إذا كان برنامج التشغيل الخاص بالمورّد هو الإصدار 3 من العنوان،
سيتم تنفيذ ما يلي:
- يستبدل هذا الخيار ramdisk المورّد بالصورة المحدّدة.
- يومض صورة
vendor_boot
الجديدة.
- إذا كان عنوان بدء التشغيل الخاص بالمورّد هو الإصدار 4،
سيتم تنفيذ ما يلي:
- يستبدل ملف ramdisk الخاص بالمورّد بالكامل بالصورة المحدّدة، ليصبح هذا الملف هو جزء ملف ramdisk الوحيد الخاص بالمورّد في صورة
vendor_boot
. - تعيد هذه الدالة احتساب الحجم والإزاحة في جدول ramdisk الخاص بالمورّد.
- يومض صورة
vendor_boot
الجديدة.
- يستبدل ملف ramdisk الخاص بالمورّد بالكامل بالصورة المحدّدة، ليصبح هذا الملف هو جزء ملف ramdisk الوحيد الخاص بالمورّد في صورة
- إذا كان برنامج التشغيل الخاص بالمورّد هو الإصدار 3 من العنوان،
سيتم تنفيذ ما يلي:
fastboot flash vendor_boot:foo vendor-ramdisk.img
يجلب
vendor_boot image
، كما لو تم استدعاءfastboot fetch
.- إذا كان عنوان برنامج التشغيل الخاص بالبائع هو الإصدار 3، سيتم عرض خطأ.
إذا كان عنوان vendor boot هو الإصدار 4، سيتم تنفيذ ما يلي:
- تعرض هذه السمة جزء ramdisk الخاص بالمورّد الذي يحمل الاسم
ramdisk_<var><foo></var>
. إذا لم يتم العثور على أي تطابق أو إذا كانت هناك عدة نتائج مطابقة، سيتم عرض رسالة خطأ. - يستبدل جزء ramdisk الخاص بالمورّد بالصورة المحدّدة.
- إعادة احتساب كل حجم وإزاحة في جدول ramdisk الخاص بالمورّد
- يومض صورة
vendor_boot
الجديدة.
- تعرض هذه السمة جزء ramdisk الخاص بالمورّد الذي يحمل الاسم
إذا لم يتم تحديد <foo>، سيحاول العثور على
ramdisk_
.
mkbootimg
الاسم default
محجوز لتسمية أجزاء مساحة التخزين المؤقت للذاكرة العشوائية الخاصة بالمورّد في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث. على الرغم من أنّ دلالات fastboot flash vendor_boot:default
تظل كما هي، يجب عدم تسمية أجزاء ramdisk باسم
default
.
تغييرات SELinux
تم إجراء تغيير في
fastbootd.te
للسماح بتثبيت ramdisk خاص بالمورّد.