Android 10 और 11 में, पहले चरण के रैमडिस्क में, पहले चरण का init बाइनरी होता है. यह बाइनरी, fstab एंट्री के हिसाब से शुरुआती माउंटिंग करती है. साथ ही, इसमें वेंडर fstab फ़ाइलें भी होती हैं. (Android 9 और उससे पहले के वर्शन में, system.img
में $TARGET_ROOT_OUT
का कॉन्टेंट शामिल होता है.)
बूट-रैमडिस्क (नॉन-ए/बी) वाले डिवाइसों के लिए, पहले चरण का init एक स्टैटिक एक्ज़ीक्यूटेबल होता है, जो
/init
पर मौजूद होता है. ये डिवाइस,system.img
को/system
के तौर पर माउंट करते हैं. इसके बाद, स्विच रूट ऑपरेशन करके/system
पर मौजूद माउंट को/
पर ले जाते हैं. माउंट करने की प्रोसेस पूरी होने के बाद, रैमडिस्क का कॉन्टेंट खाली हो जाता है.जिन डिवाइसों में रिकवरी को रैमडिस्क के तौर पर इस्तेमाल किया जाता है उनमें पहले चरण का init, रिकवरी रैमडिस्क में
/init
पर मौजूद होता है. ये डिवाइस, सबसे पहले रूट को/first_stage_ramdisk
पर स्विच करते हैं, ताकि एनवायरमेंट से रिकवरी कॉम्पोनेंट हटाए जा सकें. इसके बाद, ये डिवाइस बूट-रैमडिस्क वाले डिवाइसों की तरह ही काम करते हैं. इसका मतलब है कि येsystem.img
को/system
के तौर पर माउंट करते हैं, रूट को स्विच करके उस माउंट को/
पर ले जाते हैं, और माउंट करने के बाद रैमडिस्क के कॉन्टेंट को खाली कर देते हैं. अगरandroidboot.force_normal_boot=1
कर्नल कमांड लाइन में मौजूद है (या Android 12 और इसके बाद के वर्शन में बूटकॉन्फ़िग में मौजूद है), तो डिवाइस रिकवरी मोड में बूट होने के बजाय, सामान्य तौर पर (Android में) बूट होते हैं.
पहले चरण के शुरू होने के बाद, यह /system/bin/init
को selinux_setup
आर्ग्युमेंट के साथ लागू करता है, ताकि SELinux को सिस्टम पर कंपाइल और लोड किया जा सके. आखिर में, init फ़ंक्शन second_stage
आर्ग्युमेंट के साथ /system/bin/init
को फिर से एक्ज़ीक्यूट करता है. इस समय, init का मुख्य फ़ेज़ शुरू होता है. साथ ही, init.rc
स्क्रिप्ट का इस्तेमाल करके बूट प्रोसेस जारी रहती है.
यहां दिए गए सेक्शन में, Android 10 से पहले और बाद में, नॉन-ए/बी डिवाइसों के लिए पार्टीशन लेआउट में हुए बदलावों के बारे में बताया गया है.
पार्टिशन लेआउट (नॉन-ए/बी डिवाइस)
यहां दिए गए सेक्शन में, Android 10 से पहले और बाद में, नॉन-ए/बी डिवाइसों के लिए पार्टीशन लेआउट में हुए बदलावों के बारे में बताया गया है.
boot.img
रैमडिस्क (Android 8.x और इससे पहले के वर्शन) |
सिस्टम ऐज़ रूट (Android 9) |
रैमडिस्क (Android 10 और 11) |
---|---|---|
इसमें एक कर्नेल और एक ramdisk.img -/ - init.rc - init - etc -> /system/etc - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
इसमें सिर्फ़ सामान्य बूट कर्नल होता है. | इसमें कर्नेल और ramdisk.img -/ - init - vendor fstab files - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
recovery.img
इसमें रिकवरी कर्नल और रिकवरी ramdisk.img
शामिल है
system.img
रैमडिस्क (Android 8.x और इससे पहले के वर्शन) |
सिस्टम ऐज़ रूट (Android 9) |
रैमडिस्क (Android 10 और 11) |
---|---|---|
इसमें system.img -/ - bin/ - etc - vendor -> /vendor - ... |
इसमें system.img -/ - init.rc - init - etc -> /system/etc - system/ - bin/ - etc/ - vendor -> /vendor - ... - vendor/ (mount point) - odm/ (mount point) ... |
इसमें system.img -/ - init.rc - init -> /system/bin/init - etc -> /system/etc - system/ - bin/ - etc/ - vendor -> /vendor - ... - vendor/ (mount point) - odm/ (mount point) ... |
पार्टिशन लेआउट (A/B डिवाइस)
यहां दिए गए सेक्शन में, Android 10 से पहले और बाद में, A/B डिवाइसों के लिए पार्टीशन लेआउट में अंतर के बारे में बताया गया है.
boot.img
सिस्टम ऐज़ रूट (Android 9) |
रैमडिस्क (Android 10 और 11) |
---|---|
इसमें सामान्य बूट कर्नल और रिकवरी-रैमडिस्क
(BOARD_USES_RECOVERY_AS_BOOT := true ) शामिल होता है.रिकवरी-रैमडिस्क का इस्तेमाल सिर्फ़ रिकवरी मोड में बूट करने के लिए किया जाता है. |
इसमें सामान्य बूट कर्नल और रिकवरी-रैमडिस्क (BOARD_USES_RECOVERY_AS_BOOT := true ) शामिल होता है. रिकवरी-रैमडिस्क का इस्तेमाल, रिकवरी और Android, दोनों में बूट करने के लिए किया जाता है. ramdisk.img -/ - init -> /system/bin/init - first_stage_ramdisk - vendor fstab files - etc -> /system/etc - system/ (mount point) - vendor/ (mount point) - odm/ (mount point) ... |
system.img
इसमें $TARGET_SYSTEM_OUT
और $TARGET_ROOT_OUT
का मर्ज किया गया कॉन्टेंट शामिल है.
system.img
-/
- init.rc
- init -> /system/bin/init
- etc -> /system/etc
- system/
- bin/
- etc/
- vendor -> /vendor
- ...
- vendor/ (mount point)
- odm/ (mount point)
...