Android 9-এ বুটলোডার বুট করার কারণ সংক্রান্ত স্পেসিফিকেশনে নিম্নলিখিত পরিবর্তনগুলি অন্তর্ভুক্ত রয়েছে।
বুট করার কারণ
কোনও ডিভাইস কেন রিবুট হয়েছে তা নির্ধারণ করতে বুটলোডার অনন্যভাবে উপলভ্য হার্ডওয়্যার ও মেমরি রিসোর্স ব্যবহার করে, তারপর সেটি লঞ্চ করার জন্য Android
কার্নেল কমান্ড লাইনে androidboot.bootreason=<reason> যোগ করে
সেই নির্ধারণ কমিউনিকেট করে। init তারপর এই কমান্ড লাইনকে
Android প্রপার্টি bootloader_boot_reason_prop (ro.boot.bootreason)-এ
প্রোপাগেট করার জন্য অনুবাদ করে।
Android 12 বা তার পরবর্তী যেকোনও ভার্সন সহ লঞ্চ হওয়া ডিভাইসের ক্ষেত্রে,
কার্নেল ভার্সন 5.10 বা তার পরবর্তী যেকোনও ভার্সন ব্যবহার করে, androidboot.bootreason=<reason>
কার্নেল কমান্ড লাইনের পরিবর্তে bootconfig-এ যোগ করা হয়।
বুট করার কারণ সংক্রান্ত স্পেসিফিকেশন
Android-এর আগের রিলিজগুলিতে বুট করার কারণের এমন ফর্ম্যাট নির্দিষ্ট করা ছিল যাতে কোনও
স্পেস ছিল না, সব অক্ষরই ছোট হাতের ছিল, এতে কিছু প্রয়োজনীয়তা (যেমন, রিপোর্ট করার জন্য
kernel_panic, watchdog,
cold/warm/hard) অন্তর্ভুক্ত ছিল এবং যা অন্যান্য অনন্য কারণের
জন্য অনুমতি দেয়। এই শিথিল স্পেসিফিকেশনের ফলে শত শত কাস্টম (এবং কখনও কখনও অর্থহীন) বুট কারণ স্ট্রিংয়ের
প্রসার ঘটে, যার ফলে পরিস্থিতি ম্যানেজ করা কঠিন হয়ে পড়ে। বর্তমান Android রিলিজের
ক্ষেত্রে, বুটলোডার দ্বারা ফাইল করা প্রায় পার্স করা যায় না বা অর্থহীন কন্টেন্টের
প্রচুর পরিমাণ bootloader_boot_reason_prop-এর জন্য
সম্মতি সংক্রান্ত সমস্যা তৈরি করেছে।
Android 9 রিলিজের সাথে, Android টিম
স্বীকার করে যে পুরনো bootloader_boot_reason_prop-এর
গুরুত্বপূর্ণ মোমেন্টাম আছে এবং রানটাইমে এটি আবার লেখা যাবে না। বুট হওয়ার কারণের স্পেসিফিকেশনে
কোনও উন্নতি করতে হলে, বুটলোডার ডেভেলপারদের সাথে ইন্টার্যাকশন
এবং আগে থেকে থাকা সিস্টেমে পরিবর্তন করতে হবে। এই উদ্দেশ্যে Android টিম:
- বুটলোডার ডেভেলপারদের সাথে যোগাযোগ করে তাদের এইসব করতে উৎসাহিত করা:
bootloader_boot_reason_prop-কে ক্যানোনিকাল, পার্স করা যায় এমন এবং শনাক্ত করা যায় এমন কারণ প্রদান করুন।system/core/bootstat/bootstat.cppkBootReasonMapতালিকায় অংশগ্রহণ করুন।
system_boot_reason_prop(sys.boot.reason)-এর একটি কন্ট্রোল করা এবং রানটাইম-রিরাইটেবল সোর্স যোগ করা হচ্ছে। সিস্টেম অ্যাপের একটি সীমিত সেট (যেমনbootstatএবংinit) এই প্রপার্টি রিরাইট করতে পারে, তবে সব অ্যাপকে এটি পড়ার জন্য sepolicy অধিকার দেওয়া যেতে পারে।- সিস্টেম বুট কারণ প্রপার্টিতে কন্টেন্ট বিশ্বাস করার আগে
ব্যবহারকারীর ডেটা মাউন্ট না হওয়া পর্যন্ত অপেক্ষা করার জন্য বুট করার কারণ ব্যবহারকারীদের জানানো
system_boot_reason_prop।
এত দেরি কেন? bootloader_boot_reason_prop বুট করার সময়
প্রথম দিকে উপলভ্য থাকলেও, Android নিরাপত্তা নীতি অনুসারে প্রয়োজন মতো
এটি ব্লক করা হয়, কারণ এটি ভুল, পার্স করা যায় না এমন এবং নন-ক্যাননিক্যাল তথ্য দেখায়।
বেশিরভাগ ক্ষেত্রে, শুধুমাত্র বুট সিস্টেম সম্পর্কে গভীর জ্ঞান আছে এমন ডেভেলপারদের
এই তথ্য অ্যাক্সেস করার প্রয়োজন। system_boot_reason_prop সহ বুট করার কারণের জন্য একটি পরিমার্জিত, পার্স করা যায় এবং প্রামাণিক
API নির্ভরযোগ্যভাবে
এবং সঠিকভাবে শুধুমাত্র পরে ব্যবহারকারীর ডেটা মাউন্ট করা হলে পাওয়া যেতে পারে।
বিশেষত:
- আগে ব্যবহারকারীর ডেটা মাউন্ট করা হয়েছে,
system_boot_reason_prop-এbootloader_boot_reason_prop-এর ভ্যালু থাকবে। - userdata মাউন্ট করার পরে,
system_boot_reason_propআপডেট করা হতে পারে যাতে তা মেনে চলা হয় অথবা আরও সঠিক তথ্য রিপোর্ট করা যায়।
এই কারণে, Android 9 বুট করার কারণ আনুষ্ঠানিকভাবে পাওয়ার আগে
সময়সীমা বাড়িয়ে দেয়। এর ফলে, বুট করার সময় (bootloader_boot_reason_prop সহ) সাথে সাথেই
সঠিক তথ্য পাওয়ার পরিবর্তে, এখন শুধুমাত্র ব্যবহারকারীর ডেটা মাউন্ট করার পরে (system_boot_reason_prop সহ)
এই তথ্য উপলভ্য হয়।
Bootstat লজিক আরও তথ্যপূর্ণ এবং অনুগত
bootloader_boot_reason_prop-এর উপর নির্ভর করে। সেই প্রপার্টি কোনও
অনুমানযোগ্য ফর্ম্যাট ব্যবহার করলে, এটি সব কন্ট্রোল করা রিবুট ও
শাটডাউন সিনারিওর নির্ভুলতা উন্নত করে, যার ফলে system_boot_reason_prop-এর নির্ভুলতা ও অর্থ
আরও নিখুঁত ও বিস্তারিত হয়।
ক্যানোনিকাল বুট করার কারণের ফর্ম্যাট
Android 9-এ bootloader_boot_reason_prop
-এর জন্য ক্যাননিকাল বুট কারণ ফর্ম্যাট নিম্নলিখিত সিনট্যাক্স ব্যবহার করে:
<reason>,<subreason>,<detail>…
ফর্ম্যাটিং সংক্রান্ত নিয়ম:
- লোয়ার কেস
- কোনও ফাঁকা জায়গা নেই (আন্ডারলাইন ব্যবহার করুন)
- প্রিন্ট করা যাবে এমন সব অক্ষর
- কমা দিয়ে আলাদা করা
reason,subreasonএবং এক বা একাধিকdetailইনস্ট্যান্স।- একটি প্রয়োজনীয়
reasonযা সবচেয়ে বেশি অগ্রাধিকারের কারণ দেখায় যে কেন ডিভাইস রিবুট বা শাটডাউন করতে হয়েছে। - একটি ঐচ্ছিক
subreasonযা ডিভাইসটি কেন রিবুট বা বন্ধ করতে হয়েছিল (বা কে ডিভাইসটি রিবুট বা বন্ধ করেছিল) তার একটি সংক্ষিপ্ত সারসংক্ষেপ দেখায়। - এক বা একাধিক ঐচ্ছিক
detailভ্যালু।detailএকটি সাবসিস্টেমকে নির্দেশ করতে পারে যা নির্ধারণ করতে সাহায্য করে যে কোন নির্দিষ্ট সিস্টেমের কারণেsubreasonহয়েছে। আপনি একাধিকdetailমান নির্দিষ্ট করতে পারেন, যেগুলি সাধারণত গুরুত্বের ক্রম মেনে চলে। তবে, সমান গুরুত্বপূর্ণ একাধিকdetailভ্যালু রিপোর্ট করাও গ্রহণযোগ্য।
- একটি প্রয়োজনীয়
bootloader_boot_reason_prop-এর জন্য খালি ভ্যালু
বেআইনি হিসেবে বিবেচনা করা হয় (কারণ এটি অন্যান্য এজেন্টকে ঘটনার পরে বুট করার কারণ ইনজেক্ট করার অনুমতি দেয়)।
কারণ সংক্রান্ত প্রয়োজনীয়তা
reason-এর (প্রথম স্প্যান, সমাপ্তি বা
কমা আগে) জন্য দেওয়া মানকে অবশ্যই নিম্নলিখিত সেট থেকে বেছে নিতে হবে, যেগুলিকে কার্নেল, শক্তিশালী ও স্পষ্ট
কারণে ভাগ করা হয়েছে:
- কার্নেল সেট:
- "
watchdog" "kernel_panic"
- "
- শক্তিশালী সেট:
"recovery""bootloader"
- ব্লান্ট সেট:
"cold". সাধারণত সব ডিভাইস সম্পূর্ণ রিসেট করা বোঝায়, এর মধ্যে মেমরিও অন্তর্ভুক্ত।"hard". সাধারণত, হার্ডওয়্যারের স্টেট রিসেট করা হয়েছে এবংramoopsপারসিস্টেন্ট কন্টেন্ট ধরে রাখা উচিত।"warm". সাধারণত মেমরি এবং ডিভাইসগুলি কিছু অবস্থা ধরে রাখে এবংramoops(কার্নেলেpstoreড্রাইভার দেখুন) ব্যাকিং স্টোরে স্থায়ী কন্টেন্ট থাকে।"shutdown""reboot". সাধারণত এর অর্থ হলramoopsস্ট্যাটাস অজানা এবং হার্ডওয়্যার স্ট্যাটাস অজানা। এই ভ্যালু হল একটি ক্যাচঅল, কারণcold,hardওwarmভ্যালুগুলি ডিভাইসের জন্য রিসেটের গভীরতা সম্পর্কে সূত্র প্রদান করে।
বুটলোডারকে অবশ্যই কার্নেল সেট বা ব্লান্ট সেট reason প্রদান করতে হবে এবং
subreason প্রদান করার জন্য বিশেষভাবে উৎসাহিত করা হয়, যদি এটি
নির্ধারণ করা যায়। যেমন, পাওয়ার কী বেশিক্ষণ প্রেস করলে, ব্যাক-আপ থাকতেও পারে নাও থাকতে পারে
ramoops, বুট করার কারণ
"reboot,longkey" হবে।
কোনও প্রথম-স্প্যান reason, কোনও subreason বা
detail-এর অংশ হতে পারে না। তবে, যেহেতু কার্নেল সেট করা কারণগুলি
ব্যবহারকারীর স্পেস দ্বারা তৈরি করা যায় না, তাই একটি স্পষ্ট সেট করা কারণের পরে "watchdog" আবার ব্যবহার করা হতে পারে,
সাথে সোর্সের বিবরণ (যেমন,
"reboot,watchdog,service_manager_unresponsive", বা
"reboot,software,watchdog")।
বুট হওয়ার কারণ ডিকোড করার জন্য বিশেষজ্ঞের অভ্যন্তরীণ জ্ঞানের প্রয়োজন হয় না এবং/অথবা
একটি স্বজ্ঞাত রিপোর্টের সাথে হিউম্যান রিডেবল হতে হবে। উদাহরণ:
"shutdown,vbxd" (খারাপ), "shutdown,uv" (ভাল),
"shutdown,undervoltage" (পছন্দসই)।
কারণ-উপকারণের কম্বিনেশন
Android-এ reason-subreason-এর
এমন কিছু কম্বিনেশন আছে যেগুলি স্বাভাবিক ব্যবহারের ক্ষেত্রে ওভারলোড করা উচিত নয়, তবে
কম্বিনেশনটি সংশ্লিষ্ট অবস্থাকে সঠিকভাবে প্রতিফলিত করলে, কেস-বাই-কেস ভিত্তিতে ব্যবহার করা যেতে পারে। রিজার্ভ করা কম্বিনেশনের উদাহরণের মধ্যে রয়েছে:
"reboot,userrequested""shutdown,userrequested""shutdown,thermal"(thermaldথেকে)"shutdown,battery""shutdown,battery,thermal"(BatteryStatsServiceথেকে)"reboot,adb""reboot,shell""reboot,bootloader""reboot,recovery"
আরও তথ্যের জন্য, kBootReasonMap-এ
system/core/bootstat/bootstat.cpp এবং Android সোর্স রিপোজিটরিতে সংশ্লিষ্ট git
চেঞ্জলগ ইতিহাস দেখুন।
বুট করার কারণ সম্পর্কে অভিযোগ জানানো
বুটলোডার থেকে পাওয়া বা ক্যাননিকাল বুট
কারণে রেকর্ড করা সব বুট করার কারণ অবশ্যই kBootReasonMap বিভাগের
system/core/bootstat/bootstat.cpp-এ রেকর্ড করতে হবে। kBootReasonMap তালিকায়
সম্মতি মেনে চলা ও সম্মতি না মেনে চলা
দুটি কারণই আছে। বুটলোডার ডেভেলপারদের এখানে শুধুমাত্র নতুন
নিয়ম মেনে চলা কারণ রেজিস্টার করা উচিত (এবং প্রোডাক্ট আগে থেকেই শিপ করা হয়ে থাকলে এবং পরিবর্তন করা না গেলে
নিয়ম মেনে না চলা কারণ রেজিস্টার করা উচিত নয়)।
আমরা সাজেস্ট করি যে আপনি
system/core/bootstat/bootstat.cpp-এ আগে থেকে থাকা, নিয়ম মেনে চলা এন্ট্রি ব্যবহার করুন এবং নিয়ম মেনে না চলা স্ট্রিং ব্যবহার করার আগে
সাবধানে কাজ করুন। নির্দেশিকা হিসেবে এটি হল:
- ঠিক আছে, বুটলোডার থেকে
"kernel_panic"সম্পর্কে অভিযোগ জানান, কারণbootstatহয়তramoops-এরkernel_panic signaturesপরীক্ষা করে canonicalsystem_boot_reason_prop-এ সাবরিজন আরও ভালভাবে সাজাতে পারবে। - ঠিক নয়, এই ধরনের স্ট্রিং সম্পর্কে অভিযোগ জানানো
kBootReasonMap(যেমন, বুটলোডার থেকে পাওয়া"panic"), কারণ এটি শেষ পর্যন্তreasonরিফাইন করার ক্ষমতাকে ভেঙে দেবে।
যেমন, kBootReasonMap-এ "wdog_bark" থাকলে,
বুটলোডার ডেভেলপারকে এগুলি করতে হবে:
"watchdog,bark"-এ পরিবর্তন করুন এবংkBootReasonMap-এ তালিকায় যোগ করুন।"bark"বলতে কী বোঝায় তা সেইসব ব্যক্তির কথা ভেবে দেখুন যারা এই টেকনোলজি সম্পর্কে অবগত নন এবং আরও অর্থপূর্ণsubreasonউপলভ্য আছে কিনা তা নির্ধারণ করুন।
বুট করার কারণ সংক্রান্ত সম্মতি যাচাই করুন
এই মুহূর্তে, Android এমন কোনও অ্যাক্টিভ CTS টেস্ট প্রদান করে না যা বুটলোডার প্রদান করতে পারে এমন সম্ভাব্য সমস্ত বুট কারণকে সঠিকভাবে ট্রিগার বা পরিদর্শন করতে পারে; পার্টনাররা এখনও মানানসই কিনা তা নির্ধারণ করতে প্যাসিভ টেস্ট চালানোর চেষ্টা করতে পারেন।
এর ফলে, বুটলোডার মেনে চলার জন্য বুটলোডার ডেভেলপারদের
উপরে বর্ণিত নিয়ম ও নির্দেশিকা স্বেচ্ছায় মেনে চলতে হবে।
আমরা এই ধরনের ডেভেলপারদের AOSP-তে (বিশেষ করে
system/core/bootstat/bootstat.cpp-এ) কন্ট্রিবিউট করতে এবং বুট সংক্রান্ত সমস্যার বিষয়ে আলোচনার জন্য
ফোরাম হিসেবে এই সুযোগটি ব্যবহার করার জন্য অনুরোধ করছি।