रैमडिस्क सहित कर्नेल छवि (.img) का निर्माण


12

मैंने अपने रास्पबेरी पाई के लिए अपने लिनक्स कर्नेल (3.0.1) को इन निम्नलिखित चरणों के साथ बनाया है:

1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable   with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot

मेरा सवाल यह है कि मैं कर्नेल कैसे बनाऊं? मुझे लगता है कि इसमें zImage + ramdisk शामिल है लेकिन मैं इसे कैसे बना सकता हूं?

क्या कोई मुझे रामदिस्क बनाने के लिए गाइड कर सकता है और इन दोनों को k गिने में पैक कर सकता है। मैं अपनी रास्पबेरी पाई पर इस कर्नेल को बूट करना चाहता हूं।


यह एक महान प्रश्न है जो मुझे आश्चर्य है कि अभी तक नहीं पूछा गया है।
जीवांश

आप कर्नेल 3.0.1 का उपयोग क्यों कर रहे हैं? क्या यह वेनिला कर्नेल kernel.orgसाइट पर पाया जाता है ?
Krzysztof Adamski

हां, मुझे यह कर्नेल ओआरजी से मिला है
शांतनु बनर्जी

मैंने qemu और crosscompiled raspberry pi-2 कर्नेल के बारे में एक नया प्रश्न
इनट्राम्राम्स में व्यस्तबॉक्स के साथ जोड़ा है

जवाबों:


8

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 पर कैसे संकलित करें, इस पर कुछ उपयोगी स्पष्टीकरण पा सकते हैं । इसमें शामिल चरणों का मेरा थोड़ा सरलीकृत संस्करण है (नोट: मुझे लगता है कि आप कर्नेल को पार करना चाहते हैं। यह बहुत तेज़ है और समान परिणाम बनाना चाहिए लेकिन रास्पबेरीपी पर देशी रूप से कर्नेल का निर्माण भी संभव है):

  1. आधिकारिक टूलचिन को अपने खुद के डाउनलोड करें। Eigher रास्ता, मुझे लगता है कि यह में स्थापित है /usr/bin/arm-linux-gnueabi-*। यदि आपके पास यह दूसरी जगह है, तो आपको CROSS_COMPILEअपने सभी makeआदेशों में विकल्प बदलना चाहिए ।

  2. 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
      
  3. नींव द्वारा आपूर्ति की गई डिफ़ॉल्ट विन्यास का उपयोग करें:

    cp arch/arm/configs/bcmrpi_defconfig .config
    
  4. make oldconfigकुछ प्रश्नों को चलाएं और उनका उत्तर दें (प्रत्येक प्रश्न में डिफ़ॉल्ट उत्तर देना छोड़ना ठीक होना चाहिए):

    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
    
  5. गिरी को संकलित करें:

    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
    
  6. कर्नेल मॉड्यूल कॉपी करें /tmp/modules:

    make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
    
  7. Imageफ़ाइल के रूप में उपयोग करेंkernel.img

  8. आपके रास्पबेरीपीआई रूटफुट पर आपके /tmp/modules/lib/modules/कंप्यूटर से /lib/modules/निर्देशिका में सभी मॉड्यूल अपलोड करें ।

Initramfs जोड़ना

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

शुरू करने का सबसे अच्छा तरीका है कि आप इनट्रामाफ़्स सामग्री का उपयोग कर सकते हैं (जो कि kern_emergency.img के लिए उपयोग किया जा रहा है) इसे किसी अन्य नींव गितुब रिपॉजिटरी से डाउनलोड करके और जब आप इस iniramfsछवि का उपयोग करके कर्नेल को बूट करने में सक्षम हों , तब ही अपना स्वयं का निर्माण करने का प्रयास करें। इसके लिए आवश्यक सभी को डाउनलोड की गई निर्देशिका को इंगित करना चाहिए CONFIG_INITRAMFS_SOURCEकर्नेल कॉन्फ़िगरेशन विकल्प।

अंतिम नोट्स

तो आपको यह 3 चरणों में करना चाहिए:

  1. initramfsफ़ाइल के बिना कर्नेल के निर्माण और बूटिंग का प्रयास करें ।
  2. तैयार initramfsसामग्री को अपने कर्नेल में जोड़ने का प्रयास करें ।
  3. initramfsअपनी आवश्यकताओं के अनुरूप इस सामग्री को बदलें ।

1
महान लिखना, लेकिन आपको उपयोग नहीं करना चाहिए zip; gitकुशलता से फ़ाइलों को स्थानांतरित करता है और आप depth=1इतिहास को डाउनलोड करने से रोकने के लिए उपयोग कर सकते हैं (मुझे लगता है)।
एलेक्स चैंबरलेन

हां, यह सच है लेकिन रास्पबेरीपी पर ऐसा करने की कोशिश करना वास्तव में अच्छा विचार नहीं है। दूसरी ओर, जिप डाउनलोड करना बहुत अच्छा काम कर रहा है। मैं git का उपयोग करने के बारे में संक्षिप्त नोट भी जोड़ूंगा।
Krzysztof Adamski

रास्पबेरी पाई पर गिरी को संकलित करना अपने आप में एक भयानक विचार है।
एलेक्स चेम्बरलेन

@AlexChamberlain: यह वास्तव में धीमा है लेकिन निश्चित रूप से संभव है (मैंने खुद ऐसा किया है)। एक रात लगती है इसलिए यह वास्तव में बुरा नहीं है। इसके अलावा, यह इतना भयानक क्यों है?
Krzysztof Adamski

अगर मैं bcmrpi_emergency_defconfig का उपयोग करता हूं तो इसमें इनट्रैमफैट शामिल हैं ??
शांतनु बनर्जी

0

यदि आप दोनों पर डेबियन का एक ही संस्करण चला रहे हैं, तो X-Apt, dpkg-cross आदि का उपयोग कर रहे हैं ... और emdebian टूल बहुत अच्छी तरह से काम कर सकते हैं।

स्रोत: emdebian चलाने वाले एम्बेडेड ARM सिस्टम के लिए c ++ एप्लिकेशन विकसित करने के लिए उपयोग किया जाता है।

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