डिवाइस के चालू होने में लगने वाला समय मैनेज करना

बूट प्रोसेस, कार्रवाइयों की एक चेन होती है. यह बूट रोम से शुरू होती है और इसके बाद बूटलोडर, कर्नल, Init, Zygote, और सिस्टम सर्वर आते हैं. बोल्ड किए गए शब्द से, Android के हिसाब से बूट प्रोसेस के बारे में पता चलता है. वाहन के हिसाब से बूट करने की प्रोसेस में, रिअरव्यू कैमरा (आरवीसी) जैसी शुरुआती सेवाएं, कर्नेल के बूट होने के दौरान शुरू होनी चाहिए.

ऑर्डर कॉम्पोनेंट Android Android Automotive
1 बूट रोम बूट लोडर के पहले चरण को इंटरनल रैम में लोड करता है.
2 बूटलोडर मेमोरी को शुरू करता है, सुरक्षा की पुष्टि करता है, और कर्नेल को लोड करता है.
3 कर्नेल इंटरप्ट कंट्रोलर, मेमोरी प्रोटेक्शन, कैश मेमोरी, और शेड्यूलिंग सेट अप करता है. साथ ही, उपयोगकर्ता के स्पेस की प्रोसेस को लॉन्च करता है. रियरव्यू कैमरा (आरवीसी) की प्रोसेस, कर्नेल बूट होने से पहले शुरू हो जाती है. प्रोसेस पूरी होने के बाद, VMCU से GPIO, डिसप्ले पर दिखाने के लिए RVC को ट्रिगर करता है.
4 Init प्रोसेस init.rc स्क्रिप्ट को पार्स करता है, फ़ाइल सिस्टम को माउंट करता है, Zygote को लॉन्च करता है, और सिस्टम प्रोसेस को लॉन्च करता है. वाहन के लिए एचएएल (वीएचएएल), मुख्य सेवाओं के हिस्से के तौर पर, शुरू करने के चरण के दौरान शुरू होता है. ServiceManager के आधार पर, इसे पिछली स्थितियों में ले जाया जा सकता है. इसके लिए, शेयर की गई लाइब्रेरी (जैसे, init) पर निर्भरता को हटाना ज़रूरी है.
5 युग्मनज Android ऑब्जेक्ट के लिए, Java रनटाइम और init मेमोरी सेट अप करता है.
6 सिस्टम सर्वर सिस्टम में मौजूद पहला Java कॉम्पोनेंट, Android की मुख्य सेवाओं को शुरू करता है. सिस्टम की सभी सेवाएं शुरू होने के बाद, CarService शुरू होती है.

डिवाइस चालू होने में लगने वाले समय को ऑप्टिमाइज़ करना

अपने सिस्टम के बूट होने में लगने वाले समय को कम करने के लिए, इन दिशा-निर्देशों का पालन करें:

  • कर्नेल. सिर्फ़ इस्तेमाल में आने वाले मॉड्यूल लोड करें और सिर्फ़ इस्तेमाल में आने वाले हार्डवेयर कॉम्पोनेंट को शुरू करें.

  • init.rc

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

  • पैकेज मैनेजर

  • सिस्टम सर्वर. सिर्फ़ उन सिस्टम सेवाओं को चालू करें जिनका इस्तेमाल किया जाता है.

ऑप्टिमाइज़ेशन में मदद पाने के लिए, 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 को तुरंत माउंट नहीं कर सकता उसे सेवा मैनेजर और VNS, दोनों को कर्नेल बूट इमेज में ले जाना होगा. साथ ही, उस पर निर्भर सभी लाइब्रेरी को स्टैटिक तौर पर लिंक करना होगा.