커널이 초기화를 찾을 수 없습니다

커널이 초기화를 찾을 수 없습니다

아래 지침에 따라 처음부터 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를 구축하는 모든 사람에게 도움이 되기를 바랍니다.

지원해 주신 모든 분들께 감사드립니다.

관련 정보