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.