U-Boot命令行无输入

No input in U-Boot command line

看来我可能忘记了如何 google 获得答案的技巧,或者在配置中遗漏了太明显的选项。无论如何,我有一个用于 x86 的 U-Boot 最新版本,它可以工作到命令提示符,不幸的是我不能输入任何东西。

向 ns16550 驱动程序的 getc() 添加了调试打印,显示输入确实存在,但屏幕上没有回显,如果我键入命令也没有实际执行正确并按 Enter。

fdtdec_get_config_string: bootcmd
fdtdec_get_config_int: bootsecure
fdtdec_get_int: bootsecure: (not found)
=> getc() d
getc() d
getc() 70
getc() 72
getc() 69
getc() 6e
getc() 74
getc() 65
getc() 6e
getc() 76
getc() d

(它有 EnterEnterprintenv + Enter )

只有串行接口,无法切换

U-Boot 既不使用 Xon/Xoff 也不使用硬件握手。请检查您的终端模拟器是否禁用了这些。

这三个环境变量影响使用哪个控制台:

  • stderr=串行
  • 标准输入=串行
  • stdout=串行

请检查它们的值。

问题出现在损坏的硬件(实际上是模拟),其中未对齐的I/O字节访问不起作用。因此,发生在以下代码之间:

if (!(serial_in(&com_port->lsr) & UART_LSR_DR))
    return -EAGAIN;

由于 LSR 的地址为 0x3fd(偏移量 5),serial_in() returns 0xFF 并因此从这里跳过 return 假设数据可用,同时读取 RBR returns 0x00 重复。

解决方案是修复硬件,或为其制作自定义串行驱动程序。