ConfigStore HAL

Android 10-এ, ConfigStore HAL, vendor পার্টিশনে কনফিগারেশন ভ্যালু স্টোর করতে বিল্ড ফ্ল্যাগ ব্যবহার করে এবং system পার্টিশনে থাকা কোনও পরিষেবা HIDL ব্যবহার করে সেইসব ভ্যালু অ্যাক্সেস করে (এটি Android 9-এর ক্ষেত্রেও প্রযোজ্য)। তবে, বেশি মেমরি খরচ এবং ব্যবহারের জটিলতার কারণে, ConfigStore HAL-এর ব্যবহার বন্ধ করা হয়েছে।

ConfigStore HAL, পুরনো ভেন্ডর পার্টিশনকে সাপোর্ট করার জন্য AOSP-তে থেকে যায়। Android 10 বা তার পরবর্তী ভার্সনে রান করা ডিভাইসে, surfaceflinger প্রথমে সিস্টেম প্রপার্টি পড়ে; SurfaceFlingerProperties.sysprop-এ কোনও কনফিগারেশন আইটেমের জন্য সিস্টেম প্রপার্টি নির্দিষ্ট করা না থাকলে, surfaceflinger ConfigStore HAL-এ ফিরে যায়।

Android 8.0, মনোলিথিক Android OS-কে জেনেরিক (system.img) ও হার্ডওয়্যার-নির্দিষ্ট (vendor.img ও odm.img) পার্টিশনে ভাগ করে। এই পরিবর্তনের ফলে, সিস্টেম পার্টিশনে ইনস্টল করা মডিউল থেকে কন্ডিশনাল কম্পাইলেশন সরিয়ে দিতে হবে এবং এই ধরনের মডিউলকে রানটাইমে সিস্টেমের কনফিগারেশন নির্ধারণ করতে হবে (এবং সেই কনফিগারেশনের উপর নির্ভর করে আলাদাভাবে আচরণ করতে হবে)।

ConfigStore HAL, Android ফ্রেমওয়ার্ক কনফিগার করতে ব্যবহৃত রিড-অনলি কনফিগারেশন আইটেম অ্যাক্সেস করার জন্য API-এর একটি সেট প্রদান করে। এই পৃষ্ঠায় ConfigStore HAL-এর ডিজাইন (এবং এই উদ্দেশ্যের জন্য কেন সিস্টেম প্রপার্টি ব্যবহার করা হয়নি) সম্পর্কে বর্ণনা করা হয়েছে; এই বিভাগের অন্যান্য পৃষ্ঠায় HAL ইন্টারফেস, পরিষেবা ইমপ্লিমেন্টেশন এবং ক্লায়েন্ট-সাইড ব্যবহার সম্পর্কে বিস্তারিত বলা হয়েছে, সবকটিই surfaceflinger-কে উদাহরণ হিসেবে ব্যবহার করে। ConfigStore ইন্টারফেস ক্লাস সম্পর্কে সাহায্য পেতে, ইন্টারফেস ক্লাস ও আইটেম যোগ করা দেখুন।

সিস্টেম প্রপার্টি কেন ব্যবহার করা হয় না?

আমরা সিস্টেম প্রপার্টি ব্যবহার করার কথা বিবেচনা করেছিলাম, কিন্তু বেশ কিছু মৌলিক সমস্যা দেখতে পেয়েছি, যার মধ্যে এগুলি অন্তর্ভুক্ত:

  • ভ্যালুর উপর দৈর্ঘ্যের সীমা। সিস্টেম প্রপার্টির ভ্যালুর দৈর্ঘ্যের উপর কঠোর সীমা (৯২ বাইট) আছে। এছাড়াও, যেহেতু এইসব সীমা C ম্যাক্রো হিসেবে সরাসরি Android অ্যাপের কাছে প্রকাশ করা হয়েছে, তাই দৈর্ঘ্য বাড়ালে ব্যাকওয়ার্ড-কম্প্যাটিবিলিটি সংক্রান্ত সমস্যা হতে পারে।
  • কোনও ধরনের সহায়তা নেই। সব ভ্যালু মূলত স্ট্রিং এবং API স্ট্রিংটিকে int বা bool-এ পার্স করে। অন্যান্য যৌগিক ডেটা টাইপ (যেমন, অ্যারে ও স্ট্রাক্ট) ক্লায়েন্টদের দ্বারা এনকোড/ডিকোড করা উচিত (যেমন, "aaa,bbb,ccc"-কে তিনটি স্ট্রিংয়ের অ্যারে হিসেবে কোড করা যেতে পারে)।
  • ওভাররাইট করা। যেহেতু শুধুমাত্র-পড়ার-উপযোগী সিস্টেম প্রপার্টি একবার-লেখার-উপযোগী প্রপার্টি হিসেবে প্রয়োগ করা হয়, তাই যেসব ভেন্ডর/ODM, AOSP-নির্ধারিত শুধুমাত্র-পড়ার-উপযোগী ভ্যালু ওভাররাইড করতে চায়, তাদের অবশ্যই AOSP-নির্ধারিত শুধুমাত্র-পড়ার-উপযোগী ভ্যালুর আগে নিজেদের শুধুমাত্র-পড়ার-উপযোগী ভ্যালু ইমপোর্ট করতে হবে। এর ফলে, AOSP-এর সংজ্ঞায়িত ভ্যালু দ্বারা ভেন্ডর-সংজ্ঞায়িত আবার লেখা যায় এমন ভ্যালু ওভাররাইড হয়ে যায়।
  • ঠিকানা সংক্রান্ত প্রয়োজনীয়তা। সিস্টেম প্রপার্টি প্রতিটি প্রসেসে তুলনামূলকভাবে অনেক বেশি অ্যাড্রেস স্পেস নেয়। সিস্টেম প্রপার্টিগুলিকে ১২৮ KB-এর নির্দিষ্ট সাইজের prop_area ইউনিটে গ্রুপ করা হয়, এগুলির সবকটিই প্রসেস অ্যাড্রেস স্পেসে অ্যাসাইন করা হয়, এমনকি যদি সেটির মধ্যে থাকা কোনও একটি সিস্টেম প্রপার্টি অ্যাক্সেস করা হয়। এর ফলে ৩২-বিট ডিভাইসে সমস্যা হতে পারে যেখানে অ্যাড্রেস স্পেস খুবই মূল্যবান।

