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 फ़ंक्शन /system/bin/init आर्ग्युमेंट के साथ second_stage को फिर से लागू करता है. इस समय, 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)
...