为什么内核不能运行init?


14

我已经在此页面上下载了Raspbian图像。我正在尝试编译可用于在qemu中引导映像的内核。

我从kernel.org下载了Linux内核源代码并运行:

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_DEVTMPFSCONFIG_DEVTMPFS_MOUNT
  • 应用这个补丁并启用CPU_V6CONFIG_MMC_BCM2835,&CONFIG_MMC_BCM2835_DMA
  • 使用gcc-linaro-arm-linux-gnueabihf-raspbian工具链
  • 使用工具链编译一个简单的C程序,然后通过Works将其路径传递给内核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`
      
    • ELF标头的差异

我使用工具链编译了这个简单的C程序

<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()通话似乎令人窒息。


3
我会说这是关于硬浮点支持的问题。您有CONFIG_VFP = y吗?
亚历山德拉·贝洛尼

@AlexandreBelloni cat .config | grep CONFIG_VFP产生CONFIG_VFP=y-好像已启用。
内森·奥斯曼

@AlexandreBelloni我尝试过使用和不使用内核,CONFIG_VFP这没有什么区别。
内森·奥斯曼

1
我认为Alexandre处在正确的轨道上,但是VFP并不是问题所在。versatilepb是一个ARM926 CPU,它比RPi的ARM1176老,因此Raspbian二进制文件可能正在使用某些其他未被仿真的功能。来自unixmen.com/emulating-raspbian-using-qemu,有-cpu arm1176帮助吗?
吉尔(Gilles)'所以

1
嗯 也许尝试Armel工具链?(对于保持运行状态的实际程序,而不仅仅是中继存根。您可以使用busybox-从debian armel中获取busybox静态二进制文件。)
Gilles'SO- stop

Answers:


1

我也尝试过使用QEMU引导ARM映像,但没有成功。遗憾的是,您将必须使用真正的硬件来与ARM OS一起使用,或者耐心等待开发人员为ARM制作更可靠的仿真器。

它的2018年12月仍然存在问题qemu-system-arm

我能够使用全新安装的Ubuntu 18 Bionic在QEMU模拟器上启动Raspbian Jessie,但是它对我的工作不稳定,因此我不得不将其留给真正的硬件使用。它会经常冻结。

qemu-system-arm 无法在我的操作系统上运行,因此我使用Virtualbox安装了Ubuntu Bionic,并在Bionic内部使用QEMU安装了Raspbian。

我遵循了本教程:https : //azeria-labs.com/emulate-raspberry-pi-with-qemu/

祝好运


1

我知道这是一个有些陈旧的问题,但是由于使用QEMU测试Raspberry Pi图像仍然没有好的答案,请允许我提供部分答案。

我想将Ubuntu 16.04 raspi3映像与QEMU一起使用。下载它,解压缩它,安装启动分区,得到了vmlinuz文件和initrd文件,然后... qemu-system-arm -M blabla -cpu ... -kernel ...不起作用。黑屏。

然后,从此处使用带有xenial映像/ rootfs 的kernel-qemu-4.4.34-jessie会导致您遇到相同的“初始化被杀死”问题。

但是由于我使用的是已知的良好内核,并且您的简单静态链接C程序有效,所以问题很可能仅在使用动态链接器时才会出现。(并且链接器对内核不是特别敏感,因为来自最新的基于debian9(stretch)的raspbian的ld-2.24在基于4.4 debian8(jessie)的内核上可以正常工作。)

即使将可以在“ jessie”图像上使用或与“ jessie”图像一起使用的文件复制到ubuntu原始图像中,我也只会收到一个奇怪的“ calling preinit:KE”错误。

哦,任何希望为Raspberry Pi编译内核的人都应该检查站点,站点直接引用了“ 官方 ”文档/方法。


0

linux内核不再运行init了,而是运行了像init一样的systemd,但是有一些更高级的功能和额外的多任务处理能力,尽管针对unix哲学systemd很有用。


不知道这是怎么知道的
Qasim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.