Arranque silencioso de Linux desde u-boot

Por razones de security, tengo que arrancar Linux desde u-boot con todos los resultados ocultos (silenciosamente) hasta que se ingrese una contraseña. Configuré uBoot para hacer esto correctamente usando la macro CONFIG_AUTOBOOT_KEYED y puedo iniciar satisfactoriamente silenciosamente.

El problema que estoy teniendo es que cuando uBoot inicia el kernel de Linux y el modo silencioso está habilitado, pasa console= como parte de los bootargs al kernel de Linux. Esto está bien para el arranque silencioso, pero parece que no puedo encontrar una manera de volver a habilitar la console nuevamente después del arranque.

También intenté arrancar normalmente y anexar loglevel=0 a los bootargs de kernel que funcionan para el arranque silencioso, pero nuevamente no puedo volver a habilitar la console. He intentado:

 dmesg -n 4 

y

 klogd -c 4 

para tratar de establecer el nivel de logging Kernel nuevamente en KERN_WARNING (4) sin suerte. Estos commands funcionan correctamente cuando reinicio el Kernel normalmente.

La mejor guía que he encontrado al respecto es Silenciando el process de arranque en blackfin.uclinux.org.

Idealmente me gustaría usar el modo silencioso de uBoot donde pasa console= como parte de los bootargs pero aún así tomar input en la console y volver a habilitar la salida cuando se ingresa la contraseña, pero estoy abierto a otras ideas si alguien puede ayudarme a guiar Yo lo agradecería muchísimo.

Si alguien más se encuentra con este problema, nunca encontré una buena solución. Terminé pirateando u-boot y el controller serie del kernel de Linux y básicamente comprobando si se había ingresado la contraseña. Si lo hubiera hecho, permití que el código se ejecutara normalmente. De lo contrario, acabo de regresar de las funciones para que no haya nada impreso en la console.

Para Kernel, edité la function receive_chars () para search la contraseña (input) y transmit_chars () para enmascarar la salida. Hice que u-boot pasara la contraseña como parte de los bootargs. Si era nulo, entonces la contraseña ya estaba ingresada e ignoramos el código especial. Si era un valor, tomamos los caracteres de input a través de receive_chars () y los comparamos con la cadena almacenada de bootargs.

En u-boot, acabo de utilizar CONFIG_AUTOBOOT_KEYED y las macros pnetworkingeterminadas asociadas para la input de la contraseña. Luego cambié common / cmd_bootm.c para no llamar a fixup_silent_linux () para enmascarar console = value y dejar que el kernel se ocupe de él como se indicó anteriormente.

Espero que esto ayude a alguien más.