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)
...