RAM में रूटफुट के साथ मेरे पास लिनक्स बूट कैसे है?


16

रूटफुट एक स्क्वाशफाइट छवि है और मेरे बूटलोडर इसे एसडीआरएएम में कुछ पते पर लोड कर रहा है। कर्नेल को पास करने के लिए मुझे किन मापदंडों की आवश्यकता है ताकि यह रूटफुट को वहां से माउंट कर सके? स्क्वाशफ़्स समर्थन अंतर्निहित है और यह पहले से ही काम करता है

root=/dev/mtdblock2 rootfstype=squashfs  

फ्लैश से बूट करने के लिए।

EDIT: यह एक MIPS आधारित एम्बेडेड डिवाइस है, जो कस्टम बूटलोडर का उपयोग करता है। आम तौर पर, बूटलोडर एसडीआरएएम में फ्लैश से संपीड़ित कर्नेल को बाहर निकालता है, और फिर रूटफुट के रूप में कर्नेल माउंट / देव / mtdblock2 करता है। मैं बूटलोडर को बेहतर बनाने की कोशिश कर रहा हूं ताकि यह फ्लैश पर लिखे बिना इसकी रैम और बूट में एक छवि डाउनलोड कर सके।

मैं यह पता नहीं लगा सकता कि लिनक्स को रैम में एक फाइल सिस्टम छवि को रूटफुट के रूप में कैसे बनाया जाए।


कृपया बेहतर वर्णन करें कि आप क्या हासिल करने की कोशिश कर रहे हैं, अगर आप पहले से ही स्क्वाशफ वर्क जानते हैं। आप कैसे जानते हैं कि यह काम करता है? क्या होता है? और सबसे महत्वपूर्ण बात, क्या आप चाहते हैं जिस तरह से काम नहीं करता है ?
rozcietrzewiacz

1
इसके अलावा, कौन सा बूटलोडर डिवाइस का उपयोग करता है?
rozcietrzewiacz

मुझे लगता है कि अगर आप कर्नेल के रूप में मेम्डिसक (SYSLINUX से) का उपयोग करते हैं, तो यह पूरी छवि को मेमोरी में लोड करता है और फिर उससे बूट करता है
golimar

जवाबों:


10

मैं एक initramfs का उपयोग करूंगा। ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.tex )

कई लिनक्स वितरण बूट प्रक्रिया के दौरान एक इनट्रामाफ़्स का उपयोग करते हैं (एक initrd के साथ भ्रमित नहीं होने के लिए, वे अलग-अलग होते हैं), ज्यादातर बूट प्रक्रिया में बहुत जल्द यूज़रस्पेस प्रोग्राम शुरू करने में सक्षम होने के लिए। हालाँकि, आप इसे जो चाहें उपयोग कर सकते हैं।

एक initrd पर initramfs का लाभ यह है कि एक initramfs tmpfs फाइल सिस्टम का उपयोग करता है जबकि एक initrd एक ram ब्लॉक डिवाइस का उपयोग करता है। यहां महत्वपूर्ण अंतर यह है कि एक initrd के लिए, आपको फ़ाइल सिस्टम के लिए सभी स्थान का प्रचार करना चाहिए, भले ही आप उस सभी स्थान का उपयोग न करने जा रहे हों। इसलिए यदि आप फ़ाइल सिस्टम स्पेस का उपयोग नहीं करते हैं, तो आप रैम को बर्बाद करते हैं, जो एक एम्बेडेड डिवाइस पर, अक्सर एक दुर्लभ संसाधन होता है। Tmpfs एक फाइलसिस्टम है जो राम से बाहर निकलता है, लेकिन केवल उतना ही राम उपयोग करता है जितना वर्तमान में फाइलसिस्टम पर उपयोग में है। इसलिए यदि आप किसी फ़ाइल को tmpfs से हटाते हैं, तो उस रैम को तुरंत निकाल दिया जाता है।

अब आम तौर पर एक इनट्रैमफ्रेम अस्थायी होता है, केवल बूट प्रक्रिया में कुछ कार्यक्रमों को बहुत पहले से चलाने के लिए उपयोग किया जाता है। उन प्रोग्रामों को चलाने के बाद, नियंत्रण को भौतिक डिस्क पर चल रहे वास्तविक फाइल सिस्टम पर बदल दिया जाता है। हालाँकि, आपको ऐसा करने की आवश्यकता नहीं है। अनिश्चित काल के लिए आपको इनट्रैमफॉर्म्स से बाहर निकलने से रोकना नहीं है।


इसलिए मैं वास्तव में "initramfs से अनिश्चित काल के लिए" चलने वाली प्रणाली को सेटअप करने का प्रयास कर रहा हूं। सिस्टम सबसे अधिक भाग के लिए है, लेकिन मुझे कुछ समस्याएं हैं - मैं सोच रहा हूं कि क्या आप कुछ प्रकाश को बहा सकते हैं? प्रश्न यहाँ पोस्ट किया गया
dtmland


0

मैं phramइस उद्देश्य के लिए ड्राइवर का उपयोग करता हूं : यह भौतिक मेमोरी का उपयोग करके एक एमटीडी डिवाइस का अनुकरण करता है, जिसका अर्थ है कि आप परीक्षण / विकास के लिए बिल्कुल उसी रूटफुट छवि का उपयोग कर सकते हैं जिसे आप बाद में वास्तविक फ्लैश में जलाने जा रहे हैं। कर्नेल कमांड लाइन पर निंदनीय जादू कुछ इस तरह होगा

phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000

ध्यान दें कि आपको यह memmapसुनिश्चित करने के लिए तर्क की आवश्यकता है कि कर्नेल स्वयं के लिए उस मेमोरी का उपयोग करने की कोशिश नहीं करता है। 9MB मेरे रूटफुट कितना बड़ा है (या था)। $ से पहले मेरे बूटलोडर में $ की जरूरत है, आप में नहीं हो सकता है। मैंने वहां जो पता चुना है, वह मनमाना है, क्योंकि मुझे नहीं पता कि आपके डिवाइस पर भौतिक मेमोरी कैसे रखी गई है, इसलिए वह एक चुनें जो आपके लिए समझ में आता है। मुझे लगता है कि आपने पहले उस पते पर अपने रूटफ़ेट्स को लोड करने के लिए tftp या कुछ का उपयोग किया था

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.