আমরা কম্প্যাটিবিলিটি বজায় রেখে এই সীমাবদ্ধতাগুলি অতিক্রম করার চেষ্টা করেছি, কিন্তু সিস্টেম প্রপার্টিগুলি শুধুমাত্র-পঠনযোগ্য কনফিগারেশন আইটেম অ্যাক্সেস করার জন্য ডিজাইন করা হয়নি বলে আমরা এখনও চিন্তিত। অবশেষে আমরা সিদ্ধান্ত নিয়েছি যে রিয়েল টাইমে Android-এর সব ভার্সন জুড়ে ডায়নামিক আপডেট করা আইটেম শেয়ার করার জন্য সিস্টেম প্রপার্টি বেশি উপযুক্ত এবং শুধু-পঠনযোগ্য কনফিগারেশন আইটেম অ্যাক্সেস করার জন্য একটি নতুন সিস্টেমের প্রয়োজন আছে।

ConfigStore HAL ডিজাইন

এর প্রাথমিক ডিজাইনটি খুব সহজ:

Configstore HAL ডিজাইন

ছবি ১. ConfigStore HAL ডিজাইন

  • HIDL-এ বিল্ড ফ্ল্যাগ (ফ্রেমওয়ার্কের কন্ডিশনাল কম্পাইলেশনের জন্য ব্যবহৃত হয়) সম্পর্কে বর্ণনা দাও।
  • ভেন্ডর ও OEM-রা HAL পরিষেবা ইমপ্লিমেন্ট করার মাধ্যমে বিল্ড ফ্ল্যাগের জন্য SoC ও ডিভাইস-নির্দিষ্ট ভ্যালু প্রদান করে।
  • রানটাইমে কনফিগারেশন আইটেমের ভ্যালু খুঁজে পেতে HAL পরিষেবা ব্যবহার করার জন্য ফ্রেমওয়ার্ক পরিবর্তন করুন।

ফ্রেমওয়ার্কের রেফারেন্স করা কনফিগারেশন আইটেমগুলি একটি ভার্সন করা HIDL প্যাকেজে (android.hardware.configstore@1.0) অন্তর্ভুক্ত থাকে। এই প্যাকেজে ইন্টারফেস প্রয়োগ করার মাধ্যমে ভেন্ডর/OEM কনফিগারেশন আইটেমের ভ্যালু প্রদান করে এবং ফ্রেমওয়ার্ক কনফিগারেশন আইটেমের ভ্যালু পাওয়ার প্রয়োজন হলে ইন্টারফেস ব্যবহার করে।

নিরাপত্তা সংক্রান্ত বিষয়

একই ইন্টারফেসে ডিফাইন করা বিল্ড ফ্ল্যাগ একই SELinux নীতি দ্বারা প্রভাবিত হয়। এক বা একাধিক বিল্ড ফ্ল্যাগে আলাদা আলাদা SELinux নীতি থাকলে, সেগুলিকে অবশ্যই অন্য ইন্টারফেসে আলাদা করতে হবে। এর জন্য android.hardware.configstore package-এ বড় ধরনের পরিবর্তন করতে হতে পারে, কারণ আলাদা করা ইন্টারফেসগুলি আর ব্যাকওয়ার্ড কম্প্যাটিবল নয়।