在uboot中,需要很多的环境变量,比如内核的启动参数、网络IP地址、启动设备块选择、延时设置等,当有些变量较长,串口输入时,超过一定长度时就会以“O”出现,“O”是黑色的实心圈,当你save以后再printenv后,你会发现你想保存的环境变量只有一部分、不全,没有达到效果,那怎么解决长度达的环境变量呢?笔者通过实践提供如下两种解决办法:
<一> 改变串口接收BUFFER的大小。如果你有uboot的源代码,编译比较方便的话,这种方法是彻底方便的。在common/main.c文件中,有一个宏叫MAX_CMDBUF_SIZE,也就是串口接收buffer的大小,在uboot工程中,默认的大小为256,将此宏的值改大即可,比如调整成1024,这样就能扩大通过串口输入环境变量的长度。
<二>使用中间变量。如果没有uboot工程源码,又必须保存一个超长的环境变量的话,那就可以通过中间变量来完成。比如有一个环境变量的为BOOTARGS=ABCDEFGHIJKLMNOPQRSTUVWXYZ,但是一次又无法保存这么长的变量,我们就可以把BOOTARGS分成两截、或者多截来完成。先设置中间变量TMP=OPQRSTUVWXYZ,再在串口中输入setenv BOOTARGS BCDEFGHIJKLMN$TMP,这样保存以后,BOOTARGS的环境变量就会拼结起来形成完整的变量。