নিম্নলিখিত জ্ঞাত সমস্যাগুলি সমাধান করার জন্য নিচের প্যাচগুলি থেকে বেছে বেছে প্রয়োগ করুন।
সাইডলোডিং করার সময় বরাদ্দযোগ্য স্থান সঠিকভাবে পরীক্ষা করুন।
এমন একটি ভার্চুয়াল A/B ডিভাইসে সম্পূর্ণ OTA প্যাকেজ সাইডলোড করার চেষ্টা করলে, যার সুপার পার্টিশনের আকার *2 *(আপডেট গ্রুপগুলোর আকারের যোগফল)*-এর চেয়ে ছোট, তা ব্যর্থ হতে পারে এবং রিকভারি লগ /tmp/recovery.log এ নিম্নলিখিত বার্তাটি দেখা যেতে পারে:
The maximum size of all groups with suffix _b (...) has exceeded half of allocatable space for dynamic partitions ...
এখানে লগটির একটি উদাহরণ দেওয়া হলো:
[INFO:dynamic_partition_control_android.cc(1020)] Will overwrite existing partitions. Slot A may be unbootable until update finishes!
[...]
[ERROR:dynamic_partition_control_android.cc(803)] The maximum size of all groups with suffix _b (2147483648) has exceeded half of allocatable space for dynamic partitions 1073741824.
আপনি এই সমস্যার সম্মুখীন হলে, CL 1399393 চেরি পিক করুন, রিবিল্ড করুন এবং বুট পার্টিশন অথবা রিকভারি পার্টিশন ফ্ল্যাশ করুন, যদি ডিভাইসটি বুট হিসেবে রিকভারি ব্যবহার না করে।
মার্জ করার সময় সেগমেন্টেশন ফল্ট ঠিক করুন
একটি OTA আপডেট প্রয়োগ করার পরে, VAB মার্জ প্রক্রিয়া চলাকালীন, update_engine_client --cancel কল করলে CleanupPreviousUpdateAction ক্র্যাশ করে। markSlotSuccessful দেরিতে আসলে একটি সম্ভাব্য ওয়াইল্ড পয়েন্টার এররও দেখা দেয়।
StopActionInternal ফাংশনটি যোগ করার মাধ্যমে এর সমাধান করা হয়েছিল। CleanupPreviousUpdateAction ডেস্ট্রয় করার সময় পেন্ডিং টাস্ক বাতিল করে দেয়। এটি একটি ভ্যারিয়েবল রক্ষণাবেক্ষণ করে যা মেসেজ লুপে থাকা পেন্ডিং টাস্কের টাস্ক আইডি ট্র্যাক করে। সেগফল্ট এড়ানোর জন্য ডেস্ট্রয় করার সময় পেন্ডিং টাস্কটি বাতিল করে দেওয়া হয়।
মার্জ করার সময় update_engine এ SIGSEGV ক্র্যাশ ঠিক করতে আপনার Android 11 সোর্স ট্রি-তে নিম্নলিখিত পরিবর্তনগুলি নিশ্চিত করুন:
- সিএল ১৪৩৯৭৯২ (সিএল ১৪৩৯৩৭২-এর একটি পূর্বশর্ত)
- CL 1439372 (
CleanupPreviousUpdateAction: ধ্বংস করার সময় মুলতুবি থাকা কাজগুলি বাতিল করা) - CL 1663460 (
markSlotSuccessfulদেরিতে আসলে সম্ভাব্য ওয়াইল্ড পয়েন্টার ত্রুটি সংশোধন)
আপডেট_ইঞ্জিনের অকাল একত্রীকরণ প্রতিরোধ করুন
যখন কোনো ডিভাইস বুট হয় (অ্যান্ড্রয়েড ১১ এবং তার পরবর্তী সংস্করণ), এবং বুট প্রক্রিয়া সম্পন্ন হয়, তখন update_engine ScheduleWaitMarkBootSuccessful() এবং WaitForMergeOrSchedule() কল করে। এর মাধ্যমে মার্জ প্রক্রিয়া শুরু হয়। কিন্তু, ডিভাইসটি পুরোনো স্লটে রিবুট হয়ে যায়। যেহেতু মার্জ প্রক্রিয়া ইতোমধ্যে শুরু হয়ে গেছে, ডিভাইসটি বুট হতে ব্যর্থ হয় এবং অকার্যকর হয়ে পড়ে।
আপনার সোর্স ট্রিতে নিম্নলিখিত পরিবর্তনগুলি যোগ করুন। উল্লেখ্য যে, CL 1664859 ঐচ্ছিক।
- সিএল ১৪৩৯৭৯২ (সিএল ১৪৩৯৩৭২-এর একটি পূর্বশর্ত)
- CL 1439372 (
CleanupPreviousUpdateAction: ধ্বংস করার সময় মুলতুবি থাকা কাজগুলি বাতিল করা) - CL 1663460 (
markSlotSuccessfulদেরিতে আসলে সম্ভাব্য ওয়াইল্ড পয়েন্টার ত্রুটি সংশোধন) - CL 1664859 (ঐচ্ছিক -
CleanupPreviousUpdateActionএর জন্যunittestযোগ করুন)
সঠিক dm-verity কনফিগারেশন নিশ্চিত করুন।
অ্যান্ড্রয়েড ১১ এবং এর পরবর্তী সংস্করণগুলোতে, ডিভাইসগুলো অনিচ্ছাকৃতভাবে নিম্নলিখিত dm-verity অপশনগুলো দিয়ে কনফিগার হয়ে যেতে পারে:
- কার্নেলে
CONFIG_DM_VERITY_AVB=y - বুটলোডারটি
AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIOছাড়া যেকোনো ভ্যালিডিটি মোড (যেমনAVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE) ব্যবহার করার জন্য কনফিগার করা হয়েছে।
এই ডিভাইস কনফিগারেশনে, যেকোনো ভেরিটি এররের কারণে vbmeta পার্টিশনটি করাপ্টেড হয়ে যায় এবং নন-A/B ডিভাইসগুলো অকার্যকর হয়ে পড়ে। একইভাবে, যদি কোনো মার্জ শুরু হয়ে থাকে, তাহলে A/B ডিভাইসগুলোও অকার্যকর হয়ে যেতে পারে। শুধুমাত্র AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIO ভেরিটি মোডটি ব্যবহার করুন।
- কার্নেলে
CONFIG_DM_VERITY_AVB=nসেট করুন। - এর পরিবর্তে ডিভাইসগুলিকে
AVB_HASHTREE_ERROR_MODE_MANAGED_RESTART_AND_EIOমোড ব্যবহার করার জন্য কনফিগার করুন।
আরও তথ্যের জন্য verity ডকুমেন্টেশন দেখুন: dm-verity ত্রুটি পরিচালনা ।
মার্জ করা ফাইলটি সঠিকভাবে কনফিগার করা হয়েছে কিনা তা নিশ্চিত করুন।
আপনি যদি সিস্টেম ইমেজ এবং ভেন্ডর ইমেজ আলাদাভাবে তৈরি করেন এবং তারপর সেগুলোকে মার্জ করার জন্য merge_target_files ব্যবহার করেন, তাহলে মার্জ প্রক্রিয়ার সময় ভার্চুয়াল A/B কনফিগারেশনগুলো ভুলবশত বাদ পড়ে যেতে পারে। মার্জ করা টার্গেট ফাইলে ভার্চুয়াল A/B কনফিগারেশনগুলো সঠিক আছে কিনা তা যাচাই করতে, নিম্নলিখিত প্যাচগুলো প্রয়োগ করুন: CL 2084183 (ডাইনামিক পার্টিশন তথ্যে অভিন্ন কী/ভ্যাল পেয়ার মার্জ করার জন্য)।
প্রয়োজনীয় উপাদানগুলি আপডেট করুন
অ্যান্ড্রয়েড ১৩ থেকে, snapuserd ভেন্ডর র্যামডিস্ক থেকে জেনেরিক র্যামডিস্কে স্থানান্তর করা হয়েছে। যদি আপনার ডিভাইসটি অ্যান্ড্রয়েড ১৩-তে আপগ্রেড করা হয়, তবে এমন হতে পারে যে ভেন্ডর র্যামডিস্ক এবং জেনেরিক র্যামডিস্ক উভয়টিতেই snapuserd এর একটি কপি রয়েছে। এই পরিস্থিতিতে, Virtual A/B-এর snapuserd এর সিস্টেম কপিটি প্রয়োজন। snapuserd এর সঠিক কপিটি যথাস্থানে আছে কিনা তা নিশ্চিত করতে, CL 2031243 ( snapuserd first_stage_ramdisk-এ কপি করুন) প্রয়োগ করুন।