راهاندازی سریع نام حالت و واحد bootloader است. Android 10 و نسخههای بالاتر با انتقال پیادهسازی fastboot از bootloader به فضای کاربر از پارتیشنهای تغییرپذیر پشتیبانی میکند. این جابهجایی امکان انتقال کد فلش کردن را به یک مکان مشترک قابلنگهداری و آزمایشپذیر فراهم میکند، درحالیکه فقط بخشهای خاص فروشنده fastboot توسط یک لایه انتزاعی سختافزار (HAL) پیادهسازی میشود. علاوهبراین، Android 12 و نسخههای بالاتر از فلش کردن دیسکهای حافظه دسترسی تصادفی ازطریق فرمان fastboot اضافهشده پشتیبانی میکند.
یکپارچهسازی راهاندازی سریع و بازیابی
ازآنجاکه کاربران فضای سریع و بازیابی مشابه هستند، میتوانید آنها را در یک پارتیشن یا باینری ادغام کنید. این کار مزایایی دارد، ازجمله استفاده از فضای کمتر، داشتن بخشهای کمتر درمجموع، و داشتن fastboot و بازیابی که هسته و کتابخانههایشان را همرسانی میکنند.
Fastbootd نام یک حالت و شبح فضای کاربر است.
برای پشتیبانی از fastbootd، بوتلودر باید فرمان جدید بلوک کنترل بوت (BCB)
boot-fastboot را پیادهسازی کند. برای ورود به حالت fastbootd، bootloader
boot-fastboot را در فیلد فرمان پیام BCB مینویسد و فیلد
recovery BCB را بدون تغییر باقی میگذارد (تا امکان بازراهاندازی هرگونه تکلیف بازیابی
قطعشده فراهم شود). فیلدهای status، stage، و reserved نیز بدون تغییر باقی میمانند.
بارکننده راهاندازی با دیدن
boot-fastboot در فیلد فرمان BCB، تصویر بازیابی را بار میکند و با آن راهاندازی میشود. سپس «بازیابی» پیام BCB را تجزیه میکند
و به حالت fastbootd میرود.
فرمانهای ADB
این بخش فرمان adb را برای ادغام کردن fastbootd شرح میدهد. این فرمان بسته به اینکه توسط سیستم یا توسط بازیابی اجرا شود، نتایج متفاوتی دارد.
| فرمان | شرح |
|---|---|
reboot 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) |
دستگاه را در bootloader بازراهاندازی میکند. |
fastboot fetch vendor_boot <out.img> |
در Android 12 و بالاتر برای پشتیبانی از رامدیسکهای فروشنده چشمکزن استفاده کنید.
اندازه کل پارتیشن و اندازه تکه را دریافت میکند. دادههای هر بخش را دریافت میکند،
سپس دادهها را بههم میچسباند تا
برای جزئیات، |
fastboot flash vendor_boot:default <vendor-ramdisk.img> |
برای پشتیبانی از نوشتن ramdisk فروشنده، در Android 12 و نسخههای بالاتر استفاده کنید. این یک گونه ویژه از فرمان فلاش است. این مؤلفه تابع تصویر
برای جزئیات، به
|
fastboot flash vendor_boot:<foo> <vendor-ramdisk.img> |
از آن در Android 12 و بالاتر برای پشتیبانی از فلش کردن دیسکهای رم فروشنده استفاده کنید. تصویر برای جزئیات، به
|
راهاندازی سریع و راهانداز سیستم
راهانداز سیستم bootloader، radio، و boot/recovery
پارتیشنها را فلش میکند، پساز آن دستگاه در حالت راهاندازی سریع (فضای کاربر) راهاندازی میشود و
همه پارتیشنهای دیگر را فلش میکند. بارکننده باید از فرمانهای زیر پشتیبانی کند.
| فرمان | شرح |
|---|---|
download |
تصویر را در حافظه فلش بارگیری میکند. |
flash recovery <image>/ flash boot <image>/ flash
bootloader <image>/ |
بخشبندی و راهانداز سیستم recovery/boot را فلش میکند. |
reboot |
دستگاه را بازراهاندازی میکند. |
reboot fastboot |
برای راهاندازی سریع بازراهاندازی میشود. |
reboot recovery |
برای بازیابی، بازراهاندازی میشود. |
getvar |
متغیری از bootloader دریافت میکند که برای نوشتن تصویر بازیابی/بوت
لازم است (برای مثال، current-slot و
max-download-size). |
oem <command> |
فرمان تعریفشده توسط سازنده اصلی محصول. |
بخشهای پویا
راهانداز سیستم نباید اجازه دهد افرازهای پویا فلاش یا پاک شوند
و اگر این عملیات انجام شود، باید خطا برگرداند. برای دستگاههای با پارتیشن پویا که
بهروزرسانی شدهاند، ابزار fastboot (و راهانداز سیستم) از حالت
اجباری برای چشمک زدن مستقیم پارتیشن پویا در حالت راهانداز سیستم پشتیبانی میکند. برای مثال، اگر system پارتیشن پویا در دستگاه بازسازیشده باشد،
استفاده از فرمان fastboot --force flash system به بوتلودر (بهجای fastbootd) امکان میدهد پارتیشن را فلش کند.
شارژ در حالت خاموش
اگر دستگاهی از شارژ در حالت خاموش پشتیبانی میکند یا درصورت اتصال به منبع برق بهطور خودکار در حالت ویژهای راهاندازی میشود، پیادهسازی فرمان fastboot oem off-mode-charge 0 باید این حالتهای ویژه را دور بزند تا دستگاه طوری راهاندازی شود که انگار کاربر دکمه روشن/خاموش را فشار داده است.
لایه انتزاع سختافزار سازنده اصلی محصول در حالت راهاندازی سریع
برای جایگزین کردن کامل بوتلودر fastboot، fastboot باید همه فرمانهای fastboot موجود را مدیریت کند. بسیاری از این فرمانها از سازندگان تجهیزات اصلی (OEM) هستند و مستند شدهاند اما به پیادهسازی سفارشی نیاز دارند. بسیاری از فرمانهای مختص سازنده تجهیزات اصلی مستندسازی نشدهاند برای مدیریت چنین فرمانهایی، fastboot HAL فرمانهای OEM موردنیاز را مشخص میکند. تولیدکنندگان تجهیزات اصلی نیز میتوانند فرمانهای خودشان را پیادهسازی کنند.
تعریف 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برای فلش کردن پارتیشن خاص دستگاه به دسترسی نوشتن در آن پارتیشن نیاز دارد. علاوهبراین، پیادهسازی HAL fastboot ممکن است به اجازههای خاص دستگاه نیز نیاز داشته باشد.
برای اعتبارسنجی کاربران فضای fastboot، مجموعه آزمایش فروشنده (VTS) را اجرا کنید.
دیسکهای مجازی فروشنده Flash
Android 12 و نسخههای بالاتر از
رامدیسکهای چشمکزن با فرمان fastboot اضافهشدهای که تصویر کامل
vendor_boot را از دستگاه میکشد پشتیبانی میکند. این فرمان از ابزار راهاندازی سریع سمت میزبان میخواهد تا سرایند راهاندازی فروشنده را بخواند، تصویر را بازسازی کند، و تصویر جدید را فلش کند.
برای دریافت تصویر کامل vendor_boot، فرمان fetch:vendor_boot به پروتکل fastboot و پیادهسازی fastbootd پروتکل در Android 12 اضافه شد. توجه داشته باشید که fastbootd این را پیادهسازی میکند، اما خود بارکننده ممکن است این کار را نکند. تولیدکنندگان تجهیزات اصلی میتوانند
فرمان fetch:vendor_boot را به پیادهسازی بارکننده
پروتکل اضافه کنند. بااینحال، اگر فرمان در حالت bootloader شناسایی نشود،
گزینه فلش کردن ramdisk فروشنده در حالت bootloader یک گزینه پشتیبانیشده ازسوی فروشنده نیست.
تغییرات راهانداز سیستم
فرمانهای getvar:max-fetch-size و fetch:name در
fastbootd پیادهسازی شدهاند. برای پشتیبانی از فلش کردن دیسکهای مجازی RAM فروشنده در bootloader، باید
این دو فرمان را پیادهسازی کنید.
تغییرات Fastbootd
getvar:max-fetch-size شبیه max-download-size است. این پارامتر حداکثر اندازهای را که دستگاه میتواند در یک پاسخ DATA ارسال کند مشخص میکند. گرداننده نباید
اندازهای بزرگتر از این مقدار واکشی کند.
fetch:name[:offset[:size]] مجموعهای از بررسیها را روی دستگاه انجام میدهد. اگر همه موارد زیر درست باشد، فرمان fetch:name[:offset[:size]] دادهها را برمیگرداند:
- دستگاه درحال اجرای ساخت اشکالزدایی است.
- قفل دستگاه باز است (وضعیت راهاندازی نارنجی).
- نام پارتیشن واکشیشده
vendor_bootاست. - مقدار
sizeدر محدوده ۰ <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 (یا هر دو) نامشخص باشند، از مقادیر پیشفرض استفاده میشود که برای offset برابر با ۰ و برای size برابر با مقدار محاسبهشده partition_size - offset است.
- فاصله مشخصشده، اندازه مشخصنشده:
size = partition_size - offset - هیچکدام مشخص نشده است: از مقادیر پیشفرض برای هر دو استفاده میشود،
size = partition_size- ۰.
برای مثال، fetch:foo کل پارتیشن foo را در افست ۰ واکشی میکند.
تغییرات راننده
فرمانهایی به ابزار 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فراخوانده شده است.- اگر راهاندازی فروشنده نسخه
۳ سرصفحه باشد،
کارهای زیر را انجام میدهد:
- رمدیسک فروشنده را با تصویر دادهشده جایگزین میکند.
- تصویر
vendor_bootجدید را فلش میکند.
- اگر سرصفحه راهاندازی فروشنده نسخه
۴ باشد،
کارهای زیر را انجام میدهد:
- کل ramdisk فروشنده را با تصویر دادهشده جایگزین میکند تا تصویر دادهشده تنها تکه ramdisk فروشنده در تصویر
vendor_bootشود. - اندازه و افست را در جدول ramdisk فروشنده دوباره محاسبه میکند.
- تصویر
vendor_bootجدید را فلش میکند.
- کل ramdisk فروشنده را با تصویر دادهشده جایگزین میکند تا تصویر دادهشده تنها تکه ramdisk فروشنده در تصویر
- اگر راهاندازی فروشنده نسخه
۳ سرصفحه باشد،
کارهای زیر را انجام میدهد:
fastboot flash vendor_boot:foo vendor-ramdisk.imgvendor_boot imageرا واکشی میکند، گوییfastboot fetchفراخوانی شده است.- اگر سرایند راهاندازی فروشنده نسخه ۳ باشد، خطا برمیگرداند.
اگر سرصفحه راهاندازی فروشنده نسخه ۴ باشد، این کارها را انجام میدهد:
- تکهدیسک رم فروشنده با نام
ramdisk_<var><foo></var>را پیدا میکند. اگر پیدا نشود یا اگر چندین مورد منطبق وجود داشته باشد، خطا برمیگرداند. - قطعه ramdisk فروشنده را با تصویر دادهشده جایگزین میکند.
- هر اندازه و افست را در جدول ramdisk فروشنده دوباره محاسبه میکند.
- تصویر جدید
vendor_bootرا بهسرعت نشان میدهد.
- تکهدیسک رم فروشنده با نام
اگر <foo> مشخص نشده باشد، سعی میکند
ramdisk_را پیدا کند.
mkbootimg
نام default برای نامگذاری تکههای ramdisk فروشنده در
Android 12 و بالاتر رزرو شده است. درحالیکه معناشناسی flash vendor_boot:default
fastboot یکسان باقی میماند، نباید قطعات ramdisk خود را بهعنوان
default نامگذاری کنید.
تغییرات SELinux
تغییری در
fastbootd.te
برای پشتیبانی از رامدیسکهای فروشنده چشمکزن ایجاد شد.