O kernel do Linux aceita certas 'opções de linha de
comandos' ou 'parâmetros de inicialização' no momento
em que é iniciado. Em geral, isso é usado para suprir o kernel
com informação a respeito do 'hardware' que o mesmo pode
não estar apto para determinar por si só, ou para
prevenir/ignorar os valores que o kernel possa ter detectado de outra
maneira.
When the kernel is booted directly by the BIOS, you have no
opportunity to specify any parameters. So, in order to take advantage of
this possibility you have to use a boot loader that is able to pass
parameters, such as GRUB.
The kernel command line is parsed into a list of strings (boot
arguments) separated by spaces. Most of the boot arguments have the
form:
name[=value_1][,value_2]...[,value_10]
where 'name' is a unique keyword that is used to identify what
part of the kernel the associated values (if any) are to be given to. Note
the limit of 10 is real, as the present code handles only 10 comma separated
parameters per keyword. (However, you can reuse the same keyword with up to
an additional 10 parameters in unusually complicated situations, assuming
the setup function supports it.)
Most of the sorting is coded in the kernel source file
init/main.c. First, the kernel checks to see if the argument is any
of the special arguments 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw',
'debug', or 'init'. The meaning of these special arguments is described
below.
Então ele caminha por uma lista de funções de
configuração para verificar se a entrada de argumento
especificada (como 'foo') está associada com uma uma
função de setup ('foo_setup()') para um dispositivo em
particular ou parte do kernel. Se você passou ao kernel a linha
foo=3,4,5,6, então o kernel procurará no vetor de
inicialização, para verificar se 'foo' estava registrado. Se
estiver, então ele chamará a função associada a
'foo' (foo_setup()) e manipulará os argumentos 3, 4, 5 e 6 como
passados na linha comandos do kernel.
Qualquer coisa da forma 'foo=bar' que não for aceita como
função de setup como descrito acima, é então
interpretado como uma variável de ambiente a ser configurada. Um
exemplo (inútil?) seria usar 'TERM=vt100' como argumento de
inicialização.
Any remaining arguments that were not picked up by the kernel and
were not interpreted as environment variables are then passed onto PID 1,
which is usually the init(1) program. The most common argument that
is passed to the init process is the word 'single' which instructs it
to boot the computer in single user mode, and not launch all the usual
daemons. Check the manual page for the version of init(1) installed
on your system to see what arguments it accepts.
- 'init=...'
- Configura o comando inicial a ser executado pelo kernel. Se não
estiver presente, ou não puser ser encontrado, o kernel
tentará /sbin/init, então /etc/init,
então /sbin/init, então /bin/sh e entrar em
pânico se tudo isso falhar.
- 'nfsaddrs=...'
- Configura o endereço NFS de inicialização para
entrada dada. Esse endereço de inicialização é
usado no caso de inicialização por rede.
- 'nfsroot=...'
- Configura o nome da raiz do NFS para a cadeia de caracteres dada. Se esta
não começa com '/' ou ',' ou um dígito, então
será prefixada por '/tftpboot/'. Este nome da raiz é usado
em caso de inicialização por rede.
- 'root=...'
- Este argumento diz ao kernel que dispositivo será utilizado como
sistema de arquivos raiz durante a carga. O padrão dessa
configuração é determinado em tempo de
compilação e usualmente é o valor do dispositivo raiz
onde o kernel foi construído. Para ignorar esse valor e selecionar
o segundo controlador de disquete como dispositivo raiz, pode-se usar
'root=/dev/fd1'.
- The root device can be specified symbolically or numerically. A symbolic
specification has the form /dev/XXYN, where XX designates the
device type (e.g., 'hd' for ST-506 compatible hard disk, with Y in
'a'–'d'; 'sd' for SCSI compatible disk, with Y in 'a'–'e'),
Y the driver letter or number, and N the number (in decimal) of the
partition on this device.
- Note que isto nada tem a ver com a designação desses
dispositvos em seu sistema de arquivos. A parte '/dev' é puramente
convencional.
- A especificação numérica mais incômoda e menos
portável dos dispositivos raiz possíveis acima no formato
principal/secundário também é aceita. (por exemplo,
/dev/sda3 é principal 8 e secundário 3, então
você pode usar 'root=0x803' como uma alternativa.)
- 'rootdelay='
- This parameter sets the delay (in seconds) to pause before attempting to
mount the root filesystem.
- 'rootflags=...'
- This parameter sets the mount option string for the root filesystem (see
also fstab(5)).
- 'rootfstype=...'
- The 'rootfstype' option tells the kernel to mount the root filesystem as
if it where of the type specified. This can be useful (for example) to
mount an ext3 filesystem as ext2 and then remove the journal in the root
filesystem, in fact reverting its format from ext3 to ext2 without the
need to boot the box from alternate media.
- 'ro' e 'rw'
- A opção 'ro' diz ao kernel para montar o sistema de arquivos
raiz como 'somente leitura', para que programas de
verificação de consistência de sistemas de arquivos
(fsck) possam fazer seu trabalho em um sistema de arquivos imóvel.
Nenhum processo pode escrever nos arquivos do sistema em questão,
até que o mesmo seja 'remontado' com capacidade de 'leitura/escrita
(read/write), por exemplo, por 'mount -w -n -o remount /'. (Veja
também mount(8).)
- A opção 'rw' diz ao kernel para montar o sistema raiz como
'escrita/leitura'. Este é o padrão.
- 'resume=...'
- This tells the kernel the location of the suspend-to-disk data that you
want the machine to resume from after hibernation. Usually, it is the same
as your swap partition or file. Example:
-
resume=/dev/hda2
- 'reserve=...'
- Esta é usada para proteger regiões de portas de E/S de
sondagens. A forma do comando é:
-
reserve=iobase,extent[,iobase,extent]...
- Em algumas máquinas, pode ser necessário evitar que os
controladores de dispositivo procurem os mesmos em regiões
específicas (auto-probing). Isto pode ocorrer por causa de
'hardware' que reage mal à detecção, ou 'hardware'
que é erroneamente identificado ou meramente o 'hardware' que
você não quer que o kernel inicialize.
- O argumento da linha de inicialização 'reserve' especifica
uma região de portas E/S que não devem ser sondadas. Um
controlador de dispositivo não irá sondar uma região
reservada, a não ser que outro argumento de
inicialização explicitamente espefique para
fazê-lo.
- Por exemplo, a linha de inicialização
-
reserve=0x300,32 blah=0x300
- previne todos os controladores de dispositivo, exceto o controlador 'blah'
da sondagem de 0x300-0x31f.
- 'panic=N'
- Por padrão, o kernel não reinicializará após
um pânico, mas esta opção causará a
reinicialização do kernel, após N segundos (se N >
0). Estee timeout de pânico pode ser configurado por
-
echo N > /proc/sys/kernel/panic
- 'reboot=[warm|cold][,[bios|hard]]'
- Desde o Linux 2.0.22 a reinicialização é por
padrão uma reinicialização fria (cold reboot).
Alguém pergunta pelo antigo padrão 'reboot=warm'. (Um 'cold
reboot' pode ser necessário para resetar certos 'hardwares', mas
pode destruir qualquer dado em 'cache' de disco que não tenha sido
escrito. Uma reinicialização quente (warm boot) pode ser
mais rápida). Por padrão, uma reinicialização
é difícil, requisitando-se que o controlador do teclado para
pulsar o fluxo da linha de reset baixa, mas há ao menos um tipo de
placa-mãe que não funcionará. A opção
'reboot=bios', ao contrário, passará através do
'BIOS'.
- 'nosmp' e 'maxcpus=N'
- (Somente quando __SMP__ estiver definido.) Uma opção de
linha de comando de 'nosmp' ou 'maxcpus=0' irá desabilitar
completamente a ativação do SMP (multi processamento
simétrico); a opção 'maxcpus=N' limita o
número máximo de CPUs ativadas no modo SMP em N.
- 'debug'
- Kernel messages are handed off to a daemon (e.g., klogd(8) or
similar) so that they may be logged to disk. Messages with a priority
above console_loglevel are also printed on the console. (For a
discussion of log levels, see syslog(2).) By default,
console_loglevel is set to log messages at levels higher than
KERN_DEBUG. This boot argument will cause the kernel to also print
messages logged at level KERN_DEBUG. The console loglevel can also
be set on a booted system via the /proc/sys/kernel/printk file
(described in syslog(2)), the syslog(2)
SYSLOG_ACTION_CONSOLE_LEVEL operation, or dmesg(8).
- 'profile=N'
- É possível habilitar uma função de profiling
no kernel, se alguém desejar ver onde o kernel está gastando
seus ciclos de CPU. O profiling pode ser habilitado configurando a
variável prof_shift para um valor que não zero. Isto
pode ser feito tanto especificando-se CONFIG_PROFILE durante a
compilação, ou dando-se a opção 'profile='.
Agora o valor de prof_shift será N, quando dado, ou
CONFIG_PROFILE_SHIFT, quando este é dado, ou 2, o
padrão. A significância dessa varaiável é que
a mesma dá a granularidade do profiling: a cada pulso do clock, se
o sistema estiever executando o kernel, um contador é
incrementado:
-
profile[address >> prof_shift]++;
- A informação bruta de profiling pode ser lida em
/proc/profile. Provavelmente, você irá deseja usar
uma ferramenta como readprofile.c para ordená-la. Escrever em
/proc/profiles limpará os contadores.
(Apenas se o kernel foi compilado com CONFIG_BLK_DEV_RAM.)
Em geral é uma má idéia usar um disco de RAM (ramdisk)
no Linux—o sistema usará a memória disponível de
forma mais eficiente sozinho. Mas durante a inicialização
é frequentemente útil carregar o conteúdo do disquete
em um disco de RAM. Alguém pode ter um sistema no qual seja
necessário que alguns módulos sejam carregados (para sistemas
de arquivos ou 'hardware') antes que o disco principal possa ser
acessado.
- In Linux 1.3.48, ramdisk handling was changed drastically. Earlier, the
memory was allocated statically, and there was a 'ramdisk=N' parameter to
tell its size. (This could also be set in the kernel image at compile
time.) These days ram disks use the buffer cache, and grow dynamically.
For a lot of information on the current ramdisk setup, see the kernel
source file Documentation/blockdev/ramdisk.txt
(Documentation/ramdisk.txt in older kernels).
- Existem quatro parâmetros, dois booleanos e dois inteiros.
- 'load_ramdisk=N'
- Se N=1, carrega um ramdisk. Se N=0, Não carrega um ramdisk (Este
é o padrão.)
- 'prompt_ramdisk=N'
- Se N=1, pede a inserção do disquete (Este é o
padrão). Se N=0, não pede a inserção do
disquete (assim, esse parâmetro nunca é
necessário).
- 'ramdisk_size=N' ou (obsoleto) 'ramdisk=N'
- Configura o tamanho máximo do(s) ramdisk(s) para N kB. O
padrão é 4096 (4 MB).
- 'ramdisk_start=N'
- Configura o número do bloco inicial (a simetria no disquete onde o
ramdisk começa) para N. Isso é necessário no caso de
o ramdisk seguir uma imagem do kernel.
- 'noinitrd'
- (Somente se o kernel foi compilado com CONFIG_BLK_DEV_RAM e
CONFIG_BLK_DEV_INITRD.) Atualmente é possível
compilar o kernel para usar initrd. Quando esta característica
está habilitada, o processo de inicialização
carregará o kernel e um ramdisk inicial; então, o kernel
converte initrd em um ramdisk 'normal' que é montado em
leitura/escrita como dispositivo raiz; então, /linuxrc
é executado; depois, o sistema de arquivos raiz 'real' é
montado e o sistema de arquivos initrd é movido para /initrd;
finalmente, a sequência de inicialização usual
é executada (por exemplo, chamada de /sbin/init.
- For a detailed description of the initrd feature, see the kernel source
file Documentation/admin-guide/initrd.rst (or
Documentation/initrd.txt before Linux 4.10).
- The 'noinitrd' option tells the kernel that although it was compiled for
operation with initrd, it should not go through the above steps, but leave
the initrd data under /dev/initrd. (This device can be used only
once: the data is freed as soon as the last process that used it has
closed /dev/initrd.)
Notação geral para esta seção:
iobase -- a primeira porta de E/S que a controladora SCSI
ocupa. São especificados em notação hexadecimal e
usualmente encontram-se na área de 0x200 a 0x3ff.
irq -- a interrupção de 'hardware' em que a
placa está configurada para usar. Valores válidos
dependerão da placa em questão, mas serão usualmente 5,
7, 9, 10, 11, 12 e 15. Os outros valores são normalmente utilizados
por periféricos comuns, como discos rígidos IDE, controladores
de disquete, portas seriais, e assim por diante.
scsi-id -- a identidade que a adaptadora usa para se
autoidentificar no bus SCSI. Algumas poucas adaptadoras permitem que
você modifique este valor, mas a maioria tem permanentemente
especificado internamente. O padrão usual é 7, mas as placas
Seagate e Domain TMC-950 usam 6.
parity -- se a controladora SCSI deve esperar os
dispositivos conectados para fornecer um valor de paridade com toda troca de
informação. Especificando um 'um', indica que a checagem de
paridade está habilitada e um 'zero' desabilita a checagem de
paridade. Novamente, nem todas as adaptadoras suportam a
seleção de paridade como um argumento de
inicialização.
- 'max_scsi_luns=...'
- Um dispositivo SCSI deve possuir um número de 'subdispositivos'
contidos em si. O exemplo mais comum é um desses novos CD-ROMS SCSI
que podem manipular mais de um disco por vez. Cada CD está
endereçado como um 'Número de Unidade Lógica'
(Logical Unit Number -- LUN) daquele dispositivo em particular. Mas a
maioria dos dispositivos, como discos rígidos, controladores de
fita e outros são apenas um dispositivo e serão designado
por LUN zero.
- Alguns dispositivos SCSI pobremente projetados não suportam ser
testados para LUNs não iguais a zero. Por isso, se a flag de
compilação CONFIG_SCSI_MULTI_LUN não estiver
configurada, os novos kernels irão, por padrão, testar
apenas LUN zero.
- Para especificar o número de LUNs provados durante a
inicialização, pode-se entrar 'max_scsi_luns=n' como um
argumento de inicialização, onde 'n' é um
número entre um e oito. Para evitar os problemas descritos acima,
pode-se usar n=1 para evitar transtornos bem como dispositivos
quebrados.
- Configuração
de Controladores de Fita SCSI
- Algumas configurações de inicialização do
controlador de fita SCSI pode ser alcançadas usando-se o
seguinte:
-
st=buf_size[,write_threshold[,max_bufs]]
- Os dois primeiros números são especificados em unidades de
kB. O buf_size padrão é 32 kB e o tamanho
máximo que pode ser especificado são ridículos
16384 kB. O write_treshold é o valor no qual o
'buffer' é enviado à fita, com valor padrão de
30 kB. O número máximo de 'buffers' varia com o
número de controladores detectados e possui o padrão de
dois. Um exemplo de uso seria:
-
st=32,30,2
- Full details can be found in the file Documentation/scsi/st.txt (or
drivers/scsi/README.st for older kernels) in the Linux kernel
source.
- Parâmetros do
controlador de disco/CDROM IDE
- O controlador IDE aceita vários parâmetros, que variam de
especificações da geometria do disco para suporte de chips
de controladoras quebrados. Opções específicas do
controlador são especificadas usando-se 'hdX' com 'X' entre
'a'–'h'.
- Outras opções não específicas do controlador,
são especificadas com o prefixo 'hd='. Note que usando um prefixo
específico de controlador para uma opção não
específica de controlador continuará funcionando e a
opção será aplicada como esperado.
- Also note that 'hd=' can be used to refer to the next unspecified drive in
the (a, ..., h) sequence. For the following discussions, the 'hd=' option
will be cited for brevity. See the file Documentation/ide/ide.txt
(or Documentation/ide.txt in older kernels, or
drivers/block/README.ide in ancient kernels) in the Linux kernel
source for more details.
- The
'hd=cyls,heads,sects[,wpcom[,irq]]' options
- Essas opções são usadas para especificar a geometria
física do disco. Apenas os três primeiros valores são
requeridos. Os valores de cilindros/cabeças/setores serão
aqueles utilizados pelo fdisk. O valor de pre-compensação de
escrita é ignorado nos discos IDE. O valor do IRQ especificado
será o IRQ utilizado pela interface na qual o controlador reside e
não um parâmetro específico do controlador.
- A opção
'hd=serialize'
- O chip de interface dual IDE CMD-640 é quebrado em seu
próprio projeto, pois quando os controladores da interface
secundária são usados ao mesmo tempo que os controladores da
interface primária, isto corromperá seus dados. Usando esta
opção, diz-se ao controlador para assegurar-se que as
interfaces nunca serão usadas ao mesmo tempo.
- A opção
'hd=noprobe'
- Não há verificação do controlador
especificado. Por exemplo:
-
hdb=noprobe hdb=1166,7,17
- desabilitará a verificação, mas continuará
especificando a geometria do controlador, para que possa ser registrado
como um bloco de dispositivo válido e, conseqüentemente,
utilizável.
- A opção
'hd=nowerr'
- Alguns controladores aparentemente tem o WRERR_STAT um tanto
imobilizado. Essa opção habilita um paliativo para esses
dispositivos quebrados.
- A opção
'hd=cdrom'
- Isso diz ao controlador IDE que há um CD-ROM compatível com
ATAPI conectado no lugar de um disco rígido IDE normal. Em muitos
casos, o CD-ROM é identificado automaticamente, mas se não
for, esta opção pode ajudar.
- Opções do
controlador de disco padrão ST-506 ('hd=')
- O controlador de disco padrão aceita argumentos de geometria de
discos similares ao controlador IDE. Note, contudo, que ele só
espera três valores (C/H/S); algum mais ou algum menos e o
controlador irá ignorar-te silenciosamente. Além disso,
só aceita 'hd=' como argumento, quer dizer 'hda=' e outros
não são válidos aqui. O formato é o
seguinte:
-
hd=cyls,heads,sects
- Se houver dois discos instalados, o acima é repetido com os
parâmetros da geometria do segundo disco.
Controladores diversos usam argumentos diversos, mas todos eles,
ao menos, se parecem, usando um IRQ, um valor base de porta de E/S e um
nome. Em sua forma mais genérica, se parece com o que segue:
ether=irq,iobase[,param_1[,...param_8]],name
O primeiro argumento não numérico é entendido
como o nome. Os valores de 'param_n' (se aplicáveis) usualmente
têm significados diferentes para cada tipo de placa/controlador.
Valores 'param_n' típicos são usados para especificar coisas
como endereço de memória compartilhada, seleção
de interface, canal de DMA e coisas assim.
O uso mais comum desse parâmetro é forçar a
verificação da existência de uma segunda placa de rede,
pois o padrão é 'procurar' apenas uma. Isso pode ser executado
com um simples:
ether=0,0,eth1
Note que os valores de zero para os valores de IRQ e base de E/S
no exemplo acima, diz ao controlador para executar
autoverificação.
O 'Ethernet-HOWTO' possui extensa documentação
sopbre como usar múltiplas placas e sobre a
implementação específica de 'param_n' de
placas/controladores, onde utilizados. Leitores interessados devem
encaminhar-se a seção daquele documento referente
especificamente à suas placas.
There are many floppy driver options, and they are all listed in
Documentation/blockdev/floppy.txt (or Documentation/floppy.txt
in older kernels, or drivers/block/README.fd for ancient kernels) in
the Linux kernel source. See that file for the details.
The sound driver can also accept boot arguments to override the
compiled-in values. This is not recommended, as it is rather complex. It is
described in the Linux kernel source file
Documentation/sound/oss/README.OSS (drivers/sound/Readme.linux
in older kernel versions). It accepts a boot argument of the form:
sound=device1[,device2[,device3...[,device10]]]
onde cada valor 'deviceN' é um dos seguintes, no formato
'0xTaaaId', e usados como segue:
T - tipo de dispositivo: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401,
6=SB16, 7=SB16-MPU401
aaa - endereço de E/S em hexa.
I - linha de interrupção em hexa (i.e., 10=a, 11=b,
...).
d - canal de DMA.
Como você pode ver, tudo fica bastante complicado, e
é melhor compilar seus próprios valores como recomendado.
Usando um argumento de inicialização 'sound=0'
desabilitará o controlador de som inteiramente.
- 'lp='
-
Sintaxe:
-
lp=0
lp=auto
lp=reset
lp=port[,port...]
- Você pode ordenar ao controlador de impressão que porta usar
e que portas não usar. Em segundo lugar, mas importante é se
você não deseja que o controlador de impressão
reinvidicar todas as portas paralelas disponíveis, assim outros
controladores (por exemplo, PLIP, PPA) pode então
usá-la.
- O formato do argumento é um múltiplo de nomes de porta, Por
exemplo, lp=none,parport0 para usar a primeira porta paralea para lp1, e
desativar lp0. Para desativar o controlador da impresso totalmente, deve
usar lp=0.