QEMU는 더 이상 로컬로 구축된 Linux 커널을 부팅할 수 없습니다.

QEMU는 더 이상 로컬로 구축된 Linux 커널을 부팅할 수 없습니다.

어제부터 더 이상 qemu내 노트북(Arch Linux 실행)에 컴파일된 외부 커널을 사용하여 부팅할 수 없습니다.

바닐라 Linux 커널(Linus Torvalds의 github 저장소에 있는 버전 4.13)을 컴파일한 후 qemu다음과 같이 부팅해 보면 다음과 같습니다.

qemu-system-x86_64 --enable-kvm -boot c -kernel arch/x86/boot/bzImage

그러면 2~3초마다 새로 고쳐지는 SeaBIOS 출력을 보여주는 디스플레이가 시작됩니다.

   Booting from ROM...
   Probing EDD (edd=off to disable)... ok
   early console in extract_kernel
   input_data: 0x0000000002c773b4
   input_len: 0x000000000090c470
   output: 0x0000000001000000
   output_len: 0x000000000173a968
   kernel_total_size: 0x00000000025a7000

   Decompressing Linux... Parsing ELF...

qemuSeaBIOS 디버그 출력을 활성화하기 위해 다음 플래그를 추가하는 경우 :

-chardev stdio,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios

계속 반복되는 출력은 다음과 같습니다.https://pastebin.com/mZKeM6r5

흥미롭게도 다른 컴퓨터(Debian 실행)에서 동일한 구성 파일을 사용하여 동일한 커널을 컴파일하고 이를 bzImage내 컴퓨터에 복사하면 정상적으로 부팅됩니다. 그래서 내 툴체인에 무슨 일이 벌어지고 있는 것 같아요. 최근에 업데이트가 있었지만 gcc이전 버전의 패키지(문제가 없었을 때 사용했던 버전)로 돌아가도 문제가 해결되지 않았습니다.

distcc임시 해결 방법으로 데비안 컴퓨터에서 컴파일을 위해 파일을 앞뒤로 복사하는 것을 피할 수 있다고 생각했지만 문제는 계속 발생하므로 문제는 컴파일 프로세스의 마지막 단계(링크에서 링크까지)에 있는 것으로 추측됩니다. 내 노트북 ​​상급자에서 이런 일이 발생하기 때문입니다).

추가 정보:

  • gcc내 노트북 ​​버전(ArchLinux): 8.2.0(패키지 버전 = 8.2.0-2)
  • gcc내 Debian 컴퓨터의 버전: 6.3.0(패키지 버전 = 4:6.3.0-4)

편집하다: SeaBIOS 출력 완료

답변1

나는 같은 문제를 가지고있다. 제 경우에는 binutils를 2.31로 업데이트했기 때문에 이런 문제가 발생했습니다. 질문을 게시한 날짜로 판단하면 8월 2일부터 Arch Linux binutils 설치를 2.31로 업데이트했을 것 같지 않습니다. 이는 꽤 좋은 일치일 것입니다.

당신은해야합니다이번에 제출하세요4.16 이전의 커널에 적용 가능합니다.

binutils 2.31에서는 ld링커( )의 기본값을 변경하여 기본값이최대 페이지 크기2MiB에서 4kiB로 줄었습니다. 명시된 커밋이 적용되지 않으면 이 변경으로 x86_64 커널이 중단됩니다.

관련 정보