मैंने इस पृष्ठ पर रास्पियन छवि डाउनलोड की है । मैं एक कर्नेल संकलित करने की कोशिश कर रहा हूं जिसका उपयोग छवि को qemu के भीतर बूट करने के लिए किया जा सकता है।
मैंने kernel.org से लिनक्स कर्नेल स्रोत डाउनलोड किया और भाग गया:
make versatile_defconfig
make menuconfig
मैंने फिर कर्नेल में निम्नलिखित विशेषताएं जोड़ीं:
- PCI समर्थन (CONFIG_PCI)
- SCSI डिवाइस सपोर्ट (CONFIG_SCSI)
- SCSI डिस्क समर्थन (CONFIG_BLK_DEV_SD)
- SYM53C8XX संस्करण 2 SCSI समर्थन (CONFIG_SCSI_SYM53C8XX_2)
- विस्तारित 3 (ext3) फ़ाइल सिस्टम (CONFIG_EXT3_FS)
- विस्तारित 4 (ext4) फ़ाइल सिस्टम (CONFIG_EXT4_FS)
मैंने भी लूप को डिस्क छवि पर चढ़ाया और:
- टिप्पणी की गई
/etc/ld.so.preload
/etc/fstab
उपयोग करने के लिए समायोजित/dev/sda1
और/dev/sda2
मैंने तब छवि को अनमाउंट किया और मशीन को शुरू करने का प्रयास किया:
qemu-system-arm \
-M versatilepb \
-m 256 \
-kernel linux-4.3/arch/arm/boot/zImage \
-hda 2015-09-24-raspbian-jessie.img \
-serial stdio \
-append "root=/dev/sda2 rootfstype=ext4 rw console=ttyAMA0"
कर्नेल फ़ाइल सिस्टम को माउंट करने में सक्षम था लेकिन यह तुरंत कुछ परेशानी में चला गया:
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
CPU: 0 PID: 1 Comm: init Not tainted 4.3.0 #1
Hardware name: ARM-Versatile PB
[<c001b5c0>] (unwind_backtrace) from [<c0017e18>] (show_stack+0x10/0x14)
[<c0017e18>] (show_stack) from [<c0069860>] (panic+0x84/0x1ec)
[<c0069860>] (panic) from [<c0025b98>] (do_exit+0x81c/0x850)
[<c0025b98>] (do_exit) from [<c0025c5c>] (do_group_exit+0x3c/0xb8)
[<c0025c5c>] (do_group_exit) from [<c002dfcc>] (get_signal+0x14c/0x59c)
[<c002dfcc>] (get_signal) from [<c001bf28>] (do_signal+0x84/0x3a0)
[<c001bf28>] (do_signal) from [<c0017a94>] (do_work_pending+0xb8/0xc8)
[<c0017a94>] (do_work_pending) from [<c0014f30>] (slow_work_pending+0xc/0x20)
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
सबसे पहले, मुझे आश्चर्य हुआ कि क्या यह SELinux से संबंधित नहीं था। मैंने कर्नेल को बूट करने की कोशिश की:
selinux=0 enforcing=0
... लेकिन इससे कोई फर्क नहीं पड़ा।
मैं क्या गलत कर रहा हूं? और इस त्रुटि का क्या मतलब है?
अपडेट
मैंने भी निम्नलिखित कोशिश की है, बिना किसी भाग्य के:
- मैंने बिना
CONFIG_VFP
सक्षम के साथ संकलन करने का प्रयास किया - मैंने जोड़ा
CONFIG_DEVTMPFS
औरCONFIG_DEVTMPFS_MOUNT
- लागू करने इस पैच और सक्षम करने
CPU_V6
,CONFIG_MMC_BCM2835
, औरCONFIG_MMC_BCM2835_DMA
- टूलचिन का उपयोग करना
gcc-linaro-arm-linux-gnueabihf-raspbian
टूलकिन के साथ एक सरल सी प्रोग्राम को संकलित करना और फिर
init=
कार्यों के माध्यम से कर्नेल के लिए अपना मार्ग पारित करना - मुझे विश्वास करने के लिए अग्रणी कि बाइनरी प्रारूपों के बीच एक विसंगति है।file <sample program>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=e5ec8884499c51b248df60aedddfc9acf72cdbd4, not stripped
file <file from the image>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3e92423821f3325f8cb0ec5d918a7a1c76bbd72c, stripped`
मैंने टूलचिन के साथ इस सरल सी कार्यक्रम को संकलित किया :
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
... और इसे /root
छवि में कॉपी किया गया , init=
बूट पैरामीटर को बदलकर /root/simple
। यह मुझे बूट करते समय निम्नलिखित देता है:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
यह execv()
कॉल पर घुट रहा है ।
cat .config | grep CONFIG_VFP
पैदावार CONFIG_VFP=y
- लगता है जैसे यह सक्षम है।
CONFIG_VFP
और इसके बिना और इससे कोई फर्क नहीं पड़ता।
versatilepb
एक ARM926 CPU है, जो RPi के ARM1176 से अधिक पुराना है, इसलिए रास्पियन बायनेरिज़ कुछ अन्य सुविधा का उपयोग कर सकते हैं जो कि अनुकरण नहीं किया जा रहा है। से unixmen.com/emulating-raspbian-using-qemu , करता है -cpu arm1176
मदद?