linux 自定义组合按键进入uboot 命令行模式

您所在的位置:网站首页 linux进命令行界面快捷键 linux 自定义组合按键进入uboot 命令行模式

linux 自定义组合按键进入uboot 命令行模式

2024-06-28 19:09| 来源: 网络整理| 查看: 265

    uboot源代码中是只要串口中输入任意的字符uboot就进入命令模式。在嵌入式设备中,这是个不太稳定的方式。嵌入式设备一般使用的环境比较复杂,所受的干扰了比较大,系统启动的时候串口易受到干扰而导致误触发输入字符,这样设备就进入了uboot的命令行模式,最终导致系统不能自动启动。为了降低这种干扰,软件端可以设置uboot组合按键进入uboot,这样误触发的概率就降低了。

    如果要设置组合按键,需要修改的是/common/main.c 文件。函数原型如下:

abortboot 源函数 static __inline__ int abortboot(int bootdelay) { int abort = 0; #ifdef CONFIG_MENUPROMPT printf(CONFIG_MENUPROMPT); #else printf("Hit any key to stop autoboot: %2d ", bootdelay); #endif #if defined CONFIG_ZERO_BOOTDELAY_CHECK /* * Check if key already pressed * Don't check if bootdelay < 0 */ if (bootdelay >= 0) { if (tstc()) { /* we got a key press */ (void) getc(); /* consume input */ puts ("\b\b\b 0"); abort = 1; /* don't auto boot */ } } #endif while ((bootdelay > 0) && (!abort)) { int i; --bootdelay; /* delay 100 * 10ms */ for (i=0; !abort && i= 0) { if (tstc()) { /* we got a key press */ (void) getc(); /* consume input */ puts ("\b\b\b 0"); abort = 1; /* don't auto boot */ } } #endif #endif while ((bootdelay > 0) && (!abort)) { int i; --bootdelay; #if 0 /* delay 100 * 10ms */ for (i=0; !abort && iflags &= ~GD_FLG_SILENT; #endif return abort; }

    我使用#if 0 来区分源码和修改后的代码。这里需要注意下面这几行代码:

if(0x03 == getc()){ abort = 1; /* don't auto boot */ bootdelay = 0; /* no more delay */ # ifdef CONFIG_MENUKEY menukey = getc(); # else (void) getc(); /* consume input */ # endif break; } }

    CTRL+C的ASCII控制符是03,所以直接用了if(0x03 == getc())来判断是否有输入CTRL+C 组合按键。下面是部分ASCII控制码对照表,可以根据自己的需求设置不同的组合按键。

ASCII控制对照表 十进制十六进制控制字符转义字符说明Ctrl + 下列字母000NUL\0Null character(空字符)@101SOHStart of Header(标题开始)A202STXStart of Text(正文开始)B303ETXEnd of Text(正文结束)C404EOTEnd of Transmission(传输结束)D505ENQEnquiry(请求)E606ACKAcknowledgment(收到通知/响应)F707BEL\aBell(响铃)G808BS\bBackspace(退格)H909HT\tHorizontal Tab(水平制表符)I100ALF\nLine feed(换行键)J110BVT\vVertical Tab(垂直制表符)K120CFF\fForm feed(换页键)L130DCR\rCarriage return(回车键)M140ESOShift Out(不用切换)N150FSIShift In(启用切换)O1610DLEData Link Escape(数据链路转义)P1711DC1Device Control 1(设备控制1) /XON(Transmit On)Q1812DC2Device Control 2(设备控制2)R1913DC3Device Control 3(设备控制3) /XOFF(Transmit Off)S2014DC4Device Control 4(设备控制4)T2115NAKNegative Acknowledgement(拒绝接收/无响应)U2216SYNSynchronous Idle(同步空闲)V2317ETBEnd of Trans the Block(传输块结束)W2418CANCancel(取消)X2519EMEnd of Medium(已到介质末端/介质存储已满)Y261ASUBSubstitute(替补/替换)Z271BESC\eEscape(溢出/逃离/取消)[281CFSFile Separator(文件分割符)\291DGSGroup Separator(分组符)]301ERSRecord Separator(记录分隔符)^311FUSUnit Separator(单元分隔符)_3220SPWhite space[Space]1277FDELDelete(删除)?

 ===============================2022.08.28===============================

博客附件资料下载及博客内容更新,可以通过下面博客获取

《li_wen01嵌入式开发相关博客更新目录及资料下载说明》  

liwen01 2022.08.28 日更新 

===============================2022.08.28===============================

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3