kernel.img फ़ाइल
लिनक्स कर्नेल का उपयोग करते समय, kernel.imgफ़ाइल का केवल नाम बदला जाता है linux/arch/arm/boot/Image। इस फ़ाइल के संपीड़ित संस्करण का उपयोग करने के लिए यह संभव भी होना चाहिए (या कम से कम पिछली बार मैंने जाँच की थी) zImage। इसमें एकीकृत initramfs(रैमडिस्क) हो सकता है लेकिन इसकी आवश्यकता नहीं है। उदाहरण के लिए, शेयर kernel.imgफ़ाइल नहीं है initramfs, जबकि kernel_emergency.imgकरता है।
नोट: eLinux wiki पर आधिकारिक कर्नेल संकलन गाइड का सुझाव है कि आपको फ़ाइल imagetool-uncompressed.pyतैयार करने के लिए उपकरण का उपयोग करना चाहिए kernel.img। यह रास्पबेरीपी के शुरुआती दिनों में आवश्यक था लेकिन आजकल बूटलोडर नियमित Imageऔर zImageफाइलों को संभाल सकता है ।
कर्नेल स्रोत जारी करते हैं
यह बहुत महत्वपूर्ण है कि रास्पबेरीपी के लिए कर्नेल बनाते समय, आप इसके किसी भी संस्करण का उपयोग नहीं कर सकते। केवल विशेष संस्करण जिसे RaspberryPi में पोर्ट किया गया है, काम करेगा। दुर्भाग्य से, वर्तमान अपस्ट्रीम संस्करण ( kernel.orgसाइट पर पाया गया ) रास्पबेरीपी के साथ संगत नहीं है। इसके अलावा, versatil_configरास्पबेरीपी के लिए अच्छा नहीं है, आपको bcmrpi_defconfigइसके बजाय (रास्पबेरीपी संगत कर्नेल स्रोतों पर पाया) या bcmrpi_emergency_defconfigबिल्डिन का उपयोग करने पर आपकी योजना का उपयोग करना चाहिए initramfs।
कर्नेल भवन निर्देश
रास्पबेरीपी के लिए कर्नेल स्रोतों को हथियाने के लिए सबसे अच्छी जगह नींव गिथब पर है । आप इसे कैसे प्राप्त करें और इसे आधिकारिक RasbperryPi wiki पर कैसे संकलित करें, इस पर कुछ उपयोगी स्पष्टीकरण पा सकते हैं । इसमें शामिल चरणों का मेरा थोड़ा सरलीकृत संस्करण है (नोट: मुझे लगता है कि आप कर्नेल को पार करना चाहते हैं। यह बहुत तेज़ है और समान परिणाम बनाना चाहिए लेकिन रास्पबेरीपी पर देशी रूप से कर्नेल का निर्माण भी संभव है):
आधिकारिक टूलचिन को अपने खुद के डाउनलोड करें। Eigher रास्ता, मुझे लगता है कि यह में स्थापित है /usr/bin/arm-linux-gnueabi-*। यदि आपके पास यह दूसरी जगह है, तो आपको CROSS_COMPILEअपने सभी makeआदेशों में विकल्प बदलना चाहिए ।
Https://github.com/raspberrypi/linux साइट पर जाएं जहां आप आधिकारिक RapsberryPi कर्नेल स्रोत पा सकते हैं। आप दो तरीकों से कोड डाउनलोड कर सकते हैं:
- एक संपीड़ित फ़ाइल के रूप में (इस विकल्प का उपयोग करने के लिए आपको
gitउपयोगिता स्थापित करने की आवश्यकता नहीं है और आप RapsberryPi पर भी ऐसा कर सकते हैं): साइट के शीर्ष पर ZIPथोड़ा नीचे Codeटैब पर आइकन पर क्लिक करें । यह आपको लेट्स सोर्स फाइल को zipफाइल के रूप में डाउनलोड करने देना चाहिए । आप इसके बजाय ऐसा करने के लिए git का उपयोग कर सकते हैं, लेकिन (जैसा कि विकी पर वर्णित है) को बहुत अधिक स्थान और समय की आवश्यकता होगी। फिर स्रोत वृक्ष प्राप्त करने के लिए फ़ाइल को विघटित करें।
gitउपयोगिता का उपयोग करना (रास्पबेरीपीआई पर यह मेरे लिए काम नहीं करता था क्योंकि रैम की थोड़ी मात्रा संभव है, लेकिन डेस्कटॉप सिस्टम पर ठीक काम करना चाहिए (नोट --depth 1तर्क जो गिट को विकास के पूरे इतिहास को डाउनलोड करने से रोकता है (जो बहुत बड़ा है):
git clone --depth 1 git://github.com/raspberrypi/linux.git
नींव द्वारा आपूर्ति की गई डिफ़ॉल्ट विन्यास का उपयोग करें:
cp arch/arm/configs/bcmrpi_defconfig .config
make oldconfigकुछ प्रश्नों को चलाएं और उनका उत्तर दें (प्रत्येक प्रश्न में डिफ़ॉल्ट उत्तर देना छोड़ना ठीक होना चाहिए):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
गिरी को संकलित करें:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
कर्नेल मॉड्यूल कॉपी करें /tmp/modules:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
Imageफ़ाइल के रूप में उपयोग करेंkernel.img
आपके रास्पबेरीपीआई रूटफुट पर आपके /tmp/modules/lib/modules/कंप्यूटर से /lib/modules/निर्देशिका में सभी मॉड्यूल अपलोड करें ।
Initramfs जोड़ना
यह कैसे बनाने के लिए पर निर्देश प्रदान नहीं करता है initramfs, हालांकि। चूँकि यह बहुत व्यापक विषय है (मूल रूप से, आपको काम करने वाले लिनक्स यूज़र्स वातावरण तैयार करना होगा, यह वास्तव में कितना जटिल हो सकता है, इसकी कोई सीमा नहीं है), मैं इसे अब यहाँ कवर नहीं करूँगा। मैं केवल यह नोट करूंगा कि initramfsइसे दो अलग-अलग रूपों में इस्तेमाल किया जा सकता है - स्टैंडअलोन एक, जहां यह अलग फाइल और बिल्डिन है जहां इसे कर्नेल इमेज फाइल (जैसे यह है kernel_emergency.img) के साथ एकीकृत किया गया है । दूसरा विकल्प रास्पबेरीपी बूटलोडर द्वारा समर्थित होना चाहिए, लेकिन कुछ अफवाहें हैं कि यह वर्तमान फर्मवेयर संस्करण पर टूट गया है, इसलिए आपको बिल्डिन संस्करण का उपयोग करना चाहिए।
शुरू करने का सबसे अच्छा तरीका है कि आप इनट्रामाफ़्स सामग्री का उपयोग कर सकते हैं (जो कि kern_emergency.img के लिए उपयोग किया जा रहा है) इसे किसी अन्य नींव गितुब रिपॉजिटरी से डाउनलोड करके और जब आप इस iniramfsछवि का उपयोग करके कर्नेल को बूट करने में सक्षम हों , तब ही अपना स्वयं का निर्माण करने का प्रयास करें। इसके लिए आवश्यक सभी को डाउनलोड की गई निर्देशिका को इंगित करना चाहिए CONFIG_INITRAMFS_SOURCEकर्नेल कॉन्फ़िगरेशन विकल्प।
अंतिम नोट्स
तो आपको यह 3 चरणों में करना चाहिए:
initramfsफ़ाइल के बिना कर्नेल के निर्माण और बूटिंग का प्रयास करें ।
- तैयार
initramfsसामग्री को अपने कर्नेल में जोड़ने का प्रयास करें ।
initramfsअपनी आवश्यकताओं के अनुरूप इस सामग्री को बदलें ।