uboot——简介和常用命令及环境变量

一、背景
  首先我们应该明白计算机系统的三个核心:CPU + 外部储存器(Flash/硬盘) + 内部储存器(DDR/DRAM/SRAM)。
  典型的linux嵌入式系统启动过程:嵌入式系统上电后先执行uboot,接着uboot负责初始化DDR、Flash,然后将Flash读取到DDR中,最后启动OS(OS启动后uboot就无用了)。
  uboot是一种普遍用于嵌入式系统中的bootloader(在操作系统运行之前的一小段程序),通过它初始化硬件设备、建立内存空间的映射表,从而建立适当的软硬件环境,为最终调用操作系统内核做好准备。bootloader的主要运行任务就是将内核映像从硬盘上读到RAM中,然后跳转到内核的入口点运行,即开始启动操作系统。系统在上电或复位时通常都从地址0x00000000出开始执行,而这个地址处安排的通常就是系统的bootloader程序。
二、uboot常用命令
Linux中I/O操作的缓冲机制:
  无缓冲:标准I/O库不进行任何字符缓冲,任何读写都是即时可见的
  行缓冲:当在输入或输出中遇到换行符时,才进行实际I/O操作。Linux下标准输出默认是行缓冲。
  全缓冲:全缓冲就是当输入或输出时,当缓冲区被填满了之后,才会进行实际的I/O操作

环境变量:环境变量就好像程序的全局变量,程序的任何地方都可以根据需要去调用或者更改环境变量。区别是全局变量的生命周期是从开始运行到结束,而环境变量被存储在Flash的另一块专门的区域(Flash上有一个环境变量分区),一旦在程序中保存了该环境变量,那么下次开机时该环境变量的值将位置上一次更改保存后的值。
                     环境变量(environmental variables)简称ENV

常用环境变量解释说明
bootargsuboot给kernel传参
bootcmd自动运行命令,开机bootdelay秒,没人则uboot自动执行启动命令来启动内核,开机自动启动实际是执行了bootcmd这个环境变量所对应的命令集
bootdelay执行自动启动(bootcmd中的命令)的等候秒数
netmask以太网的网络掩码
ethaddr以太网的MAC地址
gatewayip网关地址
serveripTFTP服务器端的IP地址
ipaddr本地的IP地址
baudrate串口控制台的波特率
stdin标准输入设备,一般是串口
stdout标准输出,一般是串口,也可是LCD(VGA)
stderr标准出错,一般是串口,也可是LCD(VGA)

如果想要看到开发板的ENV值,可以使用printenv命令来打印。
dnw:在进入系统之前进入指令行,输入该指令可下载烧录文件。

re:重新启动嵌入式系统。

printenv:打印当前系统环境变量。

setenv:设置环境变量,格式:setenv name value …,表示将name 变量设置成value 值;如果没有这个参数,表示删除该变量。

saveenv:保存环境变量到NAND中。

sleep:延迟执行,格式:sleep N,可以延迟N秒钟执行。

run:执行环境变量中的命令,格式:run var,可以跟几个环境变量名。

crc32:计算校验值,格式:crc32 address count [addr],第一个参数是需校验的起始地址,第二个参数是校验的数据字节数,第三个参 数是保存校验值的地址。

cp:在内存中复制数据块,格式:cp source target count,第一个参数是源地址,第二个参数是目的地址,第三个参数是复制数目。

cmp:比较内存中的数据块,格式:cmp addr1 addr2 count,第一个参数是内存地址一,第二个参数是内存地址二,第三个是比较长度(单位是字节数除以4,以WORDS为单位)。

bootm:可以引导启动存储在内存中的程序映像。格式:bootm addr1 addr2,第一个参数是程序映像的地址,第二个参数一般是RAMDISK地址。

nand scrub:暴力擦除指令,擦除整个NAND,会擦除bad block标记。

nand erase:擦除NAND,格式:nand erase addr1 count,第一个参数是OFFSET,第二个参数是擦除字节数。其中OFFSET是相对于Download地址。

nand write:下载的内存数据写入NAND,格式:nand write addr offset count,第一个参数是写入基地址,第二个参数是偏移地址,第三个参数是写入字节数。

nand read:讲NAND数据读取到内存,格式:nand read addr offset count,第一个参数是读取的NAND地址,第二个参数是内存位置偏移,第三个参数是读取字节数。

nand bad:测试NAND FLASH坏块的命令。如:nand bad,即可显示坏的区块地址。

通常我们会回写数据来测试写入跟读取的数据是否一致,如:

假设Download Address: 0xc0000000,Download Filesize:0x1df48c

nand erase 600000 300000 //擦除c0600000为开始的300000个字节

nand write c0000000 600000 300000 //往刚擦除的空间写入内存起始地址的数据共300000个长度

nand read c0600000 600000 300000 //读取刚写入的NAND地址共300000个长度到偏移600000的内存中

cmp c0600000 c0000000 300000 //比较两段内存的数据是否相同

help 查询命令
如果想要指导某条命令如何使用,可以使用help命令
例如

x210 # help md
md [.b, .w, .l] address [# of objects]
          - memory display

如果是一对“{}”括起来表示参数必选一个,“[]”表示可选参数,其中uboot所有数字默认十六进制。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值