कॉन्फिगस्टोर एचएएल

एंड्रॉयड 8.0 विभाजन अखंड Android ओएस सामान्य (में system.img ) और हार्डवेयर-विशिष्ट ( vendor.img और odm.img ) विभाजन। इस परिवर्तन के परिणामस्वरूप, सिस्टम विभाजन में स्थापित मॉड्यूल से सशर्त संकलन को हटा दिया जाना चाहिए और ऐसे मॉड्यूल को रनटाइम पर सिस्टम के कॉन्फ़िगरेशन को निर्धारित करना चाहिए (और उस कॉन्फ़िगरेशन के आधार पर अलग व्यवहार करना चाहिए)।

कॉन्फिगस्टोर एचएएल एंड्रॉइड फ्रेमवर्क को कॉन्फ़िगर करने के लिए उपयोग किए जाने वाले रीड-ओनली कॉन्फ़िगरेशन आइटम तक पहुंचने के लिए एपीआई का एक सेट प्रदान करता है। यह पृष्ठ कॉन्फिगस्टोर एचएएल के डिजाइन का वर्णन करता है (और इस उद्देश्य के लिए सिस्टम गुणों का उपयोग क्यों नहीं किया गया); इस खंड में विस्तार से अन्य पन्नों एचएएल इंटरफेस , सेवा कार्यान्वयन , और क्लाइंट साइड उपयोग , सभी का उपयोग कर surfaceflinger एक उदाहरण के रूप। ConfigStore इंटरफ़ेस वर्गों के साथ मदद के लिए, इंटरफ़ेस वर्ग और आइटम जोड़ने

सिस्टम गुणों का उपयोग क्यों नहीं करें?

हमने सिस्टम गुणों का उपयोग करने पर विचार किया, लेकिन कई मूलभूत मुद्दे पाए, जिनमें शामिल हैं:

  • मूल्यों पर लंबाई सीमा। सिस्टम गुणों की उनके मानों की लंबाई (92 बाइट्स) पर सख्त सीमाएं होती हैं। इसके अलावा, चूंकि इन सीमाओं को सीधे सी मैक्रोज़ के रूप में एंड्रॉइड ऐप्स के संपर्क में लाया गया है, इसलिए लंबाई बढ़ाने से पिछड़े-संगतता के मुद्दे हो सकते हैं।
  • कोई प्रकार का समर्थन नहीं। सभी मान अनिवार्य रूप से तार कर रहे हैं, और एपीआई बस एक में स्ट्रिंग पार्स int या bool । अन्य यौगिक डेटा प्रकार (उदाहरण के लिए, सरणी और struct) इनकोडिंग किया जाना चाहिए / ग्राहकों द्वारा डिकोड (उदाहरण के लिए, "aaa,bbb,ccc" तीन तार की एक सरणी के रूप में कोडित किया जा सकता है)।
  • ओवरराइट करता है। क्योंकि केवल-पढ़ने के लिए सिस्टम गुणों को एक बार लिखने के गुणों के रूप में कार्यान्वित किया जाता है, वेंडर/ओडीएम जो एओएसपी-परिभाषित रीड-ओनली मानों को ओवरराइड करना चाहते हैं, उन्हें एओएसपी-परिभाषित रीड-ओनली मानों से पहले अपने स्वयं के रीड-ओनली मानों को आयात करना होगा। यह, बदले में, विक्रेता-परिभाषित पुनर्लेखन योग्य मूल्यों को एओएसपी-परिभाषित मूल्यों द्वारा ओवरराइड किया जा रहा है।
  • पता स्थान आवश्यकताओं। सिस्टम गुण प्रत्येक प्रक्रिया में अपेक्षाकृत बड़ी मात्रा में पता स्थान लेते हैं। सिस्टम गुण में वर्गीकृत किया prop_area 128 KB, जो सभी के लिए एक प्रक्रिया पता स्थान भले ही उस में एक एकल प्रणाली संपत्ति पहुँचा जा रहा है के लिए आवंटित किया जाता है की एक निश्चित आकार के साथ इकाइयों। यह 32-बिट उपकरणों पर समस्याएँ पैदा कर सकता है जहाँ पता स्थान कीमती है।

हमने संगतता का त्याग किए बिना इन सीमाओं को पार करने का प्रयास किया, लेकिन इस बात को लेकर चिंतित रहे कि सिस्टम गुण केवल-पढ़ने के लिए कॉन्फ़िगरेशन आइटम तक पहुँचने का समर्थन करने के लिए डिज़ाइन नहीं किए गए थे। अंततः हमने तय किया कि सिस्टम गुण वास्तविक समय में पूरे Android पर कुछ गतिशील रूप से अपडेट किए गए आइटम साझा करने के लिए बेहतर अनुकूल हैं, और यह कि केवल-पढ़ने के लिए कॉन्फ़िगरेशन आइटम तक पहुँचने के लिए समर्पित एक नई प्रणाली की आवश्यकता मौजूद है।

कॉन्फिगस्टोर एचएएल डिजाइन

मूल डिजाइन सरल है:

कॉन्फिगस्टोर एचएएल डिजाइन

चित्र 1 ConfigStore एचएएल डिजाइन

  • एचआईडीएल में बिल्ड फ्लैग (वर्तमान में सशर्त रूप से ढांचे को संकलित करने के लिए उपयोग किया जाता है) का वर्णन करें।
  • विक्रेता और ओईएम एचएएल सेवा को लागू करके झंडे बनाने के लिए एसओसी और डिवाइस-विशिष्ट मूल्य प्रदान करते हैं।
  • रनटाइम पर कॉन्फ़िगरेशन आइटम का मान खोजने के लिए एचएएल सेवा का उपयोग करने के लिए ढांचे को संशोधित करें।

वर्तमान में ढांचे द्वारा संदर्भित विन्यास आइटम एक संस्करणीकृत HIDL पैकेज (में शामिल हैं android.hardware.configstore@1.0 )। विक्रेता/OEM इस पैकेज में इंटरफेस को लागू करके कॉन्फ़िगरेशन आइटम को मान प्रदान करते हैं, और जब कॉन्फ़िगरेशन आइटम के लिए मान प्राप्त करने की आवश्यकता होती है तो फ्रेमवर्क इंटरफेस का उपयोग करता है।

सुरक्षा विचार

समान इंटरफ़ेस में परिभाषित बिल्ड फ़्लैग समान SELinux नीति से प्रभावित होते हैं। एक या अधिक का निर्माण झंडे अलग SELinux नीतियों होना चाहिए, तो वे एक और इंटरफ़ेस के लिए अलग किया जाना चाहिए। इस का प्रमुख संशोधन की आवश्यकता हो सकती android.hardware.configstore package के रूप में अलग इंटरफेस नहीं रह गया है पार्श्व-संगत कर रहे हैं।