एंड्रॉइड 12 में बूटकॉन्फिग को लागू करना

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

एंड्रॉइड 12 में, बूटकॉन्फिग फीचर एंड्रॉइडबूट को बदल देता है androidboot.* एंड्रॉइड 11 और उससे कम के साथ कर्नेल cmdline विकल्प उपयोग में हैं। बूटकॉन्फिग फीचर बिल्ड और बूटलोडर से एंड्रॉइड 12 में कॉन्फ़िगरेशन विवरण पास करने के लिए एक तंत्र है।

यह सुविधा Android उपयोक्ता-स्थान के लिए कॉन्फ़िगरेशन पैरामीटरों को कर्नेल के लिए कॉन्फ़िगरेशन पैरामीटर से अलग करने का एक तरीका प्रदान करती है। लंबे androidboot.* कर्नेल पैरामीटर को bootconfig फ़ाइल में ले जाना कर्नेल cmdline पर जगह बनाता है और इसे आसान भविष्य के विस्तार के लिए उपलब्ध कराता है।

कर्नेल और Android उपयोक्ता-स्थान दोनों को bootconfig का समर्थन करना चाहिए।

  • पहली रिलीज़ जिसमें यह समर्थन है: Android 12
  • पहला कर्नेल संस्करण जिसमें यह समर्थन है: 12-5.4.xx कर्नेल

12-5.10.xx कर्नेल संस्करण के साथ लॉन्च होने वाले नए उपकरणों के लिए बूटकॉन्फिग सुविधा को लागू करें। यदि आप उपकरणों को अपग्रेड कर रहे हैं तो आपको इसे लागू करने की आवश्यकता नहीं है।

उदाहरण और स्रोत

जैसा कि आप इस खंड में उदाहरण और स्रोत कोड देखते हैं, ध्यान दें कि bootconfig कोड का प्रारूप एंड्रॉइड 11 और उससे कम में उपयोग किए जाने वाले कर्नेल cmdline के प्रारूप से केवल थोड़ा अलग है। हालाँकि, आपके उपयोग के लिए निम्न अंतर महत्वपूर्ण है:

  • पैरामीटर्स को न्यूलाइन एस्केप सीक्वेंस \n द्वारा अलग किया जाना चाहिए, स्पेस द्वारा नहीं।

बूटलोडर उदाहरण

बूटलोडर उदाहरण के लिए, कटलफिश यू-बूट संदर्भ बूटलोडर कार्यान्वयन देखें। संदर्भ में दो कमिट नीचे सूचीबद्ध हैं। पहला नवीनतम संस्करण के लिए बूट हैडर संस्करण का समर्थन करता है। उदाहरण में, पहला कमिट अपडेट (या uprevs) संस्करण अगले एक के लिए समर्थन करता है, v4. दूसरा दो काम करता है; यह बूटकॉन्फिग हैंडलिंग जोड़ता है, और रनटाइम पर पैरामीटर जोड़ने का प्रदर्शन करता है:

उदाहरण बनाएँ

एक बिल्ड उदाहरण के लिए जो विक्रेता बूट हेडर v4 के साथ विक्रेता_बूट. vendor_boot.img बनाने के लिए mkbootimg परिवर्तन दिखाता है, mkbootimg changes for bootconfig देखें। निम्न कार्य करने के लिए कटलफिश परिवर्तन देखें:

कार्यान्वयन

पार्टनर्स को अपने बूटलोडर्स में समर्थन जोड़ना चाहिए, और अपने बिल्ड-टाइम androidboot.* पैरामीटर को कर्नेल cmdline से bootconfig फ़ाइल में ले जाना चाहिए। इस परिवर्तन को लागू करने का सबसे अच्छा तरीका यह है कि इसे क्रमिक रूप से किया जाए; वृद्धिशील प्रक्रिया का पालन करने के बारे में जानकारी के लिए वृद्धिशील कार्यान्वयन और सत्यापन अनुभाग देखें।

यदि आपके पास ऐसे परिवर्तन हैं जो androidboot.* पैरामीटर के लिए /proc/cmdline फ़ाइल खोजते हैं, तो उन्हें इसके बजाय /proc/bootconfig फ़ाइल पर इंगित करें। ro.boot.* गुण नए bootconfig मानों के साथ सेट किए गए हैं, इसलिए आपको उन गुणों का उपयोग करके कोड के लिए परिवर्तन करने की आवश्यकता नहीं है।

परिवर्तन बनाएँ

सबसे पहले, अपने बूट हेडर संस्करण को संस्करण 4 में अपग्रेड करें:

- BOARD_BOOT_HEADER_VERSION := 3

+ BOARD_BOOT_HEADER_VERSION := 4

bootconfig कर्नेल cmdline पैरामीटर जोड़ें। यह कर्नेल को bootconfig अनुभाग के लिए देखता है:

BOARD_KERNEL_CMDLINE += bootconfig

bootconfig पैरामीटर BOARD_BOOTCONFIG चर में पैरामीटर से बनाए जाते हैं, बहुत कुछ कर्नेल cmdline की तरह BOARD\_KERNEL\_CMDLINE से बनाया गया है।

