Fastboot هو اسم وحدة ووضع مشغّل الإقلاع. يتيح نظام Android 10 والإصدارات الأحدث إنشاء أقسام قابلة للتغيير من خلال إعادة تحديد موقع تنفيذ Fastboot من محمل الإقلاع إلى مساحة المستخدم. يتيح هذا إعادة التثبيت نقل رمز التفليش إلى موقع ملف مشترك قابل للصيانة والاختبار مع تضمين الأجزاء الخاصة بالمورّد فقط من fastboot التي تنفذها طبقة HAL. بالإضافة إلى ذلك، يتيح نظام Android 12 والإصدارات الأحدث إعادة تحميل وحدات التخزين المؤقت للذاكرة من خلال أمر fastboot تمت إضافته.
دمج وضعَي Fastboot وRecovery
بما أنّ وضع الاسترداد ووضع التشغيل السريع في مساحة المستخدم متشابهان، يمكنك دمجهما في ملف ثنائي أو قسم واحد. ويقدّم ذلك مزايا مثل استخدام مساحة أقل، واستخدام أقسام أقل بشكل عام، ومشاركة بوت التشغيل السريع ووضع الاسترداد لنظام التشغيل النواة والمكتبات.
Fastbootd هو اسم برنامج تشغيل ووضع في مساحة المستخدم.
لتتوافق مع fastbootd
، يجب أن ينفِّذ مشغِّل الإقلاع أمرًا جديدًا لوحدة التحكّم في بدء التشغيل
(BCB) من boot-fastboot
. للدخول إلى وضع fastbootd
، يكتب bootloader
boot-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> |
تغيير حجم القسم المنطقي إلى الحجم الجديد بدون تغيير محتوياته لا يمكن تنفيذ هذا الإجراء في حال عدم توفّر مساحة كافية لإجراء تغيير الحجم. |
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> |
استخدامها في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث لتوفير دعم لفلاش ذاكرة التخزين المؤقت للمورّد
تحصل على حجم القسم بالكامل وحجم الجزء. الحصول على بيانات كل جزء،
ثم تجميع البيانات معًا
للاطّلاع على التفاصيل، يُرجى الاطّلاع على |
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
هذه الأوضاع الخاصة، لكي يتم تشغيل الجهاز كما لو ضغط المستخدم
على زر التشغيل.
Fastboot OEM HAL
لاستبدال أداة fastboot الخاصة ببرنامج التمهيد بالكامل، يجب أن تعالج أداة fastboot جميع طلبات fastboot الحالية. تأتي العديد من هذه الأوامر من المصنّعين الأصليّين للأجهزة وهي موثّقة، ولكنها تحتاج إلى تنفيذ مخصّص. لم يتم توثيق العديد من الأوامر الخاصة بمصنّعي المعدّات الأصليين. لمعالجة هذه الأوامر، يحدِّد Fastboot HAL أوامر OEM المطلوبة. يمكن أيضًا لمصنّعي المعدّات الأصلية تنفيذ أوامرهم الخاصة.
تعريف HAL لميزة fastboot هو على النحو التالي:
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 الخاصة بـ fastboot وboot control وhealth مُجمَّعة كجزء من صورة الاسترداد.
أضِف أي أذونات SEPolicy خاصة بالجهاز مطلوبة من قِبل
fastbootd
. على سبيل المثال، يتطلبfastbootd
إذن الوصول للكتابة إلى قسم خاص بالجهاز لبرمجة هذا القسم. بالإضافة إلى ذلك، قد يتطلب تنفيذ HAL لميزة fastboot أيضًا أذونات خاصة بالجهاز.
للتحقّق من صحة ميزة Fastboot في مساحة المستخدم، يمكنك تشغيل مجموعة اختبارات المورّد (VTS).
أقراص RAM لأجهزة فلاش
يتيح نظام التشغيل 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
محجوز لتسمية أجزاء ذاكرة التخزين المؤقت للنظام الأساسي للمورّد في
Android 12 والإصدارات الأحدث. على الرغم من أنّ دلالات flash vendor_boot:default
fastboot تظل كما هي، يجب عدم تسمية أجزاء ملف ramdisk باسم
default
.
تغييرات SELinux
تم إجراء تغيير في
fastbootd.te
للسماح بفلاش وحدات تخزين ذاكرة الوصول العشوائي (RAM) الخاصة بالمورّدين.