出于安全原因,我必须从 u-boot 启动 Linux,所有输出都隐藏(静默),直到输入密码。我已将 uBoot 配置为使用CONFIG_AUTOBOOT_KEYED宏正确执行此操作,并且可以成功静默启动。
我遇到的问题是,当 uBoot 引导 Linux 内核并启用静默模式时,它会console=作为引导参数的一部分传递给 Linux 内核。这对于静默启动很好,但我似乎找不到在启动后再次重新启用控制台的方法。
我还尝试正常启动loglevel=0并附加到适用于静默启动的内核引导参数,但我再次无法重新启用控制台。我试过了:
dmesg -n 4
Run Code Online (Sandbox Code Playgroud)
和
klogd -c 4
Run Code Online (Sandbox Code Playgroud)
尝试将内核日志级别设置回 KERN_WARNING (4) 而不走运。当我正常启动内核时,这些命令可以正常工作。
我在这个问题上找到的最好的指南是在 blackfin.uclinux.org 上使启动过程静音。
理想情况下,我想使用 uBoot 的静默模式,它console=作为 bootargs 的一部分传递,但仍然在控制台上输入并在输入密码时重新启用输出。
如果其他人遇到这个问题,我从来没有找到好的解决办法。我最终破解了 u-boot 和 Linux 内核串行驱动程序,并基本上检查是否已输入密码。如果有,我允许代码正常运行。如果没有,我就从函数中返回,这样控制台上实际上就没有打印出任何内容。
对于内核,我编辑了 receive_chars() 函数来查找密码(输入),并编辑了 Transmission_chars() 来屏蔽输出。我让 u-boot 将密码作为 bootargs 的一部分传递。如果它为空,则密码已经输入,我们忽略了特殊代码。如果它是一个值,那么我们通过 receive_chars() 获取输入字符并将它们与 bootargs 中存储的字符串进行比较。
在 u-boot 中,我只使用 CONFIG_AUTOBOOT_KEYED 和相关的默认宏来输入密码。然后,我将 common/cmd_bootm.c 更改为不调用 fixup_silent_linux() 来屏蔽 console= 值,并让内核按上述方式处理它。
希望这对其他人有帮助。
| 归档时间: |
|
| 查看次数: |
4393 次 |
| 最近记录: |