将uboot2010.03移植到mini2440上,选择LCD作为输出设备,串口作为输入设备。LCD分辨率240*320。在lcd的命令行界面出现了一个问题:当命令长度超过一行转到下一行时,输入回车,执行结果会将命令本身的最后一行覆盖。比如:命令本身一共2行,则执行后第2行,被覆盖;命令本身3行,则前2行没问题,第3行被覆盖。这个问题困扰了很久,但是今天终于找到原因了。
首先分析一下管理命令行界面的部分。uboot进入命令行界面的过程为:reset->start_armboot->main_loop->readline。界面的交互处理就是在readline()函数中实现的。然后readline函数本身很简单,就是调用readlinr_into_buffer(),在readlinr_into_buffer()中有一段处理特殊字符的代码:
c = getc();
/*
* Special character handling
*/
switch (c) {
case '\r': /* Enter */
case '\n':
*p = '\0';
puts ("\r\n");
return (p - p_buf);
case '\0': /* nul */
continue;
case 0x03: /* ^C - break */
p_buf[0] = '\0'; /* discard input */
return (-1);
case 0x15: /* ^U - erase line */
while (col > plen) {
puts (erase_seq);
--col;
}
p = p_buf;
n = 0;
continue;
case 0x17: /* ^W - erase word */