ओडीएम के बंटवारे की सुविधा

Android 10 में, Android बिल्ड सिस्टम का इस्तेमाल करके odm पार्टीशन बनाने की सुविधा शामिल है.

ओडीएम पार्टीशन के बारे में जानकारी

ओरिजनल डिज़ाइन मैन्युफ़ैक्चरर (ओडीएम), सिस्टम-ऑन-चिप (SoC) वेंडर के बोर्ड-सहायता पैकेज (बीएसपी) को अपने डिवाइसों (बोर्ड) के हिसाब से बनाते हैं. इससे, बोर्ड के हिसाब से कॉम्पोनेंट, बोर्ड के हिसाब से डेमन या हार्डवेयर एब्स्ट्रैक्शन लेयर (एचएएल) पर अपनी सुविधाओं के लिए, कर्नेल मॉड्यूल लागू किए जा सकते हैं. वे SoC के कॉम्पोनेंट को बदलना या पसंद के मुताबिक बनाना भी चाह सकते हैं.

Android के पुराने वर्शन में, पसंद के मुताबिक बदलाव करने की सुविधा की वजह से, एक ही SoC (या एक ही फ़ैमिली के अलग-अलग SoC) वाले डिवाइसों के लिए, एक ही वेंडर इमेज का इस्तेमाल नहीं किया जा सकता था. Android 10 और इसके बाद के वर्शन में, पसंद के मुताबिक़ बनाने के लिए, अलग odm पार्टीशन का इस्तेमाल किया जा सकता है. इससे, कई हार्डवेयर SKU के लिए, एक ही वेंडर इमेज का इस्तेमाल किया जा सकता है.

प्रॉडक्ट और ODM पार्टिशन का इस्तेमाल करना

Android 9 में, product पार्टिशन बनाने की सुविधा जोड़ी गई है. इससे, अलग-अलग product.img इमेज से सप्लाई किए गए कई सॉफ़्टवेयर SKU के लिए, एक ही सिस्टम इमेज का इस्तेमाल किया जा सकता है. product पार्टीशन, सॉफ़्टवेयर SKU के लिए है, जबकि odm पार्टीशन, हार्डवेयर SKU के लिए है.

खास प्रॉडक्ट और ओडीएम पार्टीशन की मदद से, system पार्टिशन का इस्तेमाल करके, कई सॉफ़्टवेयर SKU के बीच शेयर करने के लिए सामान्य कोड होस्ट किया जा सकता है. साथ ही, vendor पार्टिशन का इस्तेमाल करके, किसी खास SoC के आधार पर कई डिवाइसों के बीच शेयर करने के लिए, SoC के हिसाब से BSP कोड होस्ट किया जा सकता है.

अलग-अलग पार्टीशन का इस्तेमाल करने के कुछ नुकसान हैं. जैसे, डिस्क स्टोरेज को मैनेज करना मुश्किल हो जाता है. उदाहरण के लिए, आपको आने वाले समय में स्टोरेज की ज़रूरत के हिसाब से कुछ स्टोरेज खाली रखना होगा. हालांकि, Android 10 में डाइनैमिक पार्टीशन की सुविधा उपलब्ध है. इससे डिस्क से जुड़ी समस्या हल हो जाती है. साथ ही, ओवर-द-एयर (ओटीए) अपडेट के दौरान, डिवाइस को फिर से बांटने की सुविधा मिलती है.

ओडीएम कॉम्पोनेंट

odm पार्टीशन में, vendor पार्टीशन की तरह ही, ओडीएम के हिसाब से ये कॉम्पोनेंट शामिल होते हैं. इनकी जानकारी नीचे दी गई टेबल में दी गई है.

