Inicializando em uma imagem do kernel

3

Eu tenho uma imagem do kernel do Linux compilada recentemente (arquivo vmlinuz) e quero inicializá-la. Estou ciente de que isso não me dará um sistema Linux familiar, mas espero poder, pelo menos, executar algum programa básico "Hello world" como o processo init. Isso é possível e, em caso afirmativo, como?

Até agora eu tentei fazer isso instalando o GRUB em um USB que tinha um sistema de arquivos ext2 com o arquivo vmlinuz em / boot. Ele deve ter carregado a imagem do kernel porque ela terminou em uma mensagem de kernel panic: "VFS: Não é possível montar o fs raiz no bloco desconhecido (0,0)"

Aqui está a entrada no grub.cfg:

menuentry 'linux' --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0)'
    search --no-floppy --fs-uuid --set=root <my USB drive's UUID>
    linux /boot/vmlinuz root=UUID=<my USB drive's UUID> ro $vt_handoff
}

Obrigado por qualquer ajuda.

    
por mikebolt 24.08.2014 / 23:12

2 respostas

2

É possível sim. Você precisa passar init=/bin/sh para o kernel e você precisa se lembrar que o rootfs provavelmente foi montado posteriormente.

Para executar diretamente seu programa, você precisa dizer ao kernel para invocá-lo depois de configurar o hardware, mas observe que o espaço de usuário normal não estará disponível para o seu programa.

    
por 25.08.2014 / 00:29
1

Você não precisa do GRUB para inicializar o kernel: ele já tem seu próprio gerenciador de inicialização, então quando você executa:

make isoimage FDINITRD="$ROOTFS_PATH"

o arch/x86/boot/image.iso gerado já é inicializável, como pode ser verificado com:

qemu-system-x86_64 arch/x86/boot/image.iso

O que você faz precisa é de rootfs.cpio.gz , que é um arquivo que contém o sistema de arquivos raiz no qual o kernel será executado:

Se você ainda quiser usar o GRUB, a entrada mínima é:

menuentry "main" {
    linux /boot/bzImage
    initrd /boot/rootfs.cpio.gz
}

em que bzImage vem de arch/x86/boot/bzImage . Você pode tentar isso facilmente com grub-mkrescue e um diretório assim .

    
por 25.10.2015 / 23:42