• uboot命令1


    U-Boot命令使用


    进入uboot的命令行模式以后输入“help”或者“?”,然后按下回车即可查看当前uboot所支持的命令.

    在这里插入图片描述

     图中只是uboot的一部分命令,具体的命令列表以实际为准。图30.4.1中的命令并不是uboot所支持的所有命令,前面说过uboot是可配置的,需要什么命令就使能什么命令。所以图30.4.1中的命令是正点原子提供的uboot中使能的命令,uboot支持的命令还有很多,而且也可以在uboot中自定义命令。这些命令后面都跟有命令说明,用于描述此命令的作用,但是命令具体怎么用呢?我们输入“help(或?) 命令名”既可以查看命令的详细用法,以“bootz”这个命令为例,我们输入如下命令即可查看“bootz”这个命令的用法:

    在这里插入图片描述

    1 信息查询命令
    常用的和信息查询有关的命令有3个:bdinfo、printenv和version。先来看一下bdinfo命令,此命令用于查看板子信息,直接输入“bdinfo”即可。

    在这里插入图片描述 

    从图中可以得出DRAM的起始地址和大小、启动参数保存起始地址、波特率、sp(堆栈指针)起始地址等信息。 

    命令“printenv”用于输出环境变量信息,uboot也支持TAB键自动补全功能,输入“print”然后按下TAB键就会自动补全命令,直接输入“print”也可以。输入“print”,然后按下回车键,环境变量如图所示:

    在这里插入图片描述

    在图中有很多的环境变量,比如baudrate、board_name、board_rec、boot_fdt、bootcmd等等。uboot中的环境变量都是字符串,既然叫做环境变量,那么它的作用就和“变量”一样。比如bootdelay这个环境变量就表示uboot启动延时时间,默认bootdelay=3,也就默认延时3秒。前面说的3秒倒计时就是由bootdelay定义的,如果将bootdelay改为5的话就会倒计时5s了。uboot中的环境变量是可以修改的,有专门的命令来修改环境变量的值。

    2.修改环境变量
    环境变量的操作涉及到两个命令:setenv和saveenv,命令setenv用于设置或者修改环境变量的值。命令saveenv用于保存修改后的环境变量,一般环境变量是存放在外部flash中的,uboot启动的时候会将环境变量从flash读取到DRAM中。所以使用命令setenv修改的是DRAM中的环境变量值,修改以后要使用saveenv命令将修改后的环境变量保存到flash中,否则的话uboot下一次重启会继续使用以前的环境变量值。
    命令saveenv使用起来很简单,格式为:
    saveenv
    比如我们要将环境变量bootdelay改为5,就可以使用如下所示命令:
    setenv bootdelay 5
    saveenv
    在这里插入图片描述

    当我们使用命令saveenv保存修改后的环境变量的话会有保存过程提示信息,根据提示可以看出环境变量保存到了MMC(0)中,也就是SD卡中。因为我们现在将uboot烧写到了SD卡里面,所以会保存到MMC(0)中。如果烧写到EMMC里面就会提示保存到MMC(1),也就是EMMC设备,同理,如果是NAND版本核心板的话就会提示保存到NAND中。
    修改bootdelay以后,重启开发板,uboot就是变为5秒倒计时
    在这里插入图片描述

    新建环境变量
    命令setenv也可以用于新建命令,用法和修改环境变量一样,比如我们新建一个环境变量author,author的值为我的名字拼音:zuozhongkai,那么就可以使用如下命令:
    setenv author zuozhongkai
    saveenv
    新建命令author完成以后重启uboot,然后使用命令printenv查看当前环境变量
    在这里插入图片描述

    删除环境变量
    既然可以新建环境变量,肯定也可以删除环境变量,删除环境变量也是使用命令setenv,要删除一个环境变量只要给这个环境变量赋空值即可,比如我们删除掉上面新建的author这个环境变量,命令如下:
    setenv author
    saveenv
    上面命令中通过setenv给author赋空值,也就是什么都不写来删除环境变量author。重启uboot就会发现环境变量author没有了。
    3。内存操作命令
    内存操作命令就是用于直接对DRAM进行读写操作的,常用的内存操作命令有md、nm、mm、mw、cp和cmp。我们依次来看一下这些命令都是做什么的。
    1、md命令
    md命令用于显示内存值,格式如下:
    md[.b, .w, .l] address [# of objects]
    命令中的[.b .w .l]对应byte、word和long,也就是分别以1个字节、2个字节、4个字节来显示内存值。address就是要查看的内存起始地址,[# of objects]表示要查看的数据长度,这个数据长度单位不是字节,而是跟你所选择的显示格式有关。比如你设置要查看的内存长度为20(十六进制为0x14),如果显示格式为.b的话那就表示20个字节;如果显示格式为.w的话就表示20个word,也就是202=40个字节;如果显示格式为.l的话就表示20个long,也就是204=80个字节。另外要注意:
    uboot命令中的数字都是十六进制的!不是十进制的!
    比如你想查看以0X80000000开始的20个字节的内存值,显示格式为.b的话,应该使用如下所示命令:
    md.b 80000000 14
    而不是:
    md.b 80000000 20
    上面说了,uboot命令里面的数字都是十六进制的,所以可以不用写“0x”前缀,十进制的20其十六进制为0x14,所以命令md后面的个数应该是14,如果写成20的话就表示查看32(十六进制为0x20)个字节的数据。分析下面三个命令的区别:
    md.b 80000000 10
    md.w 80000000 10
    md.l 80000000 10
    上面这三个命令都是查看以0X80000000为起始地址的内存数据,第一个命令以.b格式显示,长度为0x10,也就是16个字节;第二个命令以.w格式显示,长度为0x10,也就是162=32个字节;最后一个命令以.l格式显示,长度也是0x10,也就是164=64个字节。

    在这里插入图片描述

    nm命令
    nm命令用于修改指定地址的内存值,命令格式如下:
    nm [.b, .w, .l] address

    在这里插入图片描述 80000000表示现在要修改的内存地址,0500e031表示地址0x80000000现在的数据,?后面就可以输入要修改后的数据0x12345678,输入完成以后按下回车,然后再输入‘q’即可退出,

    在这里插入图片描述mm命令
    mm命令也是修改指定地址内存值的,使用mm修改内存值的时候地址会自增,而使用命令nm的话地址不会自增。比如以.l格式修改从地址0x80000000开始的连续3个内存块(3*4=12个字节)的数据为0X05050505。

    在这里插入图片描述 mw命令
    命令mw用于使用一个指定的数据填充一段内存,命令格式如下:
    mw [.b, .w, .l] address value [count]
    mw命令同样可以以.b、.w和.l来指定操作格式,address表示要填充的内存起始地址,value为要填充的数据,count是填充的长度。比如使用.l格式将以0X80000000为起始地址的0x10个内存块(0x10 * 4=64字节)填充为0X0A0A0A0A,命令如下:
    mw.l 80000000 0A0A0A0A 10
    在这里插入图片描述

    cp命令
    cp是数据拷贝命令,用于将DRAM中的数据从一段内存拷贝到另一段内存中,或者把Nor Flash中的数据拷贝到DRAM中。命令格式如下:
    cp [.b, .w, .l] source target count
    cp命令同样可以以.b、.w和.l来指定操作格式,source为源地址,target为目的地址,count为拷贝的长度。我们使用.l格式将0x80000000处的地址拷贝到0X80000100处,长度为0x10个内存块(0x10 * 4=64个字节),命令如下所示:
    cp.l 80000000 80000100 10
    在这里插入图片描述

    cmp命令
    cmp是比较命令,用于比较两段内存的数据是否相等,命令格式如下:
    cmp [.b, .w, .l] addr1 addr2 count
    cmp命令同样可以以.b、.w和.l来指定操作格式,addr1为第一段内存首地址,addr2为第二段内存首地址,count为要比较的长度。我们使用.l格式来比较0x80000000和0X80000100这两个地址数据是否相等,比较长度为0x10个内存块(16 * 4=64个字节),命令如下所示:
    cmp.l 80000000 80000100 10
    在这里插入图片描述

     

     

  • 相关阅读:
    【java实战】项目经验_04
    六石管理学:水平不高,照抄就好
    ssh 免密码登录
    【TensorFlow】带你搞懂 TensorFlow 中的张量数据结构
    快鲸智慧楼宇:助力商业地产快速实现数字化转型升级
    运行open62541基于TSN网络的pub/sub示例(ETH+ UDP)
    如何让代码为微服务做好准备
    facebook引流软件需要具备什么功能
    使用sngrep跟踪分析sip信令
    SpringBoot集成OpenFeign实现文件下载
  • 原文地址:https://blog.csdn.net/qq_66545503/article/details/126922744