X86 U-Boot命令行中没有输入

X86 U-Boot命令行中没有输入,x86,serial-port,device-driver,u-boot,X86,Serial Port,Device Driver,U Boot,看起来要么我失去了搜索答案的技能,要么在配置中错过了太明显的选项。无论如何,我有一个针对x86的U-Boot最新版本,它一直工作到命令提示符,不幸的是我不能键入任何内容 ns16550驱动程序的getc()中添加的调试打印显示输入实际上在那里,尽管屏幕上没有回声,如果我正确键入并按Enter键,也没有实际执行命令 fdtdec_get_config_string: bootcmd fdtdec_get_config_int: bootsecure fdtdec_get_int: bootsecu

看起来要么我失去了搜索答案的技能,要么在配置中错过了太明显的选项。无论如何,我有一个针对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
(它有Enter、Enter和
printenv
+Enter)


只有串行接口,所以我无法切换到其他接口。

U-Boot既不使用Xon/Xoff,也不使用硬件握手。请检查您的终端仿真器中是否禁用了这些功能

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

  • stderr=串行
  • stdin=串行
  • 标准输出=串行

请检查它们的值。

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

if (!(serial_in(&com_port->lsr) & UART_LSR_DR))
    return -EAGAIN;
由于LSR有地址0x3fd(偏移量5),
serial_in()
返回
0xFF
,因此在重复读取RBR返回
0x00
时,会跳过从这里返回的数据


解决方案是要么修复硬件,要么为其定制串行驱动程序。

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