Fastboot هو اسم وحدة نمطية ووضع لبرنامج الإقلاع. يتوافق الإصدار 10 من نظام التشغيل Android والإصدارات الأحدث مع الأقسام القابلة لتغيير الحجم من خلال نقل تنفيذ fastboot من برنامج الإقلاع إلى مساحة المستخدم. يتيح هذا النقل نقل رمز الفلاش إلى موقع شائع قابل للصيانة والاختبار، مع تنفيذ الأجزاء الخاصة بالمورّد فقط من fastboot من خلال طبقة تجريد الأجهزة (HAL). بالإضافة إلى ذلك، يتوافق الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث مع فلاش ramdisks من خلال أمر fastboot إضافي.
توحيد fastboot والاسترداد
نظرًا لتشابه fastboot وميزة الاسترداد في مساحة المستخدم، يمكنك دمجهما في قسم أو ملف ثنائي واحد. يوفر ذلك مزايا، مثل استخدام مساحة أقل، وتقليل عدد الأقسام بشكل عام، ومشاركة fastboot وميزة الاسترداد لنواة النظام والمكتبات.
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 المحدّدة على بالنسبة إلى دعم A/B، تكون الفتحات مجموعات مكرّرة من الأقسام التي يمكن تشغيلها بشكل مستقل. تُسمّى الفتحات |
reboot |
إعادة تشغيل الجهاز بشكل عادي |
reboot-bootloader (أو reboot bootloader) |
إعادة تشغيل الجهاز في برنامج الإقلاع |
fastboot fetch vendor_boot <out.img> |
يُستخدم في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث لـ إتاحة فلاش vendor ramdisks.
يحصل على حجم القسم بالكامل وحجم الجزء. يحصل على بيانات كل جزء،
ثم يجمع البيانات معًا في
للحصول على التفاصيل، يُرجى الاطّلاع على |
fastboot flash vendor_boot:default <vendor-ramdisk.img> |
يُستخدم في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث لإتاحة فلاش vendor ramdisks. هذا هو نوع خاص من أمر الفلاش. ينفّذ وظيفة صورة
للحصول على التفاصيل، يُرجى الاطّلاع على
|
fastboot flash vendor_boot:<foo> <vendor-ramdisk.img> |
يُستخدم في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث لإتاحة فلاش vendor ramdisks. يحصل على صورة للحصول على التفاصيل، يُرجى الاطّلاع على
|
Fastboot وبرنامج الإقلاع
يُجري برنامج الإقلاع فلاش لأقسام bootloader وradio وboot/recovery، وبعد ذلك يتم تشغيل الجهاز في fastboot (مساحة المستخدم) ويُجري فلاش لجميع الأقسام الأخرى. يجب أن يتوافق برنامج الإقلاع مع الأوامر التالية.
| الأمر | الوصف |
|---|---|
download |
تنزيل الصورة التي سيتم تثبيت ذاكرة ROM عليها. |
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 (وبرنامج الإقلاع) وضعًا إجباريًا لتثبيت ذاكرة ROM لقسم ديناميكي مباشرةً أثناء وضع برنامج الإقلاع. على
سبيل المثال، إذا كان system قسمًا ديناميكيًا على الجهاز الذي تم تعديله،
فإنّ استخدام الأمر fastboot --force flash system يتيح لبرنامج الإقلاع
(بدلاً من fastbootd) فلاش القسم.
الشحن في وضع إيقاف التشغيل
إذا كان الجهاز يتيح الشحن في وضع إيقاف التشغيل أو يتم تشغيله تلقائيًا في وضع خاص عند توصيل الطاقة، يجب أن يتجاوز تنفيذ الأمر fastboot oem off-mode-charge 0 هذه الأوضاع الخاصة، بحيث يتم تشغيل الجهاز كما لو أنّ المستخدم قد ضغط على زر التشغيل.
طبقة تجريد الأجهزة (HAL) الخاصة بالشركة المصنّعة الأصلية في Fastboot
لاستبدال fastboot في برنامج الإقلاع بالكامل، يجب أن يتعامل fastboot مع جميع أوامر fastboot الحالية. العديد من هذه الأوامر من الشركات المصنّعة الأصلية وهي موثّقة ولكنها تتطلب تنفيذًا مخصّصًا. لا يتم توثيق العديد من الأوامر الخاصة بالشركة المصنّعة الأصلية. للتعامل مع هذه الأوامر، تحدّد طبقة تجريد الأجهزة (HAL) الخاصة بـ fastboot أوامر الشركة المصنّعة الأصلية المطلوبة. يمكن للشركات المصنّعة الأصلية أيضًا تنفيذ أوامرها الخاصة.
في ما يلي تعريف طبقة تجريد الأجهزة (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 وطبقة تجريد الأجهزة (HAL) الخاصة بالتحكّم في التشغيل وطبقة تجريد الأجهزة (HAL) الخاصة بالسلامة كجزء من صورة استرداد الإعدادات الأصلية.
أضِف أي أذونات SEPolicy خاصة بالجهاز يتطلبها
fastbootd. على سبيل المثال، يتطلبfastbootdإذن الكتابة إلى قسم خاص بالجهاز لتثبيت ذاكرة ROM في هذا القسم. بالإضافة إلى ذلك، قد يتطلب تنفيذ طبقة تجريد الأجهزة (HAL) الخاصة بـ fastboot أيضًا أذونات خاصة بالجهاز.
للتحقّق من fastboot في مساحة المستخدم، شغِّل حزمة اختبار المورّد (VTS).
فلاش vendor ramdisks
يتيح الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث إمكانية فلاش ramdisks باستخدام أمر fastboot إضافي يحصل على صورة vendor_boot الكاملة من الجهاز. يطلب الأمر من أداة Fastboot على جانب المضيف قراءة رأس تشغيل المورّد وإعادة إنشاء الصورة وتثبيت ذاكرة ROM للصورة الجديدة.
للحصول على صورة vendor_boot الكاملة، تمت إضافة الأمر fetch:vendor_boot إلى كلّ من بروتوكول fastboot وتنفيذ fastbootd للبروتوكول في الإصدار 12 من نظام التشغيل Android. يُرجى العِلم أنّ fastbootd ينفّذ هذا الأمر، ولكن قد لا ينفّذه برنامج الإقلاع نفسه. يمكن للشركات المصنّعة الأصلية إضافة الأمر fetch:vendor_boot إلى تنفيذ بروتوكول برنامج الإقلاع. ومع ذلك، إذا لم يتم التعرّف على الأمر في وضع برنامج الإقلاع، فإنّ فلاش vendor ramdisks الفردية في وضع برنامج الإقلاع ليس خيارًا معتمدًا من قِبل المورّد.
تغييرات برنامج الإقلاع
يتم تنفيذ الأمرَين getvar:max-fetch-size وfetch:name في fastbootd. لإتاحة فلاش vendor ramdisks في برنامج الإقلاع، يجب تنفيذ هذَين الأمرَين.
تغييرات 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 commands.
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، يتم تنفيذ ما يلي:
- استبدال vendor ramdisk بالصورة المحدّدة
- فلاش صورة
vendor_bootالجديدة
- إذا كان رأس تشغيل المورّد هو الإصدار
4،
يتم تنفيذ ما يلي:
- استبدال vendor ramdisk بالكامل بالصورة المحدّدة بحيث تصبح الصورة المحدّدة هي جزء vendor ramdisk الوحيد في صورة
vendor_boot - إعادة حساب الحجم والإزاحة في جدول vendor ramdisk
- فلاش صورة
vendor_bootالجديدة
- استبدال vendor ramdisk بالكامل بالصورة المحدّدة بحيث تصبح الصورة المحدّدة هي جزء vendor ramdisk الوحيد في صورة
- إذا كان رأس تشغيل المورّد هو الإصدار 3، يتم تنفيذ ما يلي:
fastboot flash vendor_boot:foo vendor-ramdisk.imgيحصل على
vendor_boot image، كما لو تم استدعاءfastboot fetch.- إذا كان رأس تشغيل المورّد هو الإصدار 3، يتم عرض خطأ.
إذا كان رأس تشغيل المورّد هو الإصدار 4، يتم تنفيذ ما يلي:
- العثور على جزء vendor ramdisk بالاسم
ramdisk_<var><foo></var>إذا لم يتم العثور عليه أو إذا كانت هناك عدة نتائج مطابقة، يتم عرض خطأ. - استبدال جزء vendor ramdisk بالصورة المحدّدة
- إعادة حساب كل حجم وإزاحة في جدول vendor ramdisk
- فلاش صورة
vendor_bootالجديدة
- العثور على جزء vendor ramdisk بالاسم
إذا لم يتم تحديد <foo>، تتم محاولة العثور على
ramdisk_.
mkbootimg
الاسم default محجوز لتسمية أجزاء vendor ramdisk في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث. في حين تظل flash vendor_boot:default دلالات Fastboot كما هي، يجب ألا تسمّي أجزاء ramdisk باسم default.
تغييرات SELinux
تم إجراء تغيير في
fastbootd.te
لإتاحة فلاش vendor ramdisks.