Android 15 (एओएसपी एक्सपेरिमेंट के तौर पर उपलब्ध) और उसके बाद के वर्शन में, Android 15 और इसके बाद के वर्शन का इस्तेमाल किया जा सकता है ऐसा Android डिवाइस जिसका पेज साइज़ 16 केबी होना चाहिए. यह विकल्प ज़्यादा मेमोरी का इस्तेमाल करता है, लेकिन सिस्टम की परफ़ॉर्मेंस को बेहतर बनाता है.
16 केबी वाले पेज सिर्फ़ 16 केबी कर्नेल वाले arm64
टारगेट पर काम करते हैं.
हालांकि,
कटलफ़िश के लिए, x86_64
पर 16 केबी यूज़रस्पेस को सिम्युलेट करना.
16 केबी वाले पेजों को चालू करने के लिए, डिवाइस पर इन बिल्ड विकल्पों को सेट करें:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
,PAGE_SIZE
को हटा देता है परिभाषित किया जा सकता है और इससे कॉम्पोनेंट रनटाइम के दौरान पेज का साइज़ तय कर पाते हैं.PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
, जो प्लैटफ़ॉर्म ELF फ़ाइलों को पक्का करता है 16 केबी अलाइनमेंट के साथ बनाए जाते हैं. यह ज़रूरत से बड़ा साइज़ साथ काम करता है. 16 केबी ईएलएफ़ अलाइनमेंट के साथ, कर्नेल पेज का साइज़ 4 केबी/16 केबी होना चाहिए.
बिल्ड फ़्लैग की पुष्टि करें
lunch
टारगेट चुनने के बाद, पुष्टि करें कि बिल्ड फ़्लैग सेट अप किए गए हैं
सही तरीके से सीखने के लिए:
$ source build/envsetup.sh
$ lunch target
$ get_build_var TARGET_MAX_PAGE_SIZE_SUPPORTED
16384
$ get_build_var TARGET_NO_BIONIC_PAGE_SIZE_MACRO
true
अगर पिछले दो निर्देशों की वैल्यू के तौर पर 16384
और true
दिखता है, तो आपका बिल्ड
फ़्लैग सही तरीके से सेट अप किए गए हैं.
16 केबी ईएलएफ़ अलाइनमेंट के साथ शेयर की गई लाइब्रेरी बनाएं
ऐसी शेयर की गई लाइब्रेरी बनाने के लिए जो android प्रोजेक्ट, आपको अपने टारगेट में सिर्फ़ इन बिल्ड फ़्लैग को सेट करना होगा:
PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384
ऐसी शेयर की गई लाइब्रेरी बनाना जो इसका हिस्सा नहीं हैं android प्रोजेक्ट, तो आपको यह लिंकर फ़्लैग भेजना होगा:
-Wl,-z,max-page-size=16384
16 केबी ईएलएफ़ अलाइनमेंट के लिए, बाइनरी और पहले से बनी चीज़ों की पुष्टि करें
अलाइनमेंट और रनटाइम के व्यवहार की पुष्टि करने का सबसे अच्छा तरीका है कि टेस्ट करें और 16 केबी का कंपाइल किया गया कर्नेल. हालांकि, कुछ समस्याओं को शुरुआत में ही पकड़ने के लिए:
Android W (AOSP प्रयोगात्मक) में शुरू हो रहा है, आप बिल्ड के समय
PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true
. इस्तेमाल की जाने वाली चीज़ेंAndroid.bp
मेंignore_max_page_size: true
औरAndroid.mk
मेंLOCAL_IGNORE_MAX_PAGE_SIZE := true
को कुछ समय के लिए अनदेखा करने के लिए उन्हें. ये सेटिंग, पहले से बनी सभी चीज़ों की पुष्टि करती हैं. साथ ही, इससे आपको यह पता लगाने की सुविधा मिलती है कि कब कोई को अपडेट किया जाता है, लेकिन 16 केबी में अलाइन नहीं होता है.आप
atest elf_alignment_test
चला सकते है, जो इस ऐप्लिकेशन से लॉन्च होने वाले डिवाइसों पर, उपयोगकर्ता के डिवाइस पर मौजूद ELF फ़ाइलें Android 15 (एओएसपी एक्सपेरिमेंट के तौर पर उपलब्ध) और इसके बाद के वर्शन.