【问题标题】:No input in U-Boot command lineU-Boot 命令行中没有输入
【发布时间】:2018-05-20 18:21:03
【问题描述】:

看起来要么我迷失了如何用谷歌搜索答案的技能,要么错过了配置中太明显的选项。无论如何,我有一个适用于 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

只有串口,无法切换。

【问题讨论】:

    标签: x86 serial-port device-driver u-boot


    【解决方案1】:

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

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

    • stderr=serial
    • stdin=serial
    • stdout=serial

    请检查它们的值。

    【讨论】:

    • 感谢您的回答,尽管在这种情况下没有帮助。是的,std* 设备是正确的。没有使用 SW 流控制,请仔细阅读我在 in U-Boot 中放置调试打印的部分。当我可以访问我的实验室环境时,也许我会在稍后的问题中添加调试输出的示例。
    • 如果你好奇,我发现了真正的问题,我自己推送了答案。无论如何,感谢您的尝试。
    【解决方案2】:

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

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

    由于 LSR 的地址为 0x3fd(偏移量 5),serial_in() 返回 0xFF,因此假设数据可用跳过从此处返回,而读取 RBR 时重复返回 0x00

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-10
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多