(1)注释掉一下内容
输入print命令,效果如下:
可以看到我们设置的默认环境变量,但是开发板启动的时候依然有警告说CRC校验错误,使用默认的环境变量。原因在于uboot启动的时候会先从Nand Flash中读取环境变量的内容,然后做一个CRC校验,如果校验错误就输出了警告信息。需要知道的是我们并没有在Nand Flash中保存环境变量,所以开发板启动的时候做CRC校验的时候就错误了。
怎么解决这个问题呢?
做法很简单,我们只需要输入save命令将当前默认的环境变量保存到Nand Flash即可。做法如下:
可以看到uboot默认将环境变量保存在Nand Flash的0x40000起始地址。需要注意的是,你的uboot大小一定不能超过0x40000
即256Byte,否则在save保存环境变量的时候,就会把uboot的内容破坏掉,最后出现的效果就是你在uboot中输入任何命令都无法识别。
如果想修改环境变量的值怎么办呢?
通过命令"setenv 环境变量名 内容"进行设置就可以了,设置成功之后用save命令保存一下就可以了。
貌似到目前为止,我们都没有用uboot启动内核,接下来我们就用我们的uboot来启动内核。
五、uboot 引导 Linux 内核的两种方式
1. uboot 通过网络引导Linux 内核
从上图可以看到,uboot 运行起来后,通过网络服务将Linux 内核从PC机上下载到开发板的内存中,然后在跳到内核所在的内存地址去执行。 做法如下:
<1>通过 tftp 20008000 zImage 命令下载内核镜像zImage到内存地址20008000
<2>通过go 20008000命令跳到20008000地址运行Linux 内核。
需要注意的是,我们的go命令已经做过修改了哦,如果没有做过修改是不能正常引导Linux 内核的,原因你懂得。
效果如下:
通过网络的方式引导Linux 内核,多用于开发调试阶段,这样我们只需要将编译好的Linux 内核拷贝到PC主机的TFTP服务的工作目录中,然后在开发板那边用tftp命令下载到开发板的内存中运行就可以测试 Linux 内核是否OK。
2.uboot 从Nand Flash 中引导Linux 内核
从上面我们可以看到,我们已经将嵌入式系统完全烧写到 Nand Flash 中,当开发板一上电启动的时候,uboot 会先运行起来,接着uboot 会用nand read 命令从Nand Flash中将Linux 内核读到内存的某个地址,然后跳到Linux 内核所在的地址去运行。
我们先将Linux 内核烧写到Nand Flash ,做法如下:
<1>tftp 20008000 zImage
<2>nand erase 20000000 300000
<3>nand write 20008000 20000000 300000
效果如下:
接下来我们从Nand Flash引导Linux 内核,做法如下:
<1>nand read 20008000 200000 300000
<2>go 20008000
效果如下:
uboot 从Nand Flash 中引导Linux 内核这种方式, 用于最终在产品发布的时候。
以上操作需要注意的一点是,如果操作的是uImage,则需要用bootm命令引导Linux 内核。