Android 10 और उसके बाद के वर्शन के लिए, पार्टिशन का साइज़ बदला जा सकता है फ़ास्टबूट को लागू करने की प्रोसेस को बूटलोडर से यूज़रस्पेस पर ले जाना. यह रीलोकेशन वह जगह जहां फ़ास्टबूट के सिर्फ़ वेंडर के खास पार्ट लागू किए जाते हैं. हार्डवेयर ऐब्स्ट्रक्शन लेयर (एचएएल). इसके अलावा, Android 12 और बाद वाला वर्शन, एक फ़ास्टबूट कमांड के ज़रिए फ़्लैशिंग रैम डिस्क के साथ काम करता है.
फ़ास्टबूट और रिकवरी को जोड़ें
यूज़रस्पेस फ़ास्टबूट और रिकवरी एक जैसे हैं. इसलिए, इन्हें मर्ज करके एक बनाया जा सकता है विभाजन या बाइनरी. इससे कई फ़ायदे मिलते हैं. जैसे, डिवाइस का स्टोरेज कम इस्तेमाल करना, इसमें वीडियो के हिस्से को कम किया गया है और फ़ास्टबूट और रिकवरी से कर्नेल और लाइब्रेरी पर क्लिक करता है.
fastbootd
के साथ काम करने के लिए, बूटलोडर को एक नया बूट कंट्रोल ब्लॉक लागू करना होगा
(BCB) को boot-fastboot
का आदेश. fastbootd
मोड में जाने के लिए, बूटलोडर
BCB मैसेज के कमांड फ़ील्ड में boot-fastboot
लिखता है और
बीसीबी का recovery
फ़ील्ड नहीं बदला गया (डेटा वापस पाने में किसी रुकावट को फिर से चालू करने के लिए, ऐसा किया गया
Tasks). status
, stage
, और reserved
फ़ील्ड में भी कोई बदलाव नहीं होगा.
बूटलोडर
बीसीबी कमांड फ़ील्ड में boot-fastboot
. रिकवरी के बाद, BCB मैसेज को पार्स किया जाता है
और fastbootd
मोड पर स्विच करता है.
ADB आदेश
इस सेक्शन में, fastbootd
को इंटिग्रेट करने के लिए, adb
कमांड के बारे में बताया गया है. कॉन्टेंट बनाने
निर्देश के अलग-अलग परिणाम होते हैं, जो इस बात पर निर्भर करता है कि इसे सिस्टम द्वारा निष्पादित किया गया है या नहीं या
वापस पाएं.
निर्देश | ब्यौरा |
---|---|
reboot 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> |
लॉजिकल पार्टीशन का कॉन्टेंट बदले बिना उसका साइज़ नए साइज़ में बदलता है. अगर साइज़ बदलने के लिए ज़रूरत के मुताबिक जगह नहीं है, तो कार्रवाई नहीं की जा सकेगी. |
update-super <partition> |
सुपर पार्टिशन मेटाडेटा में बदलावों को मर्ज करता है. अगर मर्ज करना मुमकिन नहीं है, तो
(उदाहरण के लिए, डिवाइस का फ़ॉर्मैट काम नहीं करता है), तो यह
आदेश विफल रहता है. वैकल्पिक wipe पैरामीटर, डिवाइस के
और मर्ज करने के बजाय मेटाडेटा पर ध्यान दें. |
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 और इसके बाद वाले वर्शन में इस्तेमाल करें. यह फ़्लैश कमांड का एक विशेष वैरिएंट है. यह
जानकारी के लिए, यह देखें
|
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 |
बूटलोडर वैरिएबल उपलब्ध कराता है, जो रिकवरी/बूट को फ़्लैश करने के लिए ज़रूरी होता है
इमेज (उदाहरण के लिए, current-slot और
max-download-size ). |
oem <command> |
OEM ने निर्देश दिया है. |
डाइनैमिक पार्टिशन
बूटलोडर को डाइनैमिक पार्टिशन को फ़्लैश करने या मिटाने की अनुमति नहीं चाहिए
और अगर इन कार्रवाइयों की कोशिश की जाती है, तो गड़बड़ी होना चाहिए. पहले से सेट किए गए तापमानों के लिए
डाइनैमिक पार्टिशन डिवाइस, फ़ास्टबूट टूल (और बूटलोडर) एक फ़ोर्स, फ़ोर्स,
बूटलोडर मोड में होने पर डाइनैमिक पार्टिशन को सीधे फ़्लैश करने वाला मोड. इसके लिए
उदाहरण के लिए, अगर पहले से सेट किए गए डिवाइस में system
, डाइनैमिक पार्टिशन है,
fastboot --force flash system
निर्देश का इस्तेमाल करके, बूटलोडर को चालू किया जा सकता है
(fastbootd
के बजाय) सेगमेंट को फ़्लैश करें.
ऑफ़-मोड चार्जिंग
अगर डिवाइस में ऑफ़-मोड चार्जिंग की सुविधा है या वह किसी खास डिवाइस में अपने-आप चार्ज हो जाता है, तो
मोड जब पावर लागू किया जाता है, तो
fastboot oem off-mode-charge 0
आदेश को
इन विशेष मोड को बायपास कर सकें, ताकि डिवाइस ऐसे बूट हो जाए, जैसे कि उपयोगकर्ता ने उसे दबा दिया हो
पावर बटन दबाएं.
फ़ास्टबूट OEM एचएएल
बूटलोडर फ़ास्टबूट को पूरी तरह से बदलने के लिए, फ़ास्टबूट को सभी मौजूदा फ़ास्टबूट कमांड. इनमें से कई निर्देश OEM ने दिए हैं और इन्हें दस्तावेज़ में शामिल किया गया है, लेकिन को कस्टम तरीके से लागू करना ज़रूरी है. OEM के लिए बनाए गए कई निर्देश नहीं हैं दस्तावेज़ित. ऐसे कमांड को हैंडल करने के लिए, फ़ास्टबूट HAL ज़रूरी जानकारी देता है OEM आदेश. OEM अपने कमांड भी लागू कर सकते हैं.
फ़ास्टबूट एचएएल की परिभाषा यहां दी गई है:
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
चालू करने के लिए:
device.mk
केPRODUCT_PACKAGES
मेंfastbootd
जोड़ें:PRODUCT_PACKAGES += fastbootd
.पक्का करें कि फ़ास्टबूट एचएएल, बूट कंट्रोल एचएएल, और हेल्थ एचएएल पैकेज में शामिल हों को वापस पाई जा सकती है.
fastbootd
के लिए, डिवाइस के हिसाब से ज़रूरी SEPolicy अनुमतियां जोड़ें. इसके लिए उदाहरण के लिए,fastbootd
को डिवाइस के खास हिस्से पर लिखने के ऐक्सेस की ज़रूरत है, ताकि उस विभाजन को फ़्लैश करें. इसके अलावा, फ़ास्टबूट एचएएल को लागू करने पर डिवाइस के लिए खास अनुमतियां होनी चाहिए.
यूज़रस्पेस फ़ास्टबूट की पुष्टि करने के लिए, विक्रेता टेस्ट सुइट चलाएं (वीटीएस).
फ़्लैश वेंडर के लिए रैम डिस्क
Android 12 और उसके बाद के वर्शन के लिए सहायता मिलती है
फ़्लैशिंग रैम डिस्क के साथ एक फ़ास्टबूट निर्देश मिलता है, जो पूरा
डिवाइस से vendor_boot
इमेज. निर्देश, होस्ट-साइड फ़ास्टबूट को निर्देश देता है
इस टूल का इस्तेमाल, वेंडर बूट हेडर, रीइमेज को पढ़ने, और नई इमेज को फ़्लैश करने के लिए किया जाता है.
vendor_boot
की पूरी इमेज खींचने के लिए, निर्देश fetch:vendor_boot
जोड़ा गया
फ़ास्टबूट प्रोटोकॉल और प्रोटोकॉल के फ़ास्टबूट को लागू करने के तरीके, दोनों को लागू किया जाता है
Android 12 में. ध्यान दें कि फ़ास्टबूट यह करता है
लागू करेगा, लेकिन हो सकता है कि बूटलोडर खुद ऐसा न करे. OEM ये जोड़ सकते हैं
अपने बूटलोडर को लागू करने के लिए, fetch:vendor_boot
कमांड
प्रोटोकॉल का इस्तेमाल करना चाहिए. हालांकि, अगर बूटलोडर मोड में निर्देश की पहचान नहीं हो पाती है, तो
बूटलोडर मोड में अलग-अलग वेंडर के रैम डिस्क को फ़्लैश करने की सुविधा, वेंडर के साथ काम नहीं करती
का विकल्प शामिल है.
बूटलोडर में किए गए बदलाव
getvar:max-fetch-size
और fetch:name
निर्देश इसमें लागू किए जाते हैं
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
(या दोनों) के बारे में नहीं बताया जाता है, तो
डिफ़ॉल्ट मानों का उपयोग किया जाता है, जिसमें offset
के लिए 0 होता है और size
के लिए डिफ़ॉल्ट मान होता है
partition_size - offset
की कैलकुलेट की गई वैल्यू.
- ऑफ़सेट तय किया गया, साइज़ की जानकारी नहीं है:
size = partition_size - offset
- दोनों में से कोई तय नहीं किया गया: दोनों के लिए डिफ़ॉल्ट वैल्यू का इस्तेमाल किया गया,
size = partition_size
- 0.
उदाहरण के लिए, fetch:foo
पूरे foo
पार्टीशन को ऑफ़सेट 0 पर फ़ेच करता है.
ड्राइवर में बदलाव
ड्राइवर के बदलावों को लागू करने के लिए, फ़ास्टबूट टूल में निर्देश जोड़े गए हैं. हर एक है 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,
तो यह काम करता है:
- वेंडर के रैम डिस्क को दी गई इमेज से बदल देता है.
- नई
vendor_boot
इमेज को फ़्लैश करता है.
- अगर वेंडर बूट हेडर वर्शन है
4,
तो यह काम करता है:
- पूरे वेंडर रैमडिस्क को दी गई इमेज से बदलता है, ताकि
दिया गया इमेज, अब इकलौता वेंडर ramdisk फ़्रैगमेंट बन जाएगा
vendor_boot
इमेज. - वेंडर रैमडिस्क टेबल में साइज़ और ऑफ़सेट का फिर से हिसाब लगाता है.
- नई
vendor_boot
इमेज को फ़्लैश करता है.
- पूरे वेंडर रैमडिस्क को दी गई इमेज से बदलता है, ताकि
दिया गया इमेज, अब इकलौता वेंडर ramdisk फ़्रैगमेंट बन जाएगा
- अगर वेंडर बूट, हेडर वर्शन है
3,
तो यह काम करता है:
fastboot flash vendor_boot:foo vendor-ramdisk.img
vendor_boot image
को फ़ेच करता है, जैसे किfastboot fetch
को कॉल किया गया हो.- अगर वेंडर बूट हेडर वर्शन 3 है, तो यह गड़बड़ी दिखाता है.
अगर वेंडर बूट हेडर वर्शन 4 है, तो यह ये काम करता है:
foo
नाम वाला वेंडर रैम डिस्क फ़्रैगमेंट ढूंढता है. अगर उपयोगकर्ता नहीं मिलता है, या एक से ज़्यादा मैच होने पर, गड़बड़ी का मैसेज दिखाता है.- वेंडर के रैमडिस्क फ़्रैगमेंट को दी गई इमेज से बदलता है.
- वेंडर रैमडिस्क टेबल में हर साइज़ और ऑफ़सेट का फिर से हिसाब लगाता है.
- नई
vendor_boot
इमेज को फ़्लैश करता है.
mkbootimg
default
नाम, वेंडर के रैम डिस्क फ़्रैगमेंट को नाम देने के लिए रिज़र्व है
Android 12 और उसके बाद के वर्शन. फ़ास्टबूट flash vendor_boot:default
होने पर
सिमेंटिक्स पहले जैसा ही रहेगा, आपको अपने रैम डिस्क फ़्रैगमेंट को इस तरह नाम नहीं देना चाहिए
default
.
SELinux बदलाव
इसमें एक परिवर्तन किया गया
fastbootd.te
फ़्लैश करने वाले वेंडर रैमडिस्क को बढ़ावा देने के लिए किया जा सकता है.