uboot命令概述,uboot环境变量的加载设置与save原理

来源:互联网 发布:淘宝2015年销售额多少 编辑:程序博客网 时间:2024/05/20 07:53

uboot命令概述:

1.uboot的shell界面输入方式是类似于linux命令行的输入方式

既然的命令行那就是行缓冲方式。行缓冲的意思就是当我们向终端命令行输入命令的时候,这些命令没有立即被系统识别,而是被缓冲到一个缓存区(也就是系统认为我们还没有输入完),当我们按下回车键(换行)后系统就认为我们输入完了,然后将缓冲区中所有刚才输入的作为命令拿去分析处理。

 扩展:linux终端设计有3种缓冲机制无缓冲、行缓冲、全缓冲(缓冲区满的时候才会去处理,如果没有满就不会去处理)

注意:这些缓冲的数据不是存放在PC机上,而是存放在S5PV210的RAM中(请看我的博客点击打开链接)

 实现:下面是行缓冲的一个具体C实现

char *gets(char *p)
{
char *p1 = p;
char ch;
// 用户的一次输入是以'\n'为结束标志的,行结束符为'\n'
while ((ch = getchar()) != '\n')
{
// 回显
if (ch != '\b')
{
// 用户输入的不是退格键
putchar(ch); // 回显
*p++ = ch; // 将行缓冲的数据存储在S5PV210的RAM中
}
else
{
// 用户输入的是退格键
// \b只会让secureCRT终端输出指针向后退一格,但是那个要删掉的字符还在
// 删掉的方法就是下面3行
if (p > p1)
{
putchar('\b');
putchar(' ');
putchar('\b');// 3行处理退格键回显
p--; // 退一格,指针指向了要删除的那个格子
*p = '\0'; // 填充'\0'以替换要删除的那个字符
}
}
}
// 遇到'\n'行结束,添加'\0'作为字符串结尾。
*p = '\0';
putchar('\n');
return p1;
}     

2.有些命令有简化的别名(实现同一个功能的操作,命令并不是唯一的)

譬如要想打印环境变量printenv命令可 以,print命令也可以打印环境变量(printenv和print在内部实现的是同一段代码)。

譬如setenv可以简化为set(设置环境变量的)

3.命令的查找通过help 

4.有些命令是一个命令族(譬如movi)

 命令族意思就是好多个命令开头都是用同一个命令关键字的,但是后面的参数不一样,这些命令的功能和 作用也不同。 这就叫一个命令族。

不同厂商开发出来的uboot的命令是不同的。比如说很多uboot是没有s5pv210的uboot的movi这个命令,  取而代之的是'emmc'来完成'movi'功能


uboot中环境变量的设置和save:

以set/setenv命令来说明uboot环境变量的加载和save过程。

set/setenv函数的使用语法:

set name value;

set/setenv函数的使用例子:

set bootdelay 3;设置开机延时时间

但是如果单单只执行这一条指令,你会发现改变的仅仅是内存中的环境变量bootdelay,下次开机的时候,还是原来的环境变量。

原因:

因为在开机上电的时候,启动uboot的同时,也会将flash中环境变量分区拷贝到内存中一份(整个程序上电期间只拷贝这一次),但是调用set命令来修改环境变量只修改了内存中的那部分,如果此时掉电(内存中的数据就无效了)并且没有save命令,则下次开机的时候还是原来的环境变量,相当于上一次的set命令根本就没有保存。要想下次开机时候得到的是修改后的环境变量,则必须调用save命令,将内存中已经被修改的环境变量整体写到flash的环境变量分区中。为什么不能单独写入那个被修改的环境变量呢?因为flash是块设备。










0 0
原创粉丝点击