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
अपनी आवश्यकताओं के अनुरूप इस सामग्री को बदलें ।