u-boot移植随笔(1):让u-boot shell支持tab、命令历史

前两天一直在想一个问题,u-boot的shell怎么不支持命令自动补齐,命令历史呢?由于受linux的shell影响,只要其它的“shell”有点什么不好的,一试就能感觉出来,所以要设置回那些基本功能。

我搜啊搜,陷入了自己设置给自己的深渊了。下面写一下自己找到的结果——虽然这些努力基本是白费的。
u-boot的shell使用的是HUSH shell,来自busybox的那个HUSH shell。hush.h在./include/里面,hush.c在./common里面,对比busybox那个hush.c发现u-boot的这个少很多(单从文件大小来看,具体没能力研究),应该是减少很多功能了。再去查busybox用了哪些shell,结果有msh shell、ash shell、hush shell,看busybox的配置(make menuconfig命令)时,上面明确说msh已经不再用了,代替为hush shell,但在网上查到的很多都是关于msh,郁闷啊!
我想啊想啊,会不会要我自己实现这些东西呢?那就得研究shell的代码了,这工程可不小。后面又试了vivi的shell,这个shell有我想要的功能。难不成就研究它的代码?
后来google到了u-boot的邮件列表上去了,上面的u-boot版本是1.1.6,跟现在这个差了N年了。不过学习下也无所谓。一不小心,看到一句话:

Yes, it does. You have to enable it in the configuration, though.

一语点醒梦中人!再看提问者的回答:

It’s realy a nice feature for debug. I just tried that for u-boot?1.1.6 and it worked fine. Enable CONFIG_CMDLINE_EDITING.

靠!原来就这么简单!一切都在人家掌握之中!唉,由于自己才疏学浅、孤陋寡闻导致这两天搞得自己走了很多冤枉路。不过,有失必有得,怎么说自己也学到点东西了。
只要在开发板相关的头文件,如smdk2440.h定义下面两个宏,就能实现命令自动补齐、命令历史,一切就搞定了!

1
2
#define CONFIG_CMDLINE_EDITING
#define CONFIG_AUTO_COMPLETE

有时候,学习,就这么简单。

PS:有个时间无聊,学emacs走火入魔了,在敲命令时手贱,按了C-p,有大发现,之后再试C-n、C-a、C-e、C-d,等等,结果大大发现,没想到这些命令也能应用于shell!!!真是太爽了!!对于不想按那些箭头按键的人来讲,这些命令可以一试。

本文随意写写,大家随意看看,不必当真。