FreeBSD 커널을 ELF 형식으로 부팅해야 할까요, 아니면 zImage 형식으로 부팅해야 할까요? 어떻게?

FreeBSD 커널을 ELF 형식으로 부팅해야 할까요, 아니면 zImage 형식으로 부팅해야 할까요? 어떻게?

방금 Arm(32비트) Chromebook에서 Debian 12를 가상화했습니다. 호스트/dom0으로는 Devuan 5를 선택했고 게스트/domU로는 Debian 12를 선택했습니다. 그것은 아주 잘 작동합니다. 하지만 우리의 목표는 다릅니다. 우리는 FreeBSD를 domU로 가상화하고 싶습니다. FreeBSD arm 게스트를 위해 작동하는 Xen PV 네트워크 드라이버를 제공할 수 있습니까? 저는 Julien Grall이 Xen 드라이버를 Arm의 FreeBSD로 포팅했다는 사실을 발견했습니다. Julien의 작업이 FreeBSD의 업스트림에서 승인되는지 궁금합니다. 이 경우 Arm 커널의 FreeBSD에서 Xen PV 드라이버를 활성화하면 Arm의 Xen 게스트인 FreeBSD가 작동해야 합니다. Julien의 작업이 FreeBSD 업스트림에서 승인되지 않으면 우리는 그의 패치를 찾아서 Arm 커널의 FreeBSD에 적용해야 합니다.

우리는 다음 슬라이드를 찾았습니다.

https://events.static.linuxfound.org/sites/events/files/slides/Porting%20FreeBSD%20on%20Xen%20on%20ARM%20.pdf

슬라이드 13에서는 Arm 커널 구성의 XENHVM FreeBSD가 언급되어 있습니다. 이것이 바로 우리가 찾고자 하는 것입니다.

FreeBSD Xen 클라이언트에는 슬라이드 프레젠테이션 작성과 관련하여 몇 가지 제한 사항이 있는 것 같습니다. 예를 들어 데비안 책벌레 게스트의 경우 Chromebook의 실제 CPU 수와 일치시키기 위해 vcpus = '2'를 사용했지만 슬라이드 13에서는 FreeBSD 게스트가 1개의 VCPU만 지원한다고 언급하므로 vcpu = '1을 변경해야 합니다. 2개 이상의 vcpu에 대한 지원이 나중에 추가되지 않는 한 FreeBSD 게스트 구성에서는 '이 슬라이드쇼가 9년이 되었기 때문에 가능합니다.

여기에서 arm 커널 구성 파일의 XENHVM FreeBSD를 찾을 수 있을 것으로 예상합니다.

https://cgit.freebsd.org/src/tree/sys/arm/conf

그러나 내가 올바르게 이해하지 못하는 한 그것은 거기에 없습니다. 불행하게도 9년 전 Julien Grall의 슬라이드 프레젠테이션에서 언급된 Xen on Arm에 대한 지원은 공식 FreeBSD 소스 코드에 추가된 적이 없습니다. 저는 현재 Julien Grall이 작성한 패치가 여전히 온라인 어딘가에 게시되어 있는지 확인하기 위해 온라인을 검색하고 있습니다. 찾을 수 없으면 여기와 xen-users 메일링 리스트에 문의할 수 있습니다. Julien은 정기적으로 목록을 읽고 Xen on Arm에 대한 질문에 답변하므로 온라인에서 패치를 찾을 수 없는 경우 패치를 찾는 방법을 그가 알려줄 것이라고 생각했습니다.

FreeBSD 위키의 이 페이지에 따르면:

https://wiki.freebsd.org/Xen

FreeBSD는 arm이 아닌 x86에서만 Xen을 지원한다고 생각합니다. 따라서 Xen FreeBSD 게스트를 Arm에서 작업하도록 하는 것은 어려울 것입니다. 우리는 Julien Grall이 과거에 이를 작동시킬 수 있는 몇 가지 패치를 가지고 있다는 것을 알고 있습니다!

여기에서 Julien의 약간 새로운 슬라이드쇼를 찾았습니다.

https://www.slideshare.net/xen_com_mgr/bsdcan-2015-how-to-port-your-bsd

내용은 대부분 동일하지만 GENERIC FreeBSD 커널이 arm64에서 Xen을 지원한다고 언급하지만 여전히 arm 32비트에서 Xen을 위한 XENHVM FreeBSD 구성이 필요하다고 나와 있는데 아직 온라인에서 찾지 못했습니다.

Xen에서 부팅되는 Linux 커널과 그렇지 않은 FreeBSD 커널의 출력을 살펴보세요.

% file zImage-6.1.59-stb-xen-cbe+
zImage-6.1.59-stb-xen-cbe+: Linux kernel ARM boot executable zImage (little-endian)

% file FREEBSD-XENVIRT          
FREEBSD-XENVIRT: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /red/herring, for FreeBSD 11.0 (1100048), not stripped

부팅할 수 없는 FreeBSD 커널은 ELF 형식이지만, 부팅할 수 있는 Linux 커널은 zImage 형식입니다.

xenbits.xenproject.org에서 문서를 읽는 데 시간을 보냈고 문서에 따르면 ARM의 Xen은 커널을 zImage 형식으로 부팅하는 방법만 알고 있으므로 FreeBSD 커널 형식이 현대에서는 x86 커널로 잘못 감지됩니다. 젠.

나는 또한 Xen에서 FreeBSD/arm을 부팅하는 작업에 대해 FOSDEM 2014에서 Julien Grall의 30분 비디오 프리젠테이션을 보았습니다:

https://archive.fosdem.org/2014/schedule/event/freebsd_xen_arm/

해당 비디오와 다른 곳에서 Julien은 Xen의 FreeBSD/arm용 부팅 ABI가 아직 개발되지 않았으며 가끔 충돌이 발생하며 문제를 조사해야 한다고 언급했습니다. 그는 Linux에서 사용하는 zImage ABI에 대해 언급했지만 FreeBSD는 해당 형식을 사용하지 않으며 Xen에서 FreeBSD/arm을 부팅하는 데 어떤 형식을 사용할 것인지는 당시에는 공개적인 질문이었습니다. 불행하게도 9년이 지난 지금도 지원되는 유일한 형식은 여전히 ​​Linux에서 사용되는 zImage 형식입니다.

당시 Julien의 임무는 Linux에서 사용되는 지원되는 zImage 형식 대신 ELF 바이너리를 사용하여 Xen에서 FreeBSD/arm을 부팅하는 것이었고 Julien의 패치로 생성된 FreeBSD ELF 형식 바이너리를 부팅하려고 하면 최신 Xen 도구 스택이 오류가 발생하여 종료됩니다. 따라서 가장 좋은 해결책은 ELF 형식 대신 zImage 형식으로 FreeBSD 커널을 빌드하는 규칙을 이식하는 것입니다. Linux에서 Linuxarm 커널을 zImage 형식으로 빌드하는 방법을 알아보기 위해 Linux의 Makefiles를 조사해 왔지만 이해하기가 쉽지 않습니다.

관련 정보