Android 12 में, बूट कॉन्फ़िगरेशन सुविधा
Android 11 में androidboot.*
कर्नेल cmdline विकल्प का इस्तेमाल किया जा रहा है
और उससे कम. बूट कॉन्फ़िगरेशन सुविधा, कॉन्फ़िगरेशन पास करने का तरीका है
बिल्ड और बूटलोडर से लेकर Android 12 तक की पूरी जानकारी.
यह सुविधा Android के लिए कॉन्फ़िगरेशन पैरामीटर को अलग करने का तरीका देती है
कर्नेल के लिए उनसे लिया गया यूज़र-स्पेस. लंबा androidboot.*
कर्नेल स्थानांतरित करना
बूट कॉन्फ़िगरेशन फ़ाइल के पैरामीटर, कर्नेल cmdline पर जगह बनाते हैं और
यह आने वाले समय में कारोबार को बढ़ाने के लिए उपलब्ध होगा.
कर्नेल और Android यूज़र-स्पेस, दोनों में bootconfig
काम करना चाहिए.
- पहली रिलीज़, जिसमें यह सुविधा उपलब्ध है: Android 12
- यह सहायता वाला पहला कर्नेल वर्शन: 12-5.4.xx कर्नेल
12-5.10.xx के साथ लॉन्च होने वाले नए डिवाइसों के लिए, बूट कॉन्फ़िगरेशन की सुविधा लागू करें कर्नेल वर्शन के लिए उपलब्ध है. अगर डिवाइस अपग्रेड किए जा रहे हैं, तो आपको इस सुविधा को लागू करने की ज़रूरत नहीं है.
उदाहरण और सोर्स
इस सेक्शन में उदाहरण और सोर्स कोड देखते समय, ध्यान रखें कि
का bootconfig
कोड
Android 11 और इससे पहले के वर्शन में इस्तेमाल की जाने वाली kernel cmdline है.
हालांकि, आपके इस्तेमाल के हिसाब से नीचे दिया गया अंतर अहम है:
- पैरामीटर को न्यूलाइन एस्केप सीक्वेंस
\n
से अलग करना चाहिए, न कि स्पेसेज़.
बूटलोडर का उदाहरण
बूटलोडर का उदाहरण देखने के लिए, कटलफ़िश यू-बूट रेफ़रंस बूटलोडर देखें लागू करना. रेफ़रंस में दी गई दो कमिट की जानकारी नीचे दी गई है. पहला अपरेव बूट हेडर वर्शन सबसे नए वर्शन में काम करता है. उदाहरण में, पहले वर्शन को अगले वर्शन v4 में अपडेट (या ज़्यादा बदलाव) करने के लिए कह सकता है. दूसरा दो काम करता है; यह बूट कॉन्फ़िगरेशन हैंडलिंग को जोड़ता है और पैरामीटर जोड़ने का तरीका दिखाता है. रनटाइम पर:
बिल्ड का उदाहरण
बिल्ड के ऐसे उदाहरण के लिए, जो बिल्ड में mkbootimg
बदलाव दिखाता है
वेंडर बूट हेडर v4 के साथ vendor_boot.img
, mkbootimg changes for
bootconfig
देखें.
नीचे बताए गए काम करने के लिए, कटलफ़िश में होने वाले बदलाव देखें:
- वेंडर बूट हेडर वर्शन का इस्तेमाल करें (या अपडेट करें) वर्शन 4 है.
- bootconfig को kernel cmdline में जोड़ें और चुने गए पैरामीटर को बूट कॉन्फ़िगरेशन भी हो सकता है.
लागू करना
पार्टनर को अपने बूटलोडर को सपोर्ट करना होगा. साथ ही, बिल्ड-टाइम को आगे बढ़ाना होगा
कर्नेल cmdline से बूट कॉन्फ़िगरेशन तक के androidboot.*
पैरामीटर
फ़ाइल से लिए जाते हैं. इस बदलाव को लागू करने का सबसे अच्छा तरीका यह है कि ऐसा तेज़ी से किया जाए; देखें
इंक्रीमेंटल लागू करना और पुष्टि करना सेक्शन
का पालन करने के बारे में जानकारी पाएं.
अगर आपने ऐसे बदलाव किए हैं जो androidboot.*
के लिए /proc/cmdline फ़ाइल को खोजते हैं
पैरामीटर को खोलने के बजाय, उन्हें /proc/bootconfig
फ़ाइल पर ले जाएं. ro.boot.*
प्रॉपर्टी में नई bootconfig
वैल्यू इस्तेमाल की जाती हैं. इसलिए, आपको
उन प्रॉपर्टी का इस्तेमाल करके कोड में बदलाव किए जा सकते हैं.
बिल्ड में बदलाव करें
सबसे पहले, अपने बूट हेडर वर्शन को वर्शन 4 में बदलें:
- BOARD_BOOT_HEADER_VERSION := 3
+ BOARD_BOOT_HEADER_VERSION := 4
bootconfig
कर्नेल cmdline पैरामीटर जोड़ें. इससे कर्नेल
बूट कॉन्फ़िगरेशन सेक्शन:
BOARD_KERNEL_CMDLINE += bootconfig
बूट कॉन्फ़िगरेशन पैरामीटर, इसके पैरामीटर से बनाए जाते हैं
BOARD_BOOTCONFIG
वैरिएबल, काफ़ी कुछ कर्नेल cmdline की तरह बनाया गया है. इस वैरिएबल से
BOARD\_KERNEL\_CMDLINE
.
किसी भी androidboot.*
पैरामीटर को ऐसे ही ट्रांसफ़र किया जा सकता है:
- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing
+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing
बूटलोडर में किए गए बदलाव
बूटलोडर, कर्नेल पर जाने से पहले initramfs
को सेट अप करता है. कर्नेल
बूट कॉन्फ़िगरेशन
बूट कॉन्फ़िगरेशन सेक्शन से जुड़ी जानकारी खोज सकता है और उसे आपकी साइट के सबसे आखिर में
अनुमानित ट्रेलर के साथ initramfs,
.
बूटलोडर को vendor_boot.img
के लेआउट की जानकारी वेंडर से मिलती है
बूट इमेज हेडर.
पहला डायग्राम. Android 12 के लिए, बूट कॉन्फ़िगरेशन में मेमोरी असाइन करने की सुविधा
बूटलोडर की मदद से मेमोरी में बूट कॉन्फ़िगरेशन सेक्शन बनाया जाता है. बूट कॉन्फ़िगरेशन सेक्शन इसमें नीचे दी गई चीज़ों के लिए मेमोरी का बंटवारा शामिल होता है:
- पैरामीटर
- 4 B साइज़
parameters size
- 4 B साइज़
parameters checksum
- 12 B बूट कॉन्फ़िगरेशन मैजिक स्ट्रिंग (
#BOOTCONFIG\n
)
पैरामीटर दो सोर्स से आते हैं: बिल्ड के समय इस्तेमाल किए जाने वाले पैरामीटर और ऐसे पैरामीटर जिनके बारे में बिल्ड के समय पता नहीं था. अनजान पैरामीटर जोड़ने ज़रूरी हैं.
बिल्ड के समय वाले पैरामीटर, vendor_boot
के आखिर में पैकेज किए जाते हैं
बूट कॉन्फ़िगरेशन सेक्शन में दी गई इमेज है. सेक्शन का साइज़, बाइट के तौर पर सेव किया जाता है
वेंडर बूट हेडर फ़ील्ड vendor_bootconfig_size
में.
जो पैरामीटर बिल्ड के समय अज्ञात होते हैं, वे सिर्फ़ इसके रनटाइम के दौरान ही जाने जाते हैं बूटलोडर. इन्हें बूट कॉन्फ़िगरेशन पैरामीटर सेक्शन के आखिर में जोड़ना ज़रूरी है बूट कॉन्फ़िगरेशन ट्रेलर लागू करने से पहले.
अगर आपको बूट कॉन्फ़िगरेशन ट्रेलर लागू करने के बाद कोई पैरामीटर जोड़ने की ज़रूरत है, तो ट्रेलर को ओवरराइट करें और उसे फिर से लागू करें.
इंंक्रीमेंटल लागू करना और पुष्टि करना
इस सेक्शन में बताया गया है. kernel cmdline पैरामीटर को बिना सेट किए छोड़ दें जबकि बूट कॉन्फ़िगरेशन पैरामीटर जोड़े गए हैं.
पुष्टि के साथ, बढ़ते क्रम में लागू करने के लिए ये चरण हैं:
- बूटलोडर को बनाएं और उसमें बदलाव करें. इसके बाद, ये काम करें:
- नया बूट कॉन्फ़िगरेशन जोड़ने के लिए,
BOARD_BOOTCONFIG
वैरिएबल का इस्तेमाल करें पैरामीटर. - kernel cmdline पैरामीटर को उसी तरह रखें, जैसे वे हैं, ताकि डिवाइस सही तरीके से बूट हो सकता है. इससे डीबग करने और पुष्टि करने की प्रोसेस काफ़ी आसान हो जाती है ज़्यादा आसान हो जाता है.
- नया बूट कॉन्फ़िगरेशन जोड़ने के लिए,
/proc/bootconfig
के कॉन्टेंट की जांच करके, अपने काम की पुष्टि करें. पुष्टि करें कि आपको डिवाइस चालू होने के बाद, जोड़ा गया नया पैरामीटर दिखता है.androidboot.*
पैरामीटर को kernel cmdline से ले जाएंBOARD_BOOTCONFIG
वैरिएबल और बूटलोडर का इस्तेमाल करके, बूट कॉन्फ़िगरेशन किया जा सकता है.- पुष्टि करें कि हर पैरामीटर
/proc/bootconfig
में मौजूद है और वे/proc/cmdline
में नहीं हैं. अगर इसकी पुष्टि की जा सकती है, तो लागू करने का तरीका सफल रहा.
ओटीए पर अपग्रेड और डाउनग्रेड करने के बारे में बातें
जब आप OTA अपग्रेड को प्रबंधित कर रहे हों और इसके अलग-अलग वर्शन के बीच डाउनग्रेड कर रहे हों Android या कर्नेल के अलग-अलग वर्शन के लिए, खास सावधानी बरतनी चाहिए.
बूट कॉन्फ़िगरेशन की सुविधा वाला पहला वर्शन Android 12 है सहायता. इससे पहले के किसी भी वर्शन पर डाउनग्रेड करने पर, kernel cmdline पैरामीटर बूट कॉन्फ़िगरेशन की जगह पर इस्तेमाल किया जाना चाहिए.
Kernel वर्शन 12-5.4 और इसके बाद के वर्शन, बूट कॉन्फ़िगरेशन के साथ काम करते हैं. डाउनग्रेड करने पर उससे पहले के किसी भी वर्शन(11-5.4 सहित) में, कर्नेल cmdline पैरामीटर इस्तेमाल किया गया.
Android 11 और उससे पहले के वर्शन वाले, Android 12 और उसके बाद वाले वर्शन के लिए, अपग्रेड किए गए वर्शन का इस्तेमाल जारी रखा जा सकता है कर्नेल cmdline पैरामीटर. कर्नेल वर्शन को अपग्रेड करने पर भी ऐसा ही होता है.
समस्या का हल
अगर आपको सही पैरामीटर नहीं दिखते हैं, तो पुष्टि करें चरण पूरा करने पर
/proc/bootconfig
में, logcat
में कर्नेल लॉग देखें. आपके पास हमेशा एक लॉग होता है
बूट कॉन्फ़िगरेशन के लिए एंट्री मौजूद है, अगर कर्नेल इसके साथ काम करता है.
लॉग आउटपुट का उदाहरण
$ adb logcat | grep bootconfig
02-24 17:00:07.610 0 0 I Load bootconfig: 128 bytes 9 nodes
अगर आपको गड़बड़ी का लॉग दिखता है, तो इसका मतलब है कि पेज को लोड करने में बूट कॉन्फ़िगरेशन. अलग-अलग तरह की गड़बड़ी देखने के लिए, init/main.c है.