Çekirdek neden başlatılamıyor?


14

Bu sayfaya Raspbian görüntüsünü indirdim . Qemu içindeki görüntüyü önyüklemek için kullanılabilecek bir çekirdek derlemeye çalışıyorum.

Linux çekirdek kaynağını kernel.org'dan indirdim ve koştum:

make versatile_defconfig
make menuconfig

Daha sonra çekirdeğe aşağıdaki özellikleri ekledim:

  • PCI desteği (CONFIG_PCI)
  • SCSI Aygıt Desteği (CONFIG_SCSI)
  • SCSI Disk Desteği (CONFIG_BLK_DEV_SD)
  • SYM53C8XX Sürüm 2 SCSI Desteği (CONFIG_SCSI_SYM53C8XX_2)
  • Genişletilmiş 3 (ext3) dosya sistemi (CONFIG_EXT3_FS)
  • Genişletilmiş 4 (ext4) dosya sistemi (CONFIG_EXT4_FS)

Ayrıca disk görüntüsünü döngü monte ve:

  • yorum yaptı /etc/ld.so.preload
  • /etc/fstabkullanıma göre ayarlanmış /dev/sda1ve/dev/sda2

Daha sonra görüntüyü ayırdım ve makineyi şu şekilde başlatmaya çalıştım:

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"

Çekirdek dosya sistemini bağlayabildi, ancak hemen bir sorunla karşılaştı:

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

İlk başta, bunun SELinux ile ilgili olup olmadığını merak ettim. Çekirdeği önyüklemeye çalıştım:

selinux=0 enforcing=0

... ama kesinlikle hiçbir fark yaratmadı.

Neyi yanlış yapıyorum? Peki bu hata ne anlama geliyor?

Güncellemeler

Ayrıca, şanssız, aşağıdakileri denedim:

  • CONFIG_VFPEtkin olan ve olmayan derlemeyi denedim
  • Ekledim CONFIG_DEVTMPFSveCONFIG_DEVTMPFS_MOUNT
  • Uygulama bu yama ve etkinleştirme CPU_V6, CONFIG_MMC_BCM2835&CONFIG_MMC_BCM2835_DMA
  • Alet zincirini kullanmagcc-linaro-arm-linux-gnueabihf-raspbian
  • Araç zinciri ile basit bir C programı derlemek ve daha sonra init=işler yoluyla çekirdeğe geçmek - ikili formatlar arasında bir tutarsızlık olduğuna inanmamı sağlıyor

    • 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`
      
    • ELF başlığının farkı

Bu basit C programını araç zinciri ile derledim :

<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple

... ve önyükleme parametresini olarak /rootdeğiştirerek görüntüye kopyaladı . Bu, önyükleme yaparken bana aşağıdakileri verir:init=/root/simple

Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004

execv()Çağrıda boğuluyor gibi görünüyor .


3
Bunun sert kayan nokta desteği ile ilgili bir sorun olduğunu söyleyebilirim. CONFIG_VFP = y ürününüz var mı?
Alexandre Belloni

@AlexandreBelloni cat .config | grep CONFIG_VFPverir CONFIG_VFP=y- bu etkindir gibi görünüyor.
Nathan Osman

@AlexandreBelloni Çekirdeği olan ve olmayan denedim CONFIG_VFPve hiçbir fark yaratmıyor .
Nathan Osman

1
Sanırım Alexandre doğru yolda, ama VFP sorunlu bir ortam değil. versatilepbRP92'nin ARM1176'sından daha eski bir ARM926 CPU'dur, bu yüzden Raspbian ikili dosyaları taklit edilmeyen başka bir özellik kullanıyor olabilir. Gönderen unixmen.com/emulating-raspbian-using-qemu yapar -cpu arm1176yardım?
Gilles 'SO- kötü olmayı kes'

1
Hmmm. Belki de silahlı bir araç zincirini dener misin? (. Sadece röle stub için, çalışmaya devam fiili programı For You busybox kullanabilirsiniz -. Kapmak debian Armel gelen busybox-statik ikili)
Gilles 'SO dur olma kötülüğü'

Yanıtlar:


1

Ayrıca güvenilir bir başarı ile QEMU ile ARM görüntüleri önyükleme denedim. Bir ARM OS ile çalışmak için gerçek donanım kullanmanız veya geliştiricilerin ARM için daha güvenilir bir emülatör yapmasını sabırla beklemeniz gerektiğini söylediğim için üzgünüm.

Aralık 2018 ve hala ile ilgili sorunlar var qemu-system-arm.

Yeni kurulmuş bir Ubuntu 18 Bionic kullanarak bir QEMU emülatöründe Raspbian Jessie'yi önyükleyebildim, ancak işim için kararlı değildi, bu yüzden gerçek donanım için bırakmak zorunda kaldım. Sık sık donar.

qemu-system-arm işletim sistemimde çalışmadı, bu yüzden Ubuntu Bionic'i kurmak için Virtualbox'ı kullandım ve Bionic içinde Raspbian'ı QEMU ile kurdum.

Bu öğreticiyi takip ettim: https://azeria-labs.com/emulate-raspberry-pi-with-qemu/

İyi şanslar


1

Biraz eski bir soru olduğunu biliyorum, ancak Raspberry Pi görüntülerini QEMU ile test etmek için hala iyi cevaplar olmadığından, kısmi bir cevap vermeme izin verin.

Ubuntu 16.04 raspi3 görüntüsünü QEMU ile kullanmak istedim . İndirdi, çıkardı, önyükleme bölümünü monte etti, vmlinuz dosyasını ve initrd dosyasını aldı ve ... qemu-system-arm -M blabla -cpu ... -kernel ... çalışmıyor. Siyah ekran.

Sonra bir çekirdek qemu-4.4.34-jessie kullanarak burada "öldüren init" Aynı yol açtı Xenial resim / rootfs ile sorun var.

Ancak bilinen iyi bir çekirdek kullandığım ve basit statik olarak bağlı C programınız çalıştığından, sorun yalnızca dinamik bağlayıcıyı kullandığında ortaya çıkar. (Ve bağlayıcı özellikle çekirdeklere duyarlı değildir, çünkü en son debian9 (streç) tabanlı raspbian'dan ld-2.24, 4.4 debian8 (jessie) tabanlı bir çekirdek üzerinde iyi çalışır.)

Hatta "jessie" görüntü ile / ubuntu xenial görüntü içine iş dosyaları kopyaladıktan sonra bile sadece garip bir "preinit: KE" çağırma hatası var.

Ah, ve bir Ahududu Pi için bir çekirdek derleme isteyen herkes , doğrudan " resmi " dokümanlar / howto referans bu siteyi kontrol etmelisiniz .


0

Linux çekirdeği artık init çalıştırmıyor, bunun yerine init gibi bir sistemd çalıştırıyor, ancak unix felsefesine karşı yararlı olsa da, biraz daha gelişmiş özellikler ve ekstra çoklu görev yetenekleri kullanıyor.


nasıl olduğunu bilmek emin değilim
Qasim
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.