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
(它有 Enter、Enter 和 printenv
+ 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
重复。
解决方案是修复硬件,或为其制作自定义串行驱动程序。
看来我可能忘记了如何 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
(它有 Enter、Enter 和 printenv
+ 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
重复。
解决方案是修复硬件,或为其制作自定义串行驱动程序。