여기에 64비트 커널을 부팅할 수 없는 머신이 있습니다(efi32 및 일부...특이한 펌웨어가 있습니다).
현재 64비트 Linux 시스템을 부팅할 수 있는 유일한 방법은 다음과 같습니다.
- 부팅/라이브 CD에서 32비트 배포판을 부팅합니다.
kexec
내 자신의 64비트 커널을 부팅하기 위한 것입니다 .
물론 32비트 배포판을 다시 설치할 수도 있지만 이는아니요내가 원하는 것은. 나는 실제 64비트 커널/initrd에 대한 부트로더 역할을 할 수 있는 32비트 커널/initrd 콤보를 원합니다.
이것은 내 자신의 보조 커널을 로드하고 시작할 수 있는 최소 initrd 시스템입니다. 이 작업에 대한 기존 솔루션이 있습니까?
답변1
32비트 grub 부트 로더는 "linux" 및 "initrd" 명령을 사용하여 CONFIG_EFI_MIXED 옵션으로 컴파일된 64비트 Linux 이미지를 부팅합니다.
이러한 Grub 명령은 커널을 부팅하기 전에 EFI의 ExitBootServices()를 실행합니다. 따라서 커널은 보안 부팅을 사용할 수 없으며 PCI 슬롯의 ROM(특히 그래픽 카드의 BIOS)에 액세스할 수 없습니다.
또 다른 방법은 "shim" 부트로더를 실행한 다음 Grub을 실행하고 Grub의 linuxefi 및 linuxrdefi 명령을 사용하는 것입니다. ExitBootServices()를 실행하는 대신 커널에서 EFI 스텁을 호출하여 ROM 등을 복사한 다음 커널을 올바르게 부팅하기 전에 ExitBootServices() 자체를 호출합니다. 심 부트로더 없이 Grub의 "linuxefi" 명령을 실행하려고 하면 보안 부팅이 있는지 여부에 관계없이 "체크섬 오류" 오류가 발생합니다. 불행하게도 이 접근 방식에는 두 가지 문제가 있습니다. (1) 커널은 32비트여야 하며, (2) 현재 32비트 EFI 스텁에는 커널 부팅을 방해하는 버그가 있습니다(출력 없이 중단됨). .
이 실수는 악명이 높습니다. 또한 일부 64비트 Linux 이미지는 실패하며 이는 일부 정렬 또는 데이터 덮어쓰기 문제를 강력하게 나타냅니다.
원하는 결과를 얻는 유일한 방법은 32비트 EFI 스텁으로 부팅할 수 있도록 커널을 수정한 다음 올바른 64비트 커널로 변환하는 것입니다. CONFIG_EFI_MIXED의 작성자가 이 문제를 해결하고 있을 것입니다. 이메일을 보내실 수도 있습니다.
답변2
CONFIG_EFI_HYBRID어쩌면 그것이 당신에게 필요한 것일 수도 있습니다.