カーネルが初期化を見つけることができません

カーネルが初期化を見つけることができません

以下の手順に従って、最初からLinuxシステムビルドを構築する方法を学んでいます。https://www.linuxfromscratch.org/lfs/view/stable-systemd/index.htmlVirtualBox 6.1では、カーネルから起動すると、「カーネルパニック - 同期されていません:ジョブの初期化が見つかりません」というエラーが表示されます。

[    1.355071] Run /sbin/init as init process
[    1.356040]   with arguments:
[    1.356645]     /sbin/init
[    1.357965]   with environment:
[    1.358614]     HOME=/
[    1.359109]     TERM=linux
[    1.359797]     BOOT_IMAGE=/boot/vmlinuz-5.13.12-lfs-11.0-systemd
[    1.361244] Run /etc/init as init process
[    1.362403]   with arguments:
[    1.363103]     /etc/init
[    1.363741]   with environment:
[    1.364402]     HOME=/
[    1.364949]     TERM=linux
[    1.365571]     BOOT_IMAGE=/boot/vmlinuz-5.13.12-lfs-11.0-systemd
[    1.366633] Run /bin/init as init process
[    1.367359]   with arguments:
[    1.368024]     /bin/init
[    1.368629]   with environment:
[    1.369197]     HOME=/
[    1.369769]     TERM=linux
[    1.370361]     BOOT_IMAGE=/boot/vmlinuz-5.13.12-lfs-11.0-systemd
[    1.371632] Run /bin/sh as init process
[    1.373075]   with arguments:
[    1.373848]     /bin/sh
[    1.374396]   with environment:
[    1.375127]     HOME=/
[    1.375727]     TERM=linux
[    1.376331]     BOOT_IMAGE=/boot/vmlinuz-5.13.12-lfs-11.0-systemd
[    1.377607] Kernel panic - not syncing: No working init found.  Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.
[    1.379913] CPU: 5 PID: 1 Comm: swapper/0 Not tainted 5.13.12 #1
[    1.381342] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[    1.382987] Call Trace:
[    1.383568]  dump_stack+0x64/0x7c
[    1.384258]  ? memcpy_orig+0xd0/0x10f
[    1.385047]  panic+0xf6/0x2b7
[    1.385734]  ? kernel_execve+0x13c/0x1a0
[    1.386571]  ? rest_init+0xa4/0xa4
[    1.387274]  kernel_init+0xf7/0xfc
[    1.387986]  ret_from_fork+0x22/0x30
[    1.389695] Kernel Offset: 0x3a600000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[    1.391756] ---[ end Kernel panic - not syncing: No working init found.  Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance. ]---

私は/sbin/initを確認しましたが、実際にはそこにありますが、それについて何も知りません。誰でも私を助けることができますか? ? ?

これは私のgrub.cfgファイルです。

# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
set root=(hd0,2)

menuentry "GNU/Linux, Linux 5.13.12-lfs-11.0-systemd" {
        linux   /boot/vmlinuz-5.13.12-lfs-11.0-systemd root=/dev/sda2 ro
}

これは/etc/fstabです

# Begin /etc/fstab

# file system  mount-point  type     options             dump  fsck
#                                                              order

/dev/sda2     /            ext4    defaults            1     1
/dev/sda1     swap         swap     pri=1               0     0

表示される問題は、カーネルが/sbin/initプログラムを見つけることができないことです。実行されたテスト情報:

  • /sbin/initがここに接続されており、/lib/systemd/systemdを指すことができることを確認しました。
  • /lib/systemd/systemdが存在し、64ビットELFアプリケーションです。
  • GRUBで「init = / sbin / init」オプションを実行してみましたが、成功しませんでした。
  • GRUBブートコンソールを使用してファイルシステムにアクセスできること、ファイルが表示されていることを確認します。
  • GRUBのinitパラメータを使用して/ bin / bashを直接実行してみましたが、成功しませんでした。
  • 権限を確認しましたが、成功しませんでした。
  • ログレベルを7にアップグレードしようとしましたが、他の情報は表示されませんでした。