ओडीएम के हिसाब से कॉम्पोनेंट जगह की जानकारी
लोड किए जा सकने वाले कर्नेल मॉड्यूल (LKMs) /odm/lib/modules/*.ko
स्थानीय लाइब्रेरी /odm/lib[64]
एचएएल /odm/lib[64]/hw
SEPolicy /odm/etc/selinux
VINTF ऑब्जेक्ट का डेटा /odm/etc/vintf
init.rc फ़ाइलें /odm/etc/init
सिस्टम प्रॉपर्टी /odm/build.prop
रनटाइम रिसॉर्स ओवरले (आरआरओ) /odm/overlay/*.apk
ऐप्लिकेशन /odm/app/*.apk
Priv-apps /odm/priv-app/*.apk
Java लाइब्रेरी /odm/framework/*.jar
Android फ़्रेमवर्क सिस्टम कॉन्फ़िगरेशन /odm/etc/sysconfig/* और /odm/etc/permissions/*

पसंद के मुताबिक इमेज नहीं हैं

कस्टम इमेज का इस्तेमाल न करें, क्योंकि इनके साथ ये काम नहीं किए जा सकते:

  • किसी खास टारगेट के लिए मॉड्यूल इंस्टॉल करना. कस्टम इमेज में आर्टफ़ैक्ट को कॉपी किया जा सकता है. हालांकि, बिल्ड नियम के हिस्से के तौर पर टारगेट पार्टिशन तय करके, किसी खास पार्टिशन में मॉड्यूल इंस्टॉल नहीं किया जा सकता.
  • Soong. custom_images को Soong बिल्ड सिस्टम का इस्तेमाल करके नहीं बनाया जा सकता.
  • ओटीए अपडेट. कस्टम इमेज का इस्तेमाल, फ़ैक्ट्री ROM इमेज के तौर पर किया जाता है. इन्हें ओटीए (ओवर-द-एयर) के ज़रिए अपडेट नहीं किया जा सकता.

पार्टीशन के बीच एबीआई (ऐप्लिकेशन बाइनरी इंटरफ़ेस) बनाए रखना

odm पार्टीशन, vendor पार्टिशन का एक्सटेंशन है. ऐप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई) के स्थिर होने पर विचार करते समय, यहां दिए गए आर्किटेक्चर को ध्यान में रखें.

पार्टीशन के बीच एबीआई (ऐप्लिकेशन बाइनरी इंटरफ़ेस) बनाए रखना

पहली इमेज. पार्टीशन के बीच एबीआई को बनाए रखना.

  • odm और vendor के बीच, एबीआई की स्थिरता नहीं है. दोनों पार्टीशन को एक ही समय पर अपग्रेड करना होगा.
  • odm और vendor सेगमेंट एक-दूसरे पर निर्भर हो सकते हैं. हालांकि, vendor सेगमेंट को odm सेगमेंट के बिना काम करना ज़रूरी है.
  • odm और system के बीच का एबीआई, vendor और system के बीच के एबीआई जैसा ही है.

product पार्टीशन और vendor या odm पार्टीशन के बीच सीधे तौर पर इंटरैक्शन अनुमति नहीं है. (यह SEpolicy से लागू होता है.)

ओडीएम पार्टीशन लागू करना

नया पार्टीशन लागू करने से पहले, AOSP में हुए इससे जुड़े बदलावों की समीक्षा करें.

ओडीएम पार्टीशन सेट अप करना

odm पार्टीशन सेट अप करने के लिए, ये बिल्ड फ़्लैग शामिल करें:

  • BOARD_ODMIMAGE_PARTITION_SIZE, पार्टिशन के तय साइज़ के लिए
  • डाइनैमिक पार्टीशन के साइज़ के लिए, PRODUCT_USE_DYNAMIC_PARTITIONS और BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE
  • BOARD_ODMIMAGE_FILE_SYSTEM_TYPE फ़ाइल सिस्टम का टाइप, जिसका इस्तेमाल ODM इमेज के लिए किया जाता है
  • /odm/build.prop के लिए PRODUCT_ODM_PROPERTIES, $(call inherit-product path/to/device.mk) में इस्तेमाल करने के लिए, जैसा कि PRODUCT_ODM_PROPERTIES += product.abc=ok में है

किसी ओडीएम पार्टीशन में मॉड्यूल इंस्टॉल करना

odm पार्टीशन में मॉड्यूल इंस्टॉल करने के लिए, इन बिल्ड फ़्लैग का इस्तेमाल करें:

  • device_specific: true, Android.bp में है
  • LOCAL_ODM_MODULE := true, Android.mk में है

वेरिफ़ाइड बूट मोड चालू करना

नुकसान पहुंचाने वाले सॉफ़्टवेयर को odm पार्टीशन में बदलाव करने से रोकने के लिए, उन पार्टीशन के लिए Android की पुष्टि की गई बूट (AVB) सुविधा चालू करें. ठीक उसी तरह जैसे आपने vendor और system पार्टीशन के लिए किया है.

एवीबी को चालू करने के लिए, बिल्ड फ़्लैग BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS शामिल करें. डाइनैमिक पार्टीशन पर एवीबी कॉन्फ़िगर करने के बारे में जानकारी के लिए, एवीबी कॉन्फ़िगरेशन में हुए बदलाव लेख पढ़ें.

/odm को किसी अन्य /vendor पार्टीशन के तौर पर इस्तेमाल करना

यह पक्का करने के लिए कि सिस्टम, odm पार्टीशन को vendor पार्टीशन के तौर पर मैनेज करे, हार्ड कोड किए गए किसी भी vendor रेफ़रंस को हार्डवेयर पर आधारित पार्टीशन (फ़िलहाल odm और vendor) के सेट से बदलें. प्लैटफ़ॉर्म में vendor रेफ़रंस की अहम जगहों में, डाइनैमिक लिंकर, पैकेज मैनेजर, और shell/libc शामिल हैं.