ফাস্টবুট হল একটি বুটলোডার মডিউল এবং মোডের নাম। অ্যান্ড্রয়েড 10 এবং উচ্চতর ফাস্টবুট বাস্তবায়নকে বুটলোডার থেকে ইউজারস্পেসে স্থানান্তরিত করার মাধ্যমে আকার পরিবর্তনযোগ্য পার্টিশন সমর্থন করে। এই স্থানান্তরটি একটি হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) দ্বারা বাস্তবায়িত ফাস্টবুটের শুধুমাত্র বিক্রেতা-নির্দিষ্ট অংশগুলির সাথে একটি রক্ষণাবেক্ষণযোগ্য এবং পরীক্ষাযোগ্য সাধারণ অবস্থানে ফ্ল্যাশিং কোডকে স্থানান্তরিত করতে সক্ষম করে। এছাড়াও, Android 12 এবং উচ্চতর একটি অতিরিক্ত ফাস্টবুট কমান্ডের মাধ্যমে ফ্ল্যাশিং র্যামডিস্ক সমর্থন করে।
ফাস্টবুট এবং পুনরুদ্ধার একীভূত করুন
যেহেতু ইউজারস্পেস ফাস্টবুট এবং রিকভারি একই রকম, আপনি সেগুলিকে একটি পার্টিশন বা বাইনারিতে মার্জ করতে পারেন। এটি কম জায়গা ব্যবহার করা, সামগ্রিকভাবে কম পার্টিশন থাকা এবং ফাস্টবুট এবং পুনরুদ্ধার তাদের কার্নেল এবং লাইব্রেরি শেয়ার করার মতো সুবিধা প্রদান করে।
Fastbootd হল একটি ইউজারস্পেস ডেমন এবং মোডের নাম। fastbootd
সমর্থন করার জন্য, বুটলোডারকে boot-fastboot
একটি নতুন বুট কন্ট্রোল ব্লক (BCB) কমান্ড প্রয়োগ করতে হবে। fastbootd
মোডে প্রবেশ করতে, বুটলোডার BCB বার্তার কমান্ড ক্ষেত্রে boot-fastboot
লিখে এবং BCB-এর recovery
ক্ষেত্র অপরিবর্তিত রাখে (যেকোন বাধাগ্রস্ত পুনরুদ্ধার কাজ পুনরায় চালু করতে সক্ষম করতে)। status
, stage
এবং reserved
ক্ষেত্রগুলিও অপরিবর্তিত রয়েছে। BCB কমান্ড ফিল্ডে boot-fastboot
দেখে বুটলোডার রিকভারি ইমেজে লোড হয় এবং বুট করে। রিকভারি তারপর বিসিবি বার্তা পার্স করে এবং 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 HAL
বুটলোডার ফাস্টবুট সম্পূর্ণরূপে প্রতিস্থাপন করতে, ফাস্টবুটকে অবশ্যই বিদ্যমান ফাস্টবুট কমান্ডগুলি পরিচালনা করতে হবে। এই কমান্ডগুলির মধ্যে অনেকগুলি OEM থেকে এসেছে এবং নথিভুক্ত কিন্তু একটি কাস্টম বাস্তবায়ন প্রয়োজন৷ অনেক OEM-নির্দিষ্ট কমান্ড নথিভুক্ত করা হয় না । এই ধরনের কমান্ড পরিচালনা করতে, fastboot 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 সক্ষম করুন
একটি ডিভাইসে fastbootd
সক্ষম করতে:
device.mk
এPRODUCT_PACKAGES
এfastbootd
যোগ করুন:PRODUCT_PACKAGES += fastbootd
।নিশ্চিত করুন যে ফাস্টবুট HAL, বুট কন্ট্রোল HAL, এবং স্বাস্থ্য HAL পুনরুদ্ধার চিত্রের অংশ হিসাবে প্যাকেজ করা হয়েছে।
fastbootd
এর জন্য প্রয়োজনীয় যেকোন ডিভাইস-নির্দিষ্ট SEPpolicy অনুমতি যোগ করুন। উদাহরণস্বরূপ,fastbootd
জন্য সেই পার্টিশন ফ্ল্যাশ করার জন্য একটি ডিভাইস-নির্দিষ্ট পার্টিশনে লেখার অ্যাক্সেস প্রয়োজন। উপরন্তু, fastboot HAL বাস্তবায়নের জন্য ডিভাইস-নির্দিষ্ট অনুমতির প্রয়োজন হতে পারে।
ইউজারস্পেস ফাস্টবুট যাচাই করতে, ভেন্ডর টেস্ট স্যুট (ভিটিএস) চালান।
ফ্ল্যাশ বিক্রেতা রামডিস্ক
অ্যান্ড্রয়েড 12 এবং উচ্চতর একটি অতিরিক্ত ফাস্টবুট কমান্ডের সাহায্যে র্যামডিস্ক ফ্ল্যাশ করার জন্য সমর্থন প্রদান করে যা একটি ডিভাইস থেকে সম্পূর্ণ vendor_boot
ইমেজ টানে। কমান্ডটি হোস্ট-সাইড ফাস্টবুট টুলকে ভেন্ডর বুট হেডার, রিইমেজ এবং নতুন ইমেজ ফ্ল্যাশ করতে অনুরোধ করে।
সম্পূর্ণ vendor_boot
ইমেজটি টেনে আনতে, fetch:vendor_boot
কমান্ডটি fastboot প্রোটোকল এবং Android 12-এ প্রোটোকলের fastbootd বাস্তবায়ন উভয় ক্ষেত্রেই যোগ করা হয়েছে। মনে রাখবেন যে fastbootd এটি বাস্তবায়ন করে , কিন্তু বুটলোডার নিজে নাও হতে পারে। OEMs তাদের প্রোটোকলের বুটলোডার বাস্তবায়নে fetch:vendor_boot
কমান্ড যোগ করতে পারে। যাইহোক, যদি বুটলোডার মোডে কমান্ডটি স্বীকৃত না হয়, তাহলে বুটলোডার মোডে পৃথক ভেন্ডর র্যামডিস্ক ফ্ল্যাশ করা একটি ভেন্ডর-সমর্থিত বিকল্প নয়।
বুটলোডার পরিবর্তন
getvar:max-fetch-size
এবং fetch:name
কমান্ডগুলি fastbootd
এ প্রয়োগ করা হয়। বুটলোডারে ফ্ল্যাশিং ভেন্ডর রামডিস্ক সমর্থন করতে, আপনাকে অবশ্যই এই দুটি কমান্ড প্রয়োগ করতে হবে।
ফাস্টবুট পরিবর্তন
getvar:max-fetch-size
হল max-download-size
এর মতো। এটি সর্বোচ্চ আকার নির্দিষ্ট করে যা ডিভাইসটি একটি ডেটা প্রতিক্রিয়াতে পাঠাতে পারে। ড্রাইভার অবশ্যই এই মানের থেকে বড় আকার আনবে না।
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
অফসেট 0 এ পুরো foo
পার্টিশন নিয়ে আসে।
ড্রাইভার পরিবর্তন
ড্রাইভার পরিবর্তন বাস্তবায়নের জন্য ফাস্টবুট টুলে কমান্ড যোগ করা হয়েছে। প্রতিটি ফাস্টবুট কমান্ডের সারণীতে তার সম্পূর্ণ সংজ্ঞার সাথে লিঙ্ক করা হয়েছে।
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 হলে, এটি নিম্নলিখিত কাজ করে:
- প্রদত্ত ইমেজটির সাথে পুরো ভেন্ডর র্যামডিস্ক প্রতিস্থাপন করে যাতে প্রদত্ত ইমেজটি
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 এবং উচ্চতর বিক্রেতা ramdisk টুকরা নামকরণের জন্য সংরক্ষিত। যদিও fastboot flash vendor_boot:default
শব্দার্থ একই থাকে, আপনি অবশ্যই আপনার র্যামডিস্কের টুকরোকে default
হিসেবে নাম দেবেন না ।
SELinux পরিবর্তন
ফ্ল্যাশিং ভেন্ডর রামডিস্ক সমর্থন করার জন্য fastbootd.te
এ একটি পরিবর্তন করা হয়েছে।