Piter Punk's Articles - bootparam
Passando parâmetros no boot
A situação não é de todo incomum, você tem um notebook e, quando leva-o de casa para o trabalho (ou vice-versa) têm que reconfigurar toda a rede a cada boot. Não seria mais interessante poder indicar ao Linux em qual rede você está e deixá-lo configurar de acordo com o informado?
O caso do notebook mencionado acima é bastante interessante. Aqueles que usam a porta paralela às vezes para a impressora e outras vezes para PLIP também gostariam de poder indicar isso no boot. E devem existir vários outros usos...
A idéia deste artigo é possibilitar que você coloque parâmetros personalizados no prompt do LILO. E lê-los quando seu sistema estiver sendo inicializado.
2 Onde procurar...
A primeira questão é... onde procurar os parâmetros que você passou no LILO? A primeira opção é simplesmente digitar:
Isso funciona. Mas não é muito elegante. Vamos supor você fique carregando e descarregando módulos, ou recebendo muitas mensagens de debug de algum dispositivo... não sei se você sabe, mas o texto mostrado pelo dmesg tem tamanho fixo, a partir de uma certa quantidade de mensagens ele começa a apagar as primeiras linhas para dar espaço às mais novas.
Para garantir que sua variável personalizada possa ser lida no boot e, talvez, ser relida mais tarde, precisamos achar outro local para pegar a command line. Nossa próxima parada é no diretório /proc, onde estão várias informações sobre o sistema. Listando os arquivos do diretório, encontramos um com o sugestivo nome de cmdline. Na minha máquina, ele está com o seguinte conteúdo:
root@rachael:/proc# cat cmdline
auto BOOT_IMAGE=Linux ro root=301 pci=biosirq ide0=dma
Bingo! Era isso que procurávamos!!
3 Separando alhos de bugalhos
Já temos a linha que queríamos, agora só é necessário separarmos os argumentos e selecionar o que nos interessa. Uma boa maneira, é primeiro separar todos os argumentos, colocando um por linha. Isso pode ser feito (sem traumas) com o comando tr. Com ele, iremos trocar os espaços em branco pelo sinal de pular linha. Faça assim:
root@rachael:/proc# cat cmdline | tr " " "\n"
root=301
ide0=dma
Com apenas um argumento por linha, torna-se muito fácil separar aquele que nos interessa. Vamos supor que eu queira a linha onde está "pci=biosirq", basta acrescentar no fim da minha linha de comando um | grep "pci=" e aguardar o resultado:
root@rachael:/proc# cat cmdline | tr " " "\n" | grep "pci="
Por último, se quiser apenas o que vier depois do =, acrescento | cut -f 2 -d "=", como no exemplo abaixo:
root@rachael:/proc# cat cmdline | tr " " "\n" |grep "pci=" \
| cut -f 2 -d "="
Agora sabemos exatamente como ler o parâmetro que passamos. A nossa grande dúvida agora é... o que fazer com ele?
Se você possui algum conhecimento dos arquivos de inicialização da sua máquina (geralmente estão sob o diretório /etc/rc.d), você pode adaptá-los para incluir as alterações que mostraremos abaixo. Caso contrário, é melhor colocá-las no /etc/rc.d/rc.local.
Depois de criado o seu parâmetro e de haver lido o seu conteúdo, falta apenas colocar as ações a serem realizadas. Utilize um script semelhante ao exemplo abaixo:
PARAMETRO=`cat /proc/cmdline | tr " " "\n" | grep "parametro=" | cut -f 2 -d "="`
if [ "$PARAMETRO" = "conteúdo1" ]; then
várias ações para o seu parâmetro
outras ações, pode ser um segundo teste
No caso do notebook imaginário do nosso resuminho, o parâmetro poderia ser algo como where e o conteúdo poderia ser casa ou trabalho. No fim do artigo tem um exemplo usando meu caso com o PLIP e impressora.
Capturar as informações entregues no prompt do LILO é muito simples. Qualquer um com um pouco de conhecimento da inicialização do seu sistema, pode fazer algumas adaptações interessantes de acordo com a sua necessidade. Dúvidas, sugestões e críticas para piterpk@terra.com.br