Isso é possível se CONFIG_BLOCK
for indefinido, pois init/do_mounts.c
contém mount_root
, que é executado após o kernel não executar /init
no initramfs, o seguinte:
#ifdef CONFIG_BLOCK
{
int err = create_dev("/dev/root", ROOT_DEV);
if (err < 0)
pr_emerg("Failed to create /dev/root: %d\n", err);
mount_block_root("/dev/root", root_mountflags);
}
#endif
Fonte: link
Nesse caso, mount_root
é bem-sucedido sem ter feito nada e o kernel continua tratando o initramfs como uma raiz fs adequada.
Infelizmente, transformar CONFIG_BLOCK
off não é prático para a maioria dos usos. O que me levou a acreditar que isso deveria funcionar é que, no patch para a placa de desenvolvimento específica com a qual estou trabalhando, a condição foi substituída por:
#if defined(CONFIG_BLOCK) && !defined(CONFIG_INITRAMFS_SOURCE)
Seria bom adicionar suporte para root=initramfs
que faz com que mount_root
retorne sem fazer nada, e isso deve ser um patch trivial de uma linha. Eu não tenho idéia se seria aceitável a montante, no entanto.