Inicialização silenciosa do Linux a partir do u-boot

5

Por razões de segurança, eu tenho que inicializar o Linux a partir do u-boot com toda a saída oculta (silenciosamente) até que uma senha seja digitada. Eu configurei o uBoot para fazer isso corretamente usando a macro CONFIG_AUTOBOOT_KEYED e posso inicializar silenciosamente com sucesso.

O problema que estou tendo é que quando o uBoot inicializa o kernel Linux e o modo silencioso está ativado, ele passa console= como parte do bootargs para o kernel do Linux. Isso é bom para inicialização silenciosa, mas não consigo encontrar uma maneira de reativar o console novamente após a inicialização.

Eu também tentei inicializar normalmente e anexar loglevel=0 ao kernal bootargs que funciona para inicialização silenciosa, mas novamente não consigo reativar o console. Eu tentei:

dmesg -n 4

e

klogd -c 4

para tentar definir o nível de log do Kernel de volta para KERN_WARNING (4) sem sorte. Esses comandos funcionam corretamente quando eu inicializo o Kernel normalmente.

O melhor guia que encontrei sobre o assunto é Silenciando o processo de inicialização no blackfin .uclinux.org.

Idealmente, gostaria de usar o modo silencioso do uBoot, onde ele passa console= como parte dos bootargs, mas ainda recebe entrada no console e reativa a saída quando a senha é digitada, mas estou aberto a outras ideias. qualquer um pode me guiar, eu agradeceria muito.

    
por sbtkd85 21.07.2011 / 16:29

1 resposta

1

Se alguém se deparar com esta questão, nunca encontrei uma boa correcção. Eu acabei hackeando tanto o u-boot quanto o driver serial do kernel do linux e basicamente checando se a senha tinha sido digitada. Se tivesse, eu permiti que o código funcionasse normalmente. Se não tivesse acabado de voltar das funções para que nada fosse realmente impresso no console.

Para o Kernel, editei a função receive_chars () para procurar a senha (entrada) e transmit_chars () para mascarar a saída. Eu tinha u-boot passar a senha como parte dos bootargs. Se fosse nulo, a senha já estava inserida e ignoramos o código especial. Se fosse um valor, então pegamos chars de entrada via receive_chars () e os comparamos com a string armazenada de bootargs.

No u-boot eu usei apenas o CONFIG_AUTOBOOT_KEYED e as macros padrão associadas para a entrada da senha. Eu então mudei o common / cmd_bootm.c para não chamar fixup_silent_linux () para mascarar o valor do console = e deixar o kernel lidar com isso como declarado acima.

Espero que isso ajude alguém.

    
por 05.08.2011 / 20:02

Tags