Android 12-এ DebugFS ব্যবহার করা

যেসব ডিভাইস Android 12-এর সাথে লঞ্চ করে এবং যেগুলির কার্নেল ভার্সন v5.4-এর থেকে বেশি, সেগুলিতে GKI কার্নেল থাকতে হবে। এর ফলে, GKI কার্নেলে ডেভেলপ করার সময় পার্টনাররা userdebug বিল্ডে DebugFS অ্যাক্সেস করতে পারেন। GKI defconfig-এ কার্নেল কনফিগারেশন CONFIG_DEBUG_FS চালু করা আছে। Android 12-এ লঞ্চ করা ডিভাইসের জন্য ইউজার বিল্ডে DebugFS কখনওই মাউন্ট করবেন না।

ইউজার বিল্ডের তুলনায় ইউজারডিবাগ বিল্ডে আরও ভাল টেস্ট কভারেজ থাকে এবং ডেভেলপমেন্ট সাইকেল জুড়ে এটি ব্যাপকভাবে টেস্ট করা হয়। নিম্নলিখিত প্ল্যানটি DebugFS অ্যাক্সেসের ক্ষেত্রে দুই ধরনের বিল্ডের মধ্যে পার্থক্য কম করে এবং এইসব সুবিধা প্রদান করে:

  • নতুন ফাংশনালিটির জন্য userdebug বিল্ড যাতে ভুলবশত DebugFS -এর উপর নির্ভর না করে তা প্রতিরোধ করে
  • DebugFS-এর অভাবের কারণে ভেঙে যাওয়া যেকোনও বিদ্যমান কার্যকারিতা ডেভেলপমেন্ট চক্রের প্রথম দিকে জানা যায় তা নিশ্চিত করে

ইউজারডিবাগ বিল্ডে Debugfs অ্যাক্সেসকে নিম্নলিখিত ক্যাটাগরিতে ভাগ করা হয়েছে:

  1. DebugFS ডিভাইস বুট করার সময় ফাইল ইনিশিয়ালাইজেশন, যেমন, debug ডেটা কালেকশন চালু করতে DebugFS-এ কোনও ফাইলে লেখার অ্যাক্সেস।
  2. বাগরিপোর্ট তৈরি: dumpstate-এর মাধ্যমে DumpstateBoard() কল করা হলে dumpstate HAL DebugFS ফাইল পড়ে। এই তথ্য সমস্যার রিপোর্টের অংশ হয়ে যায়।
  3. ডিভাইস-নির্দিষ্ট টেস্টিং ও যাচাইকরণ।

Android 12-এ এই তিনটি বিভাগের প্রতিটি কীভাবে কাজ করে তা নিম্নলিখিত সারণীতে বর্ণনা করা হয়েছে। মনে রাখবেন যে নিচে উল্লেখ করা বিষয়গুলি শুধুমাত্র userdebug বিল্ডের ক্ষেত্রে প্রযোজ্য, কারণ DebugFS-কে ব্যবহারকারীর বিল্ডে মাউন্ট করা যায় না।

ব্যবহারের উদাহরণ Android 12 userdebug বিল্ড
স্টার্ট-আপের সময় DebugFS ফাইল একবারই ইনিশিয়ালাইজ করা হয়। বুট করার সময় এই অ্যাক্সেস একবারই হয়। HAL ইনিশিয়ালাইজেশনের সময় Dumpstate HAL এটি করে। এটি চালু করতে, HAL ইনিশিয়ালাইজ করার আগে userdebug বিল্ডে DebugFS মাউন্ট ইনিট করুন। ডিভাইস বুট করা সম্পূর্ণ হলে Init DebugFS-এ umount() কল করে।
সমস্যার রিপোর্ট জেনারেশন: dumpstate HAL, DebugFS ফাইল পড়ে, যা সমস্যার রিপোর্টের অংশ হয়ে যায়। dumpstate HAL-এর মাধ্যমে DumpstateBoard()-এর মধ্যে করা হয় যখন dumpstate (DumpstateDevice.cpp) দ্বারা আহ্বান করা হয়। ডাম্পস্টেট টুল (Android ফ্রেমওয়ার্কের অংশ) নিশ্চিত করে যে ইনভোকেশনের সময় DebugFS মাউন্ট করা হয়।
ডিভাইস-নির্দিষ্ট টেস্টিং ও যাচাইকরণ Adb রুট এবং শেল। adb শেল থেকে DebugFS মাউন্ট করুন রুট অ্যাক্সেস১।

১রুট অ্যাক্সেস সহ adb shell থেকে DebugFS মাউন্ট করতে, এই কমান্ড ব্যবহার করুন:

adb shell mount -t debugfs debugfs /sys/kernel/debug।

পার্টনারকে যেসব অ্যাকশন নিতে হবে

Android 12 ডিভাইসে এই পরিবর্তনের ভিত্তিতে পার্টনারদের নিম্নলিখিত কাজগুলি করতে হবে:

  • ডাম্পস্টেট HAL ইনিশিয়ালাইজেশনের সময় DebugFS নোডের সব বুট টাইম ইনিশিয়ালাইজেশন সম্পূর্ণ করুন। এটি কীভাবে করতে হয় তার উদাহরণ দেখতে, DNM: Example for boot time initialization of DebugFS files দেখুন।
  • রানটাইম চলাকালীন DebugFS-কে অ্যাক্সেস করার অনুমতি দেবেন না। নিম্নলিখিত ব্যতিক্রম প্রযোজ্য:
    • সমস্যার রিপোর্ট তৈরি করা (dumpstate HAL থেকে আসে)
    • টেস্টিং ও যাচাইকরণ (adb root ও shell-এর মাধ্যমে অ্যাক্সেস করা যায় - প্রথমে DebugFS মাউন্ট করা হয়েছে কিনা তা নিশ্চিত করুন)

ব্যবহারকারী এবং ইঞ্জিনিয়ারিং বিল্ডে রিবুট করার সময় persist.dbg.keep_debugfs_mounted মাউন্ট করা DebugFs রাখার জন্য ডেভেলপাররা ডিবাগ পারসিস্টেন্ট প্রপার্টি সেট করতে পারেন।

GTS কমপ্লায়েন্স টেস্ট নিশ্চিত করে যে DebugFSফাইলসিস্টেম ব্যবহারকারীর বিল্ডে মাউন্ট করা নেই। Sepolicy neverallow বিবৃতি নিশ্চিত করে যে Android 12 বা তার পরের যেকোনও ভার্সনে লঞ্চ করা ডিভাইসে, অননুমোদিত প্রসেসকে DebugFs-এ অ্যাক্সেস দেওয়া হয় না।