Executando o bzImage no QEMU: Não é possível montar o root fs no bloco desconhecido (0.0)

8

Eu compilei o kernel fazendo make menuconfige make. Eu estava tentando executar o bzImage no qemu, qemu -kernel bzImagemas não funcionou com a mensagem de erro:

Unable to mount root fs on unknown-block(0.0)

Erro no kernel do Linux

Como posso corrigir isso? Como posso executar o bzImage no qemu?

Coder404
fonte
5
O kernel inicializou bem, mas não consegue encontrar o sistema de arquivos raiz. Quais discos você montou na VM? Que tipo de sistema de arquivos é o sistema de arquivos raiz, que tipo de disco? Todos os drivers necessários são compilados no kernel (esquecer um dos drivers é um erro comum)?
Gilles 'SO- stop be evil'
@ Gilles Eu não montei um sistema de arquivos. Após compilar, fui direto para o arquivo em que o bzImage está localizado (../arch/x86/boot) e executei o comando "qemu -kernel bzImage". foi quando recebi o erro.
precisa saber é o seguinte

Respostas:

11

Isso deu certo. O kernel inicializou bem. O erro é:

Não foi possível montar o root fs no bloco desconhecido (0.0)

O kernel está procurando um sistema de arquivos raiz. Você precisa fornecer um. Você não pode interagir com um kernel sem executar processos nele, e o processo inicial precisa ser carregado de algum lugar: quando o kernel é iniciado, ele monta um sistema de arquivos (o sistema de arquivos raiz) no diretório /e executa o programa /sbin/init. O programa init normalmente é responsável por executar scripts de inicialização e iniciar serviços, incluindo programas que permitem que os usuários efetuem login.

Você deve se certificar de que o kernel possa montar o sistema de arquivos raiz. Ele deve ter drivers para o tipo de sistema de arquivos e para todas as camadas envolvidas no dispositivo de bloco (controlador de disco (adaptador SCSI / SATA / IDE / USB /…), tipo de partição etc.).

O Linux oferece uma possibilidade adicional, que é carregar um sistema de arquivos inicial na RAM usado durante o processo de inicialização para localizar e montar o sistema de arquivos raiz. Esse sistema de arquivos inicial pode conter módulos que manipulam o dispositivo e o tipo de sistema de arquivos do sistema de arquivos raiz. Existem dois mecanismos ligeiramente diferentes: initrd e initramfs.

Gilles 'SO- parar de ser mau'
fonte
Obrigado pela resposta! Posso criar um sistema de arquivos virtual para inicializar? Se sim, como eu faria isso?
precisa saber é o seguinte
@ Coder404 Você quer dizer um sistema de arquivos virtual para usar como sistema de arquivos raiz? Faça dele um drive ram.
Gilles 'SO- stop be evil'
Eu quero usar um sistema de arquivos virtual como um sistema de arquivos raiz para o kernel que estou construindo no QEMU. Como eu faria o sistema de arquivos virtual?
precisa saber é o seguinte
1

Mesmo que os sistemas de arquivos sejam compilados sozinhos no kernel, é necessário criar um sistema de arquivo inicial que estará presente na RAM para executar o kernel. Para criar esse sistema de arquivos ram inicial, o mkinitrd é usado. No ubuntu, mkinitramfs é usado em vez disso

cd ~ / linux / linux-2.6.32.59 / arch / i386 / boot

mkinitramfs -o initrd.img-2.6.32.59

depois disso, execute o kernel no qemu

qemu-system-i386 -kernel bzImage -initrd initrd.img-2.6.32.59 -m 512M

-initrd representa novamente o sistema de arquivos ram inicial

você pode encontrar o sistema de arquivos ram em /boot/initramfs-linux.img

gerrard2461
fonte