किसी भी androidboot.* पैरामीटर को निम्न के समान स्थानांतरित किया जा सकता है:

- BOARD_KERNEL_CMDLINE += androidboot..selinux=enforcing

+ BOARD_BOOTCONFIG += androidboot..selinux=enforcing

बूटलोडर परिवर्तन

बूटलोडर कर्नेल में कूदने से पहले initramfs को सेट करता है। कर्नेल बूट विन्यास बूटकॉन्फिग खंड की खोज करता है, और इसे अपेक्षित ट्रेलर के साथ initramfs, के बहुत अंत में होने की तलाश करता है।

बूटलोडर को विक्रेता बूट छवि vendor_boot.img से विक्रेता_बूट.आईएमजी लेआउट जानकारी मिलती है।

Diagram of bootconfig memory allocation layout

चित्रा 1. एंड्रॉइड 12 बूटकॉन्फिग मेमोरी आवंटन

बूटलोडर मेमोरी में बूटकॉन्फिग सेक्शन बनाता है। बूटकॉन्फिग सेक्शन में निम्नलिखित के लिए मेमोरी आवंटन होता है:

  • मापदंडों
  • 4 बी आकार parameters size
  • 4 बी आकार parameters checksum
  • 12 बी बूटकॉन्फिग मैजिक स्ट्रिंग ( #BOOTCONFIG\n )

पैरामीटर दो स्रोतों से आते हैं: निर्माण समय पर ज्ञात पैरामीटर, और पैरामीटर जो निर्माण समय पर ज्ञात नहीं होते हैं। अज्ञात पैरामीटर जोड़े जाने चाहिए।

बिल्ड समय पर ज्ञात पैरामीटर को vendor_boot अनुभाग में विक्रेता_बूट छवि के अंत में पैक किया जाता है। अनुभाग का आकार विक्रेता बूट हेडर फ़ील्ड में संग्रहीत किया जाता है ( vendor_bootconfig_size के रूप में) विक्रेता_बूटकॉन्फिग_साइज।

पैरामीटर जो बिल्ड समय पर ज्ञात नहीं हैं, केवल बूटलोडर में रनटाइम पर ही ज्ञात होते हैं। bootconfig ट्रेलर लागू होने से पहले इन्हें bootconfig पैरामीटर खंड के अंत में जोड़ा जाना चाहिए।

यदि आपको बूटकॉन्फिग ट्रेलर लागू होने के बाद कोई पैरामीटर जोड़ने की आवश्यकता है, तो ट्रेलर को अधिलेखित करें और इसे फिर से लागू करें।

वृद्धिशील कार्यान्वयन और सत्यापन

इस खंड में दी गई प्रक्रिया का पालन करके बूटकॉन्फिग फीचर को क्रमिक रूप से लागू करें। जब bootconfig पैरामीटर जोड़ा जाता है तो कर्नेल cmdline पैरामीटर को अछूता छोड़ दें।

सत्यापन के साथ वृद्धिशील कार्यान्वयन के लिए ये चरण हैं:

  1. बूटलोडर बनाएं और परिवर्तन बनाएं, फिर निम्न कार्य करें:
    1. एक नया bootconfig पैरामीटर जोड़ने के लिए BOARD_BOOTCONFIG चर का प्रयोग करें।
    2. कर्नेल cmdline पैरामीटर को वैसे ही रखें जैसे वे हैं, ताकि डिवाइस सही ढंग से बूट करना जारी रख सके। यह डिबगिंग और सत्यापन को बहुत आसान बनाता है।
  2. /proc/bootconfig की सामग्री की जांच करके अपने कार्य को सत्यापित करें। सत्यापित करें कि डिवाइस के बूट होने के बाद आपको नया जोड़ा गया पैरामीटर दिखाई दे रहा है।
  3. BOARD_BOOTCONFIG चर और बूटलोडर का उपयोग करके BOARD_BOOTCONFIG androidboot.* पैरामीटर को कर्नेल cmdline से bootconfig में ले जाएँ।
  4. सत्यापित करें कि प्रत्येक पैरामीटर /proc/bootconfig में मौजूद है और वे /proc/cmdline में नहीं हैं । यदि आप इसे सत्यापित कर सकते हैं, तो आपका कार्यान्वयन सफल रहा।

ओटीए उन्नयन और डाउनग्रेडिंग विचार

जब आप एंड्रॉइड के विभिन्न संस्करणों, या विभिन्न कर्नेल संस्करणों के बीच ओटीए अपग्रेड और डाउनग्रेड का प्रबंधन कर रहे हों, तो विशेष ध्यान रखा जाना चाहिए।

एंड्रॉइड 12 बूटकॉन्फिग सपोर्ट वाला पहला वर्जन है। यदि इससे पहले किसी संस्करण में डाउनग्रेड किया जा रहा है, तो बूटकॉन्फिग के बजाय कर्नेल cmdline पैरामीटर का उपयोग किया जाना चाहिए।

कर्नेल संस्करण 12-5.4 और बाद के संस्करण bootconfig का समर्थन करते हैं। यदि इससे पहले (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 देखें।