Como o modprobe é executado antes da montagem da raiz? (sem initrd)

1

Eu estou inicializando o linux mint (versão 4.14.13+) sem usar initrd / initramfs , e vejo que /sbin/modprobe é executado antes da montagem do sistema de arquivos raiz. Eu queria saber como isso é possível. Eu instrumentei o kernel para printk sempre que o sistema de arquivos é usado e é assim que eu sei que /sbin/modprobe foi usado.

O seguinte link contém a saída completa dmesg da minha inicialização: saída dmesg

[    3.175001] Used file system /sbin/modprobe!

[    3.179080] Used file system /dev/console!

[    3.844276] Used file system /dev/md0!

[    3.899302] VFS: Mounted root (ext4 filesystem) on device 8:17.
[    3.951578] devtmpfs: mounted

[    3.987527] Used file system /bin/sh!
    
por systolicDrake 10.07.2018 / 17:06

1 resposta

0

Eu não acho que esteja executando com sucesso /sbin/modprobe . Mas há algo que me interessou aqui. Parece que ele tenta abrir /dev/console antes de "devtmpfs: mounted" ou "Mounted root (ext4 filesystem)", e não há outra tentativa de abrir /dev/console . Mas achei que o kernel tinha que abrir /dev/console de algum sistema de arquivos para o init (/ bin / sh no seu caso) ...

Parece que, se você não tiver um initramfs, o kernel cria um falso muito simples. Se eu estou seguindo corretamente, é por isso que ele pode abrir /dev/console antes de montar um sistema de arquivos raiz real.

link

/*
 * Create a simple rootfs that is similar to the default initramfs
 */
static int __init default_rootfs(void)
{
    int err;

    err = sys_mkdir((const char __user __force *) "/dev", 0755);
    if (err < 0)
        goto out;

    err = sys_mknod((const char __user __force *) "/dev/console",
            S_IFCHR | S_IRUSR | S_IWUSR,
            new_encode_dev(MKDEV(5, 1)));
    if (err < 0)
        goto out;

    err = sys_mkdir((const char __user __force *) "/root", 0700);
    if (err < 0)
        goto out;

    return 0;

O diretório /root é baseado em outro lugar no código do kernel, para montar e fazer a transição para o sistema de arquivos root= real.

O commit que introduz esta função esclarece que esta função específica é usada somente quando o suporte initrd e initramfs são compilados. Caso contrário, o "default initramfs" forneceria o /dev/console e o /root , se você não tivesse passado um initramfs específico ao inicializar o kernel, e você não especificasse um initramfs para ser embutido no kernel.

link

    
por 12.07.2018 / 16:49