もちろん他のチュートリアルなども確認しましたが、役に立ちませんでした。一方、SysVInitを使用してLFSを構築すると、正常に起動します。

今、私たちは本当に道の終わりに達したような気がします。誰でもどんなアイデアがありますか?

編集1:カーネルにオプションを追加し、追加の出力とエラーが発生しました。 grub.cfgが更新されました。

# Begin /boot/grub/grub.cfg
set default=0
set timeout=5

insmod ext2
insmod gzio
insmod part_msdos
insmod msdospart
set root=(hd0,2)

menuentry "GNU/Linux, Linux 5.13.12-lfs-11.0-systemd" {
        linux   /boot/vmlinuz-5.13.12-lfs-11.0-systemd root=UUID=7d13e10f-8433-418c-bcb8-d5e7d272ea25 ro console=ttyS0 console=tty0 ignore_loglevel init=/lib/systemd/systemd
}

カーネルからのフィードバック:

[    3.847566] Freeing unused kernel image (initmem) memory: 1332K
[    3.854847] Write protecting the kernel read-only data: 20480k
[    3.859289] Freeing unused kernel image (text/rodata gap) memory: 2032K
[    3.865813] Freeing unused kernel image (rodata/data gap) memory: 1100K
[    3.870388] Run /lib/systemd/systemd as init process
[    3.872981]   with arguments:
[    3.874161]     /lib/systemd/systemd
[    3.876099]   with environment:
[    3.878269]     HOME=/
[    3.880556]     TERM=linux
[    3.882003]     BOOT_IMAGE=/boot/vmlinuz-5.13.12-lfs-11.0-systemd
[    3.884611] Kernel panic - not syncing: Requested init /lib/systemd/systemd failed (error -2).
[    3.885531] CPU: 4 PID: 1 Comm: swapper/0 Not tainted 5.13.12 #1
[    3.885531] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
[    3.885531] Call Trace:
[    3.885531]  dump_stack+0x64/0x7c
[    3.885531]  ? memcpy_orig+0xd0/0x10f
[    3.885531]  panic+0xf6/0x2b7
[    3.885531]  ? rest_init+0xa4/0xa4
[    3.885531]  kernel_init+0xab/0xfc
[    3.885531]  ret_from_fork+0x22/0x30
[    3.885531] Kernel Offset: 0x3aa00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[    3.885531] ---[ end Kernel panic - not syncing: Requested init /lib/systemd/systemd failed (error -2). ]---

私たちはカーネルヘッダのエラーコードを追跡してきました。

/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef _ASM_GENERIC_ERRNO_BASE_H
#define _ASM_GENERIC_ERRNO_BASE_H

#define EPERM        1  /* Operation not permitted */
#define ENOENT       2  /* No such file or directory */

アクセス権があるかどうかを確認するために、起動時にgrubでどのような追加テストを実行できますか?実際、grubコンソールを使用している場合は、すでにファイルシステムを参照してファイルリストを一覧表示できます。どんな提案がありますか?

答え1

私たちは動作するlfs systemVカーネルを使用し、systemdインスタンスからこのカーネルを起動して最終的に問題を発見しました。 systemdが起動し、すべてが正常に実行されます。ブートメッセージの違いを分析したところ、最初はカーネルが機能せず、SCSIサブシステムが起動されず、ディスクが検出されず、ファイルシステムが利用できず、何も読み取れないことがわかりました。

根本的な原因は間違いなくカーネルの誤った「make def」構成によるものですが、より詳細に確認する必要があります。とにかく、私たちの最初の仮定は、エラーが発生したときにGRUBではなくディスクにアクセスしようとしたKERNELなので、ディスクにアクセスできるかどうかはもはや重要ではないからです。

これがLFSを構築するすべての人に役立つことを願っています。

応援してくださった皆さんに感謝します。

関連情報