অ্যান্ড্রয়েড 10-এ, কনফিগস্টোর এইচএএল বিল্ড ফ্ল্যাগ ব্যবহার করে vendor
পার্টিশনে কনফিগার মান সংরক্ষণ করতে, এবং system
পার্টিশনের একটি পরিষেবা HIDL ব্যবহার করে সেই মানগুলি অ্যাক্সেস করে (এটি Android 9 এও সত্য)। যাইহোক, উচ্চ মেমরি খরচ এবং কঠিন ব্যবহারের কারণে, ConfigStore HAL অবচয় করা হয়েছে।
লিগ্যাসি ভেন্ডর পার্টিশন সমর্থন করার জন্য ConfigStore HAL AOSP-তে রয়ে গেছে। Android 10 বা তার পরে চলমান ডিভাইসগুলিতে, surfaceflinger
প্রথমে সিস্টেমের বৈশিষ্ট্যগুলি পড়ে; যদি `SurfaceFlingerProperties.sysprop`-এ কোনো কনফিগার আইটেমের জন্য কোনো সিস্টেম প্রপার্টি সংজ্ঞায়িত করা না থাকে, তাহলে `surfaceflinger` আবার কনফিগস্টোর HAL-এ পড়ে।
Android 8.0 মনোলিথিক অ্যান্ড্রয়েড ওএসকে জেনেরিক ( system.img
) এবং হার্ডওয়্যার-নির্দিষ্ট ( vendor.img
এবং odm.img
) পার্টিশনে বিভক্ত করে। এই পরিবর্তনের ফলে, সিস্টেম পার্টিশনে ইনস্টল করা মডিউলগুলি থেকে শর্তসাপেক্ষ কম্পাইলেশন মুছে ফেলতে হবে এবং এই ধরনের মডিউলগুলিকে অবশ্যই রানটাইমে সিস্টেমের কনফিগারেশন নির্ধারণ করতে হবে (এবং সেই কনফিগারেশনের উপর নির্ভর করে ভিন্নভাবে আচরণ করবে)।
ConfigStore HAL Android ফ্রেমওয়ার্ক কনফিগার করতে ব্যবহৃত শুধুমাত্র-পঠনযোগ্য কনফিগারেশন আইটেমগুলি অ্যাক্সেস করার জন্য API-এর একটি সেট সরবরাহ করে। এই পৃষ্ঠাটি ConfigStore HAL এর নকশা বর্ণনা করে (এবং কেন সিস্টেম বৈশিষ্ট্য এই উদ্দেশ্যে ব্যবহার করা হয়নি); এই বিভাগের অন্যান্য পৃষ্ঠাগুলি HAL ইন্টারফেস , পরিষেবা বাস্তবায়ন , এবং ক্লায়েন্ট-সাইড ব্যবহার সম্পর্কে বিশদ বিবরণ দেয়, সমস্ত একটি উদাহরণ হিসাবে surfaceflinger
ব্যবহার করে। ConfigStore ইন্টারফেস ক্লাসে সাহায্যের জন্য, ইন্টারফেস ক্লাস এবং আইটেম যোগ করা দেখুন।
কেন সিস্টেম বৈশিষ্ট্য ব্যবহার করবেন না?
আমরা সিস্টেমের বৈশিষ্ট্যগুলি ব্যবহার করার কথা বিবেচনা করেছি কিন্তু বেশ কয়েকটি মৌলিক সমস্যা পেয়েছি, যার মধ্যে রয়েছে:
- মানগুলির দৈর্ঘ্যের সীমা। সিস্টেমের বৈশিষ্ট্যগুলি তাদের মানগুলির (92 বাইট) দৈর্ঘ্যের উপর কঠোর সীমাবদ্ধ। উপরন্তু, যেহেতু এই সীমাগুলি সরাসরি সি ম্যাক্রো হিসাবে অ্যান্ড্রয়েড অ্যাপগুলিতে প্রকাশ করা হয়েছে, তাই দৈর্ঘ্য বাড়ানোর ফলে পিছিয়ে-সামঞ্জস্যতার সমস্যা হতে পারে।
- কোন প্রকার সমর্থন নেই। সমস্ত মানই মূলত স্ট্রিং, এবং APIগুলি স্ট্রিংটিকে
int
বাbool
এ পার্স করে। অন্যান্য যৌগিক ডেটা প্রকারগুলি (উদাহরণস্বরূপ, অ্যারে এবং স্ট্রাকট) ক্লায়েন্টদের দ্বারা এনকোড/ডিকোড করা উচিত (উদাহরণস্বরূপ,"aaa,bbb,ccc"
তিনটি স্ট্রিংয়ের অ্যারে হিসাবে কোড করা যেতে পারে)। - ওভাররাইট করে। যেহেতু শুধুমাত্র-পঠনযোগ্য সিস্টেম বৈশিষ্ট্যগুলি একবার লেখার বৈশিষ্ট্য হিসাবে প্রয়োগ করা হয়, বিক্রেতা/ODM যেগুলি AOSP-সংজ্ঞায়িত শুধুমাত্র-পঠনযোগ্য মানগুলিকে ওভাররাইড করতে চায় তাদের অবশ্যই AOSP-সংজ্ঞায়িত শুধুমাত্র-পঠনযোগ্য মানগুলির আগে তাদের নিজস্ব পঠনযোগ্য মানগুলি আমদানি করতে হবে। এর ফলে, বিক্রেতা-সংজ্ঞায়িত পুনর্লিখনযোগ্য মানগুলি AOSP-সংজ্ঞায়িত মানগুলি দ্বারা ওভাররাইড করা হয়।
- ঠিকানা স্থান প্রয়োজনীয়তা. সিস্টেম বৈশিষ্ট্য প্রতিটি প্রক্রিয়ায় একটি অপেক্ষাকৃত বড় পরিমাণ ঠিকানা স্থান নেয়। সিস্টেমের বৈশিষ্ট্যগুলিকে 128 KB এর নির্দিষ্ট আকার সহ
prop_area
ইউনিটগুলিতে গোষ্ঠীভুক্ত করা হয়, যার সবকটি একটি প্রসেস অ্যাড্রেস স্পেসে বরাদ্দ করা হয় এমনকি যদি এটিতে শুধুমাত্র একটি সিস্টেমের বৈশিষ্ট্য অ্যাক্সেস করা হয়। এটি 32-বিট ডিভাইসে সমস্যা সৃষ্টি করতে পারে যেখানে ঠিকানার স্থান মূল্যবান।
আমরা সামঞ্জস্যতা ত্যাগ না করে এই সীমাবদ্ধতাগুলি অতিক্রম করার চেষ্টা করেছি, তবে উদ্বিগ্ন হয়েছি যে সিস্টেমের বৈশিষ্ট্যগুলি কেবল-পঠন-পাঠন কনফিগারেশন আইটেমগুলি অ্যাক্সেস করার জন্য ডিজাইন করা হয়নি। অবশেষে আমরা সিদ্ধান্ত নিয়েছি যে সিস্টেমের বৈশিষ্ট্যগুলি রিয়েল টাইমে সমস্ত অ্যান্ড্রয়েড জুড়ে কয়েকটি গতিশীলভাবে আপডেট করা আইটেম ভাগ করে নেওয়ার জন্য আরও উপযুক্ত, এবং শুধুমাত্র-পঠনযোগ্য কনফিগারেশন আইটেমগুলি অ্যাক্সেস করার জন্য নিবেদিত একটি নতুন সিস্টেমের প্রয়োজন রয়েছে৷
কনফিগস্টোর এইচএএল ডিজাইন
মৌলিক নকশা সহজ:
চিত্র 1. ConfigStore HAL ডিজাইন
- HIDL-এ বিল্ড পতাকা (বর্তমানে শর্তসাপেক্ষে ফ্রেমওয়ার্ক কম্পাইল করার জন্য ব্যবহৃত) বর্ণনা করুন।
- বিক্রেতারা এবং OEMগুলি HAL পরিষেবা বাস্তবায়নের মাধ্যমে পতাকা তৈরির জন্য SoC এবং ডিভাইস-নির্দিষ্ট মান প্রদান করে।
- রানটাইমে একটি কনফিগারেশন আইটেমের মান খুঁজে পেতে HAL পরিষেবা ব্যবহার করার জন্য কাঠামো পরিবর্তন করুন।
বর্তমানে ফ্রেমওয়ার্ক দ্বারা উল্লেখ করা কনফিগারেশন আইটেমগুলি একটি সংস্করণযুক্ত HIDL প্যাকেজে অন্তর্ভুক্ত করা হয়েছে ( android.hardware.configstore@1.0
)। বিক্রেতা/ওইএম এই প্যাকেজে ইন্টারফেসগুলি প্রয়োগ করে কনফিগারেশন আইটেমগুলির মান প্রদান করে এবং যখন একটি কনফিগারেশন আইটেমের জন্য একটি মান পেতে হয় তখন ফ্রেমওয়ার্ক ইন্টারফেসগুলি ব্যবহার করে।
নিরাপত্তা বিবেচনা
একই ইন্টারফেসে সংজ্ঞায়িত বিল্ড পতাকা একই SELinux নীতি দ্বারা প্রভাবিত হয়। যদি এক বা একাধিক বিল্ড ফ্ল্যাগের আলাদা SELinux পলিসি থাকা উচিত, সেগুলিকে অন্য ইন্টারফেসে আলাদা করতে হবে । এর জন্য android.hardware.configstore package
বড় ধরনের সংশোধনের প্রয়োজন হতে পারে কারণ আলাদা করা ইন্টারফেসগুলি আর পশ্চাদমুখী-সামঞ্জস্যপূর্ণ নয়।