Entendendo um arquivo de configuração simples para o initramfs

1

Alguém pode me explicar o que está acontecendo a seguir?

# This is a very simple, default initramfs

    dir /dev 0755 0 0
    nod /dev/console 0600 0 0 c 5 1
    nod /dev/tty 0666 0 0 c 5 0
    nod /dev/null 0600 0 0 c 1 3
    nod /dev/mem 0600 0 0 c 1 1
    nod /dev/kmem 0600 0 0 c 1 2
    nod /dev/zero 0600 0 0 c 1 5
    nod /dev/random 0600 0 0 c 1 8
    nod /dev/urandom 0600 0 0 c 1 9

    dir /dev/pts 0755 0 0
    nod /dev/ptmx 0666 0 0 c 5 2

    nod /dev/ttyS0 0666 0 0 c 4 64
    nod /dev/ttyS1 0666 0 0 c 4 65
    nod /dev/ttyS2 0666 0 0 c 4 66

    dir /bin 755 0 0
    dir /proc 755 0 0

    file /bin/hello ${INSTALL_ROOT}/projects/${SAMPLE}/hello/hello 755 0 0
    slink /bin/init hello 777 0 0

O que estamos tentando conseguir aqui, na verdade?

Isso é semelhante a esse aqui

Geralmente está claro para mim que estamos tentando executar (hello) a partir do init (última linha no código).

    
por user2799508 07.04.2014 / 10:10

2 respostas

2

Este arquivo é um arquivo de entrada para o programa gen_init_cpio na árvore de código-fonte do kernel.

Ele gera um arquivo cpio que é adequado para initramfs com os arquivos / dirs / devices (= nós) / ... listados no arquivo de entrada.

A sintaxe é

file <name> <location> <mode> <uid> <gid> [<hard links>]
dir <name> <mode> <uid> <gid>\n
nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>
slink <name> <target> <mode> <uid> <gid>

etc.

Quais programas são executados na inicialização, depende do programa init no initramfs. Aqui, o programa init é um link simbólico para hello .

    
por 07.04.2014 / 10:23
2

@jofel já respondeu a essa pergunta com admirável precisão - o que deve ser alcançado, no entanto, é a transferência do kernelspace para o userspace. Quando o kernel carrega, ele garante que todos os sistemas estejam operacionais, então ele procura init. Sem init a inicialização do seu sistema nunca sairia do chão - você nunca seria capaz de interagir com a máquina.

Alguns anos atrás, os desenvolvedores do kernel decidiram que estavam cansados de suportar 1001 e diferentes configurações possíveis para dispositivos raiz - estava simplesmente se tornando complicado demais para iniciar um computador devido ao grande número de possíveis sistemas de arquivos raiz e combinações de tipo de dispositivo raiz . Então desistiram de tentar.

Initramfs está embutido em todo kernel do Linux desde o 2.6. Em todos os casos, desde então, o userspace começa lá - o kernel controla o sistema do computador até init , senta-se para observar os fogos de artifício e lava as mãos de todo o assunto.

A árvore de diretórios descrita pelo arquivo em sua pergunta é um diretório raiz do Linux que é compilado no próprio kernel. É o único dispositivo de raiz que o kernel irá incomodar em procurar; todo o resto é até init.

    
por 07.04.2014 / 13:19

Tags