Debian 소스에서 빌드한 커널에는 QEMU /dev/vda가 표시되지 않습니다. 하지만 사전 빌드된 Debian 커널에도 동일한 설정이 작동합니다.

Debian 소스에서 빌드한 커널에는 QEMU /dev/vda가 표시되지 않습니다. 하지만 사전 빌드된 Debian 커널에도 동일한 설정이 작동합니다.

ARM용 데비안 시스템을 크로스 컴파일하려고 합니다. 나는 작동하는 크로스 컴파일러 설정을 가지고 있으며 QEMU에 설치된 Debian 시스템에서 프로그램을 실행할 수 있습니다. 나는 QEMU에 명령줄 옵션으로 제공하는 가상 디스크(qcow2 형식)와 별도의 커널 및 initramfs 이미지(호스트 시스템에서)를 사용하고 있습니다.

미리 컴파일된 데비안 커널로 부팅하면 모든 것이 잘 작동하고 시스템은 /dev/vda*의 /dev/vda1 파티션에서 부팅됩니다. 제 생각에는 qcow2 디스크 이미지에서 생성된 가상 디스크 장치 QEMU인 것 같습니다.

그러나 Debian 커널 소스를 가져와(게스트 시스템에서 다운로드하여 해당 시스템과 Debian 버전에 대한 올바른 소스를 얻은 다음 호스트에 복사) 호스트 시스템에서 크로스 컴파일하면 결과는 다음과 같습니다. 커널은 initramfs의 busybox만 부팅합니다. 이 시점에서는 /dev/vda* 장치가 존재하지 않기 때문에 루트 장치를 찾을 수 없습니다. (/dev/sd*, /dev/hd* 등의 장치도 없습니다.)

내 커널에 QEMU 가상 디스크 장치가 전혀 표시되지 않는 이유가 무엇입니까? (QEMU에는 정확히 동일한 명령줄이 제공됩니다. 유일한 차이점은 커널 이미지 파일 이름입니다.) 커널을 빌드할 때 잘못 구성했습니까? (기본 설정의 경우 실제로 클라이언트 시스템의 /boot 폴더에서 얻은 데비안 커널 구성 파일로 시작했습니다.)

데비안 버전(게스트)은 8.11(jessie)입니다. Linux 커널 버전은 3.16.0.6-armmp-lpae입니다.

내 QEMU 명령줄은 다음과 같습니다.

qemu-system-arm -M virt -m 1024 -kernel <the kernel image file> -initrd initrd.img-3.16.0-6-armmp-lpae -append 'root=/dev/vda2' -drive if=none,file=hda.qcow2,format=qcow2,id=hd -device virtio-blk-device,drive=hd -netdev user,id=mynet -device virtio-net-device,netdev=mynet -nographic

답변1

최소한 다음 커널 구성이 필요할 수 있습니다.

CONFIG_BLOCK=y
CONFIG_BLK_DEV=y
CONFIG_DEVTMPFS=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_BLK=y

그런 다음 이를 initrd devtmpfs에 마운트하면 ./dev/dev/vda

CONFIG_VIRTIO_MENU기본적으로 켜져 있더라도 사용하는 경우에는 tinyconfig분명히 필요합니다 .

관련 정보