Múltiplas opções de raiz na linha de comando do Linux

5

Minha linha de comando do kernel é assim:

root=31:0 ro noinitrd console=ttyS0,115200 root=/dev/mtdblock2 rootfstype=squashfs

Acho que a primeira entrada root identifica um disco pelo seu número de dispositivo maior e menor e a segunda entrada o identifica pelo nome. Posso confirmar que rootfs está de fato em /dev/mtdblock2 , mas não sei interpretar 31:0 .

    
por Atilla Filiz 13.01.2012 / 11:37

2 respostas

10

Diferentes módulos se comportam de maneira diferente quando você fornece a mesma opção várias vezes. Eu sei que você pode dizer console= várias vezes, e você recebe vários consoles (nós o usamos para máquinas com consoles principais em seus framebuffers e porta serial).

No entanto, você só pode ter uma partição raiz, então root= quase certamente substitui o valor anterior visto, quase certamente da esquerda para a direita. Isso é corroborado pela origem do kernel, em init/do_mounts.c , a função root_dev_setup() é responsável por atuar na opção root= e tudo o que faz é armazenar a chave de parâmetro em uma variável. O bootparam root=31:0 é substituído por root=/dev/mtdblock2 , ou pelo menos esse é o caso na árvore de código 2.6.25 que acabei de verificar.

A propósito, se você é competente em C, a função name_to_dev_t() no mesmo arquivo é responsável por analisar o valor de root= , e é muito esclarecedor!

A notação x:y é o Unixism padrão para major: minor, que é o modo como os Unices identificam os dispositivos. Tradicionalmente, major era um número de 8 bits identificando o driver para o hardware, e menor era um número de 8 bits identificando o próprio dispositivo. Existem dois namespaces para os números major : dispositivos de caractere e dispositivos de bloco. Você pode ver ambos digitando cat /proc/devices e você pode ver o que está ativo no momento dizendo ls -la /dev . Aqui está um exemplo:

ls -la /dev/zero /dev/sda
brw-rw---- 1 root disk 8, 0 Jan 12 22:01 /dev/sda
crw-rw-rw- 1 root root 1, 5 Jan 12 22:01 /dev/zero

A primeira coluna identifica o tipo de driver ( b para bloco, c para caractere). As duas colunas à esquerda de Jan são os números principal e secundário no formato major, minor .

Você pode dar root= de qualquer dispositivo de bloco independente de seu nome usando a notação major: minor.

A lista completa de números de dispositivos está em sua árvore de origem do kernel, em Documentation/devices.txt . 31: 0 parece se referir a / dev / rom0, o primeiro cartão ROM no sistema.

    
por 13.01.2012 / 11:59
0

Use rótulos ( root=LABEL=... ) para montar o sistema de arquivos com um rótulo em vez de um nome de dispositivo.

link

    
por 13.03.2012 / 16:15