बूट प्रोसेस, कार्रवाइयों की एक चेन होती है. यह बूट रोम से शुरू होती है और इसके बाद बूटलोडर, कर्नल, Init, Zygote, और सिस्टम सर्वर आते हैं. बोल्ड किए गए शब्द से, Android के हिसाब से बूट प्रोसेस के बारे में पता चलता है. वाहन के हिसाब से बूट करने की प्रोसेस में, रिअरव्यू कैमरा (आरवीसी) जैसी शुरुआती सेवाएं, कर्नेल बूट होने के दौरान शुरू होनी चाहिए.
ऑर्डर | कॉम्पोनेंट | Android | Android Automotive |
---|---|---|---|
1 | बूट ROM | बूट लोडर के पहले चरण को इंटरनल रैम में लोड करता है. | |
2 | बूटलोडर | यह मेमोरी सेव करता है, सुरक्षा के लिए पुष्टि करता है, और कर्नेल को लोड करता है. | |
3 | कर्नेल | इंटरप्ट कंट्रोलर, मेमोरी प्रोटेक्शन, कैश मेमोरी, और शेड्यूलिंग सेट अप करता है. साथ ही, उपयोगकर्ता के स्पेस की प्रोसेस को लॉन्च करता है. | रियरव्यू कैमरा (आरवीसी) की प्रोसेस, कर्नेल बूट होने से पहले शुरू हो जाती है. प्रोसेस पूरी होने के बाद, VMCU का GPIO, डिसप्ले पर दिखाने के लिए आरवीसी को ट्रिगर करता है. |
4 | Init प्रोसेस | init.rc स्क्रिप्ट को पार्स करता है, फ़ाइल सिस्टम को माउंट करता है, Zygote को लॉन्च करता है, और सिस्टम प्रोसेस को लॉन्च करता है. |
वाहन के लिए एचएएल (वीएचएएल), मुख्य सेवाओं के हिस्से के तौर पर, शुरू करने के चरण के दौरान शुरू होता है. ServiceManager के आधार पर, इसे पिछली स्थितियों में ले जाया जा सकता है. इसके लिए, शेयर की गई लाइब्रेरी (जैसे, init) पर निर्भरता को हटाना ज़रूरी है. |
5 | युग्मनज | Android ऑब्जेक्ट के लिए, Java रनटाइम और इनिट मेमोरी सेट अप करता है. | |
6 | सिस्टम सर्वर | सिस्टम में मौजूद पहला Java कॉम्पोनेंट, Android की मुख्य सेवाओं को शुरू करता है. | सिस्टम की सभी सेवाएं शुरू होने के बाद, CarService शुरू होती है. |
बूट टाइम को ऑप्टिमाइज़ करें
अपने सिस्टम के बूट होने में लगने वाले समय को कम करने के लिए, इन दिशा-निर्देशों का पालन करें:
-
कर्नेल. सिर्फ़ इस्तेमाल में आने वाले मॉड्यूल लोड करें और सिर्फ़ इस्तेमाल में आने वाले हार्डवेयर कॉम्पोनेंट को शुरू करें.
-
init.rc
- ब्लॉकिंग ऑपरेशन देखें (कमांड का इस्तेमाल करने की तुलना में सेवा).
- सिर्फ़ वही शुरू करें जिसका इस्तेमाल किया जाता है.
- सेवाओं के लिए सही प्राथमिकता सेट करना.
-
ज़ाइगोट. क्लास को पहले से लोड करने की सुविधा को ऑप्टिमाइज़ करना (लोड करने के लिए क्लास की सूची तय करें).
-
पैकेज मैनेजर
-
प्रॉडक्ट की इमेज को ऑप्टिमाइज़ करें, ताकि सिर्फ़ इस्तेमाल में आने वाले APK शामिल किए जा सकें.
-
-
सिस्टम सर्वर. सिर्फ़ उन सिस्टम सेवाओं को चालू करें जिनका इस्तेमाल किया जाता है.
ऑप्टिमाइज़ेशन में मदद पाने के लिए, Google ये टूल उपलब्ध कराता है:
-
logcat और dmesg लॉग का विश्लेषण करने के लिए,
packages/services/Car/tools/bootanalyze/bootanalyze.py
का इस्तेमाल करें. -
बूट के दौरान होने वाली प्रोसेस के लिए, I/O रिकॉर्ड करने के लिए
packages/services/Car/tools/bootio/
का इस्तेमाल करें. आपको खास फ़्लैग के साथ कर्नेल को कंपाइल करना होगा (README.md
फ़ाइल देखें).
सेवाएं जल्दी शुरू करना
बूट करने के क्रम में, हो सकता है कि Android के चालू होने से पहले कुछ सेवाएं चालू हो जाएं.
रियरव्यू कैमरा
रिअरव्यू कैमरे (आरवीसी) को कर्नेल में मैनेज किया जाना चाहिए. जब वाहन को पीछे की ओर ले जाया जाता है, तो VMCU, नेटिव कर्नेल प्रोसेस को इसकी सूचना देता है. इसके बाद, नेटिव कर्नेल प्रोसेस, डिसप्ले पर आरवीसी इमेज दिखाती है. वाहन का एचएएल, hardware/libhardware/include/hardware/vehicle_camera.h
का इस्तेमाल करके आरवीसी को कंट्रोल कर सकता है.
वाहन एचएएल (वीएचएएल)
कुछ सिस्टम को, उपयोगकर्ता-स्पेस सेवा के शुरू होने (जो बूट क्रम में बाद में होती है) का इंतज़ार करते समय, बूट क्रम के शुरुआती चरणों में CAN डेटा (उदाहरण के लिए, वाहन की स्पीड, गियर की स्थिति) को पढ़ने और बफ़र करने की ज़रूरत पड़ सकती है. इस स्थिति में, VNS और HAL और CAN कंट्रोलर को बहुत पहले शुरू करना ज़रूरी होता है. आम तौर पर, इसे कुछ सेकंड में शुरू किया जाता है.
-
जिन सिस्टम में
/system
को तुरंत माउंट किया जा सकता है वे आसानी से सेवा मैनेजर को लॉन्च कर सकते हैं और फिर VNS को जल्दी लॉन्च कर सकते हैं. -
जो सिस्टम
/system
को तुरंत माउंट नहीं कर सकता उसे सेवा मैनेजर और वीएनएस, दोनों को कर्नेल बूट इमेज पर ले जाना चाहिए. साथ ही, सभी डिपेंडेंट लाइब्रेरी को स्टैटिक तरीके से लिंक करना चाहिए.