Como você está usando o cpio, na verdade você está fazendo um initramfs , não um initrd . Um initrd seria armazenado como uma imagem do sistema de arquivos, não como um arquivo cpio. Initrd e initramfs têm funções similares no processo de inicialização do Linux, para fornecer alguns arquivos que estão disponíveis antes do verdadeiro sistema de arquivos raiz (e que são usados para montar o verdadeiro sistema de arquivos raiz); eles são tratados de maneiras bem diferentes, mas isso não é relevante aqui. O initrd é mais antigo e um pouco depreciado em favor do initramfs. Muitos sistemas de compilação ainda usam o nome de arquivo initrd
, mesmo que tenham alterado o conteúdo para um initramfs.
Imagens raiz geralmente contêm nós de dispositivos e arquivos que precisam de permissões específicas. O comando cpio
pode gerar apenas um archive com base nos arquivos que existem em seu sistema de arquivos, e você precisa de permissão de root para criar nós de dispositivos ou arquivos pertencentes ao root. A origem do kernel contém uma ferramenta usr/gen_init_cpio
e um script de wrapper scripts/gen_initramfs_list.sh
que são fornecidos precisamente para gerar um initramfs sem ter que criar todos os arquivos no sistema de arquivos e, portanto, gerar um initramfs sem exigir nenhum privilégio. Esses programas estão documentados na árvore de fontes do kernel, em Documentation/filesystems/ramfs-rootfs-initramfs.txt
e < href="https://www.kernel.org/doc/Documentation/early-userspace/README"> Documentation/early-userspace/README
.
A maneira normal de criar um initramfs é descrita em ramfs-rootfs-initramfs.txt
na seção “Preenchendo initramfs”. Você escreve um arquivo de texto contendo uma lista de caminhos para criar com seu tipo (diretório, regular, nó de dispositivo, etc.), permissões e outros atributos. Para arquivos regulares, você fornece o nome de um arquivo local com o conteúdo. Em seguida, execute usr/gen_init_cpio
neste arquivo. Ao criar um kernel, se você definir a opção CONFIG_INITRAMFS_SOURCE
como um nome de arquivo, um initramfs será gerado chamando usr/gen_init_cpio
nesse arquivo.
Se você já tiver uma imagem initramfs e desejar modificá-la, use cpio -tv
para listá-la e reconstrua o arquivo de descrição de ramfs com base nisso. Se possível, obtenha o arquivo de descrição initramfs da fonte original do kernel, para salvar seu trabalho. Extraia o conteúdo dos arquivos regulares somente em algum diretório. Em seguida, modifique os arquivos regulares e o arquivo de descrição de ramfs e, finalmente, execute usr/gen_init_cpio
para gerar um novo initramfs.