Fastboot هو اسم وحدة ووضع مشغّل الإقلاع. يتيح نظام Android 10 والإصدارات الأحدث إنشاء أقسام قابلة للتغيير من خلال إعادة تحديد موقع تنفيذ Fastboot من محمل الإقلاع إلى مساحة المستخدم. تتيح عملية إعادة التثبيت هذه نقل رمز التفليش إلى موقع مألوف قابل للصيانة والاختبار، مع تضمين الأجزاء الخاصة بالمورّد من Fastboot فقط التي تنفذها )"HAL" (Hardware Abstraction Layer). بالإضافة إلى ذلك، يتوافق Android 12 والإصدارات الأحدث مع وامض RAMD من خلال أمر Fastboot الإضافي.
دمج وضعَي Fastboot وRecovery
بما أنّ وضعَي التشغيل "التشغيل السريع" و"وضع الاسترداد" في مساحة المستخدم متشابهان، يمكنك دمجهما في ملف ثنائي أو مشاركة واحدة. ويقدّم ذلك مزايا مثل استخدام مساحة أقل، واستخدام أقسام أقل بشكل عام، ومشاركة بوت التشغيل السريع ووضع الاسترداد لنظام التشغيل النواة والمكتبات.
Fastbootd هو اسم البرنامج الخفي لـ userspace والوضع.
لتتوافق مع fastbootd
، يجب أن ينفِّذ مشغِّل الإقلاع أمرًا جديدًا لوحدة التحكّم في عملية الإقلاع
(BCB) من boot-fastboot
. للدخول إلى وضع fastbootd
، يكتب bootloaderboot-fastboot
في حقل الأمر لرسالة BCB ويترك الحقلrecovery
في BCB بدون تغيير (لتفعيل إعادة تشغيل أي مهام تتعذّر إكمالها في وضع الاسترداد). لن يتم إجراء أي تغييرات على الحقول status
وstage
وreserved
أيضًا.
يتم تحميل برنامج الإقلاع وبدء التشغيل في صورة الاسترداد عند ظهور رمز
boot-fastboot
في حقل أمر BCB. بعد ذلك، يُحلِّل Recovery رسالة BCB ويبدِّل إلى وضع fastbootd
.
أوامر ADB
يصف هذا القسم الأمر adb
لدمج fastbootd
. تختلف نتائج الأمر
، وذلك حسب ما إذا كان يتم تنفيذه من خلال النظام أو
من خلال الاسترداد.
الأمر | الوصف |
---|---|
reboot fastboot |
|
أوامر Fastboot
يصف هذا القسم أوامر Fastboot لدمج fastbootd
،
بما في ذلك الأوامر الجديدة لفلاش القسم المنطقي وإدارته. تؤدي بعض
الأوامر إلى نتائج مختلفة، وذلك استنادًا إلى ما إذا تم تنفيذها من خلال بوتloader أو من خلال 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> |
تغيير حجم القسم المنطقي إلى الحجم الجديد بدون تغيير محتوياته لا يمكن تنفيذ هذا الإجراء في حال عدم توفّر مساحة كافية لإجراء تغيير الحجم. |
update-super <partition> |
يدمج التغييرات التي تم إجراؤها على البيانات الوصفية للقسم المميز. إذا لم يكن الدمج ممكنًا
(على سبيل المثال، إذا كان التنسيق على الجهاز هو إصدار غير متوافق)، يفشل هذا الإجراء. تؤدي المَعلمة الاختيارية wipe إلى استبدال metadata (البيانات الوصفية) للجهاز، بدلاً من إجراء عملية دمج. |
flash <partition> [ <filename> ] |
تُستخدَم لكتابة ملف في قسم ذاكرة فلاش. يجب أن يكون الجهاز غير مقفل. |
erase <partition> |
تمحو أحد الأقسام (ليس من المطلوب أن يكون محوًا آمنًا). يجب أن يكون الجهاز في حالة غير مقفل. |
getvar <variable> | all |
تعرِض هذه السمة متغيّرًا لمسؤول التمهيد أو جميع المتغيّرات. إذا لم يكن المتغيّر متوفّرًا، يتم عرض خطأ. |
set_active <slot> |
تُستخدَم لضبط خانة التمهيد A/B المحدّدة على بالنسبة إلى دعم A/B، تكون الخانات عبارة عن مجموعات مكرّرة من الأقسام التي يمكن تشغيلها بشكل مستقل. يتم تسمية الفتحات |
reboot |
إعادة تشغيل الجهاز بشكلٍ طبيعي |
reboot-bootloader (أو reboot bootloader ) |
إعادة تشغيل الجهاز في برنامج الإقلاع |
fastboot fetch vendor_boot <out.img> |
استخدامها في Android 12 والإصدارات الأحدث لتوفير دعم لفلاش ذاكرة التخزين المؤقت للمورّد
تحصل على حجم القسم بالكامل وحجم الجزء. الحصول على بيانات كل جزء،
ثم تجميع البيانات معًا
للاطّلاع على التفاصيل، يُرجى الاطّلاع على |
fastboot flash vendor_boot:default <vendor-ramdisk.img> |
يُستخدم هذا الإصدار في Android 12 والإصدارات الأحدث لإتاحة إعادة تحميل وحدات التخزين المؤقت للأجهزة المصنّعة. هذا هو نوع خاص من الأمر flash. تُنفِّذ دالة صورة
لمعرفة التفاصيل، يُرجى الاطّلاع على |
fastboot flash vendor_boot:<foo> <vendor-ramdisk.img> |
استخدِم هذا الإصدار في Android 12 والإصدارات الأحدث لمنح إمكانية برمجة وحدات التخزين المؤقت للأجهزة المصنّعة. جلب صورة للاطّلاع على التفاصيل، يُرجى الاطّلاع على:
|
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> |
الأمر الذي يحدّده المصنّع الأصلي للجهاز. |
الأقسام الديناميكية
يجب ألا يسمح برنامج الإقلاع بوميض الأقسام الديناميكية أو محوها ويجب أن يعرض رسالة خطأ إذا تمت محاولة إجراء هذه العمليات. بالنسبة إلى الأجهزة التي تم تركيب ميزة القسم الديناميكي فيها لاحقًا، تتيح أداة Fastboot (وبرنامج التمهيد) وضعًا قسريًا لفلاش القسم الديناميكي مباشرةً أثناء تشغيل وضع التمهيد. على سبيل المثال، إذا كان system
قسمًا ديناميكيًا على الجهاز المُعدَّل، يؤدي استخدام الأمر fastboot --force flash system
إلى تفعيل أداة تحميل البرامج التمهيدية
(بدلاً من fastbootd
) لفلاش القسم.
الشحن في وضع عدم الاتصال
إذا كان الجهاز يتيح الشحن في وضع الإيقاف أو يبدأ التشغيل التلقائي في وضع
خاص عند توصيل الطاقة، يجب أن يتجاهل تنفيذ الأمر
fastboot oem off-mode-charge 0
هذه الأوضاع الخاصة، لكي يتم تشغيل الجهاز كما لو ضغط المستخدم على
زر التشغيل.
طبقة تجريد الأجهزة (HAL) للمصنّع الأصلي للجهاز في Fastboot
لاستبدال أداة fastboot لبدء التشغيل بالكامل، يجب أن تعالج أداة fastboot جميع طلبات fastboot الحالية. تأتي العديد من هذه الأوامر من المصنّعين الأصليّين للأجهزة وهي موثّقة، ولكنها تحتاج إلى تنفيذ مخصّص. لم يتم توثيق العديد من الأوامر الخاصة بالمُصنّع الأصلي. للتعامل مع هذه الأوامر، يحدد برنامج Fastboot HAL أوامر المصنّع الأصلي للجهاز المطلوبة. يمكن أيضًا لمصنّعي المعدّات الأصلية تنفيذ أوامرهم الخاصة.
تعريف 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
تأكَّد من تضمين HAL وعنصر التحكم في التشغيل (HAL) في Fastboot (HAL) وHAL (HAL) للصحة كجزء من صورة الاسترداد.
أضِف أي أذونات SEPolicy خاصة بالجهاز مطلوبة من قِبل
fastbootd
. على سبيل المثال، يتطلبfastbootd
إذن الوصول للكتابة إلى قسم خاص بالجهاز لبرمجة هذا القسم. بالإضافة إلى ذلك، قد يتطلّب تنفيذ HAL لميزة fastboot أذونات خاصة بالجهاز.
للتحقّق من صحة ميزة Fastboot في مساحة المستخدم، يمكنك تشغيل مجموعة اختبارات المورّد (VTS).
أقراص RAM لأجهزة Flash
يتيح نظام التشغيل Android 12 والإصدارات الأحدث برمجة ملف ramdisk باستخدام أمر fastboot إضافي يسحب صورة
vendor_boot
الكاملة من الجهاز. يطلب الأمر من أداة التحميل السريع
على الجانب المضيف قراءة عنوان التمهيد الخاص بالمورِّد وإعادة تحميل الصورة وفلاش الصورة الجديدة.
لسحب صورة vendor_boot
الكاملة، تمت إضافة الأمر fetch:vendor_boot
إلى كل من بروتوكول fastboot وتنفيذ fastbootd للبروتوكول
في Android 12. يُرجى العِلم أنّ أداة fastbootd تنفِّذ
هذا الإجراء، ولكن قد لا يفعّله مشغّل الإقلاع نفسه. يمكن لمصنّعي المعدّات الأصلية إضافة الرمز fetch:vendor_boot
إلى تنفيذ بوت لودر للبروتوكول. ومع ذلك، إذا لم يتم التعرّف على الأمر في وضع أداة تحميل التشغيل، لن يكون فلاش وحدات التخزين المؤقت (RAM) الفردية الخاصة بالمورّد في وضع أداة تحميل التشغيل خيارًا متاحًا لدى المورّد.
تغييرات في برنامج الإقلاع
يتم تنفيذ الأمرَين getvar:max-fetch-size
وfetch:name
في
fastbootd
. لتفعيل ميزة فلاش وحدات التخزين المؤقت للنظام الأساسي في أداة التمهيد، يجب
تنفيذ هذين الأمرَين.
تغييرات 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
هذا هو نوع خاص من الأمر flash. يجلب هذا الزر صورة
vendor_boot
، كما لو تم استدعاءfastboot fetch
.- إذا كان تمهيد المورد هو رأس الإصدار 3، سيتم إجراء ما يلي:
- استبدال ذاكرة الوصول العشوائي للمورّد بالصورة المحدّدة
- وميضات صورة
vendor_boot
الجديدة
- إذا كان رأس التمهيد الخاص بالمورّد هو الإصدار
4،
ينفّذ ما يلي:
- استبدال ذاكرة التخزين المؤقت للنظام الأساسي للمورّد بالكامل بالصورة المحدّدة لكي تصبح
الصورة المحدّدة هي الجزء الوحيد من ذاكرة التخزين المؤقت للنظام الأساسي للمورّد في
صورة
vendor_boot
- تُعيد احتساب الحجم والقيمة المرجعية في جدول ذاكرة التخزين المؤقت للنظام الأساسي للمورّد.
- وميضات صورة
vendor_boot
الجديدة
- استبدال ذاكرة التخزين المؤقت للنظام الأساسي للمورّد بالكامل بالصورة المحدّدة لكي تصبح
الصورة المحدّدة هي الجزء الوحيد من ذاكرة التخزين المؤقت للنظام الأساسي للمورّد في
صورة
- إذا كان تمهيد المورد هو رأس الإصدار 3، سيتم إجراء ما يلي:
fastboot flash vendor_boot:foo vendor-ramdisk.img
تُستخدَم لتحميل
vendor_boot image
، كما لو تمّ استدعاءfastboot fetch
.- إذا كان إصدار رأس التمهيد الخاص بالبائع هو 3، يتم عرض خطأ.
إذا كان إصدار عنوان التمهيد الخاص بالمورّد هو 4، يتم تنفيذ ما يلي:
- يعثر على جزء ذاكرة التخزين المؤقت للجهاز المصنّع الذي يحمل الاسم
ramdisk_<var><foo></var>
. في حال عدم العثور على القيمة أو إذا كانت هناك مطابقات متعدّدة، يتم عرض خطأ. - استبدال جزء ذاكرة التخزين المؤقت للنظام الأساسي للمورّد بالصورة المحدّدة
- يعيد حساب كل حجم وإزاحة في جدول ذاكرة التخزين المؤقت للمورد.
- وميضات صورة
vendor_boot
الجديدة
- يعثر على جزء ذاكرة التخزين المؤقت للجهاز المصنّع الذي يحمل الاسم
إذا لم يتم تحديد <foo>، يحاول العثور على
ramdisk_
.
mkbootimg
يتم استخدام الاسم default
لتسمية أجزاء ذاكرة الوصول العشوائي للمورّد في الإصدار 12 من Android والإصدارات الأحدث. على الرغم من أنّ دلالات flash vendor_boot:default
fastboot تظل كما هي، يجب عدم تسمية أجزاء ملف ramdisk باسم
default
.
التغييرات على SELinux
تم إجراء تغيير في
fastbootd.te
لدعم التخلّص من المشاكل التي يواجهها المورّدون.