uboot 及其常用命令

何为 U-BOOT?

在嵌入式操作系统中,Boot Loader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。我们都知道在PC中,电脑开机后首先会进入BIOS,它可以引导win操作系统的启动,接着会进入C盘读取文件,启动APP。在嵌入式系统中,U-BOOT就是起到类似BIOS作用的,它可以引导Linux内核启动,从而挂载根文件系统,启动APP。u-boot 的本质是一个裸机程序,其主要目的是帮助启动内核。
在这里插入图片描述

uboot 常用命令

1. 查询帮助信息

  • help/?
    查看帮助信息,若果要查看具体某一命令帮助信息: ? 【命令名】

2. 信息查询命令

  • bdinfo
    查询板子信息

  • printenv
    查询板子的环境变量

  • saveenv
    保存环境变量

  • setenv
    修改环境变量、新建环境变量、删除环境变量

    修改/新增环境变量
    如果修改字符串(有空格)需要使用‘’
    
    setenv bootdelay 5
    saveenv
    
    setenv bootcmd 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
    saveenv
    
    删除环境变量,设置空值即为删除
    setenv author
    saveenv
    

3. 内存操作命令

  • md 用于显示内存值
    md[.b, .w, .l] address [# of objects]
    [.b .w .l] 对应 byte、 word 和 long,也就是分别以 1 个字节、 2 个字节、 4 个字节来显示内存值
    address 就是要查看的内存起始地址
    [# of objects]表示要查看的数据长度

    tips:uboot 命令中的数字都是十六进制的!不是十进制的!
    例如查看以0x80000000开始的20个字节的内存值:
    md.b 80000000 14
    
  • nm 用于修改指定地址的内存值
    nm [.b, .w, .l] address
    使用q退出

    => nm.l 80000000
    80000000: fbc6f7cf ? 12345678
    80000000: 12345678 ? q
    
  • mm 命令
    mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用命令 nm 的话地址不会自增。

  • mw 命令
    命令 mw 用于使用一个指定的数据填充一段内存,命令格式如下:
    mw [ .b, .w, .l ] address value [ count ]

    => mw.l 80000000 0a0a0a0a 10
    => md.l 80000000 10
    80000000: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000010: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000020: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000030: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    
  • cp 命令
    cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 Nor Flash 中的数据拷贝到 DRAM 中。
    cp [.b, .w, .l] source target count

    => md.l 80000000 10
    80000000: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000010: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000020: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000030: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    => md.l 80000100 10
    80000100: 7fd75e7f ff5fab8f feffddf9 b3eeebdc    
    80000110: 7dd55556 f2eaeafe 657dd677 bffafaea    
    80000120: 79ffb9fd fafeffbf 5d9f75fd feeeeb6b    
    80000130: 9dfdd5f5 bfeeeebe ddffff7f ebffcbfb    
    => cp.l 80000000 80000100 10
    => md.l 80000100 10
    80000100: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000110: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000120: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    80000130: 0a0a0a0a 0a0a0a0a 0a0a0a0a 0a0a0a0a    
    
  • cmp 命令
    cmp 是比较命令,用于比较两段内存的数据是否相等。
    cmp [.b, .w, .l] addr1 addr2 count

4. 网络操作命令

  • ping 命令
    开发板的网络能否使用,是否可以和服务器(Ubuntu 主机)进行通信,通过 ping 命令就可以验证,直接 ping 服务器的 IP 地址即可

  • dhcp 命令
    dhcp 用于从路由器获取 IP 地址,前提得开发板连接到路由器上的,如果开发板是和电脑
    直连的,那么 dhcp 命令就会失效。

  • nfs 命令
    nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中的 linux 镜像和设备树下载到开发板的 DRAM 中。
    nfs [loadAddress] [ [hostIPaddr : ] bootfilename ]

    nfs 80800000 222.199.220.122:/home/jimmy/linux/nfs/zImage
    
  • tftp 命令
    tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令使用的 TFTP 协议。和 nfs 命令的区别在于, tftp 命令不需要输入文件在 Ubuntu 中的完整路径,只需要输入文件名即可。

    tftp 80800000 zImage
    

5. EMMC 和 SD 卡操作命令

  • mmc命令
    在这里插入图片描述

  • mmc read
    mmc read addr blk# cnt
    从 EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的0X80800000 地址处

    mmc dev 1 0 //切换到 MMC 分区 0
    mmc read 80800000 600 10 //读取数据
    
  • mmc write
    mmc write addr blk# cnt
    从 SD 卡分区 0 第 2 个块(扇区)开始烧写,一共烧写 742(0x2E6)个块

    mmc dev 0 0
    mmc write 80800000 2 32E
    

6.FAT 格式文件系统操作命令

  • fatinfo 命令
    fatinfo 命令用于查询指定 MMC 设备分区的文件系统信息,格式如下:fatinfo < interface > [ < dev [ : part ] > ]
    interface 表示接口,比如 mmc, dev 是查询的EMMC 分区 1 的文件系统信息,命令如下:

    fatinfo mmc 1:1
    
  • fatls 命令
    fatls 命令用于查询 FAT 格式设备的目录和文件信息,命令格式如下:fatls < interface> [< dev[ : part] >] [directory]
    interface 是要查询的接口,比如 mmc, dev 是要查询的设备号, part 是要查询的分区, directory是要查询的目录。比如查询 EMMC 分区 1 中的所有的目录和文件,输入命令:

    fatls mmc 1:1
    
  • fstype 命令
    fstype 用于查看 MMC 设备某个分区的文件系统格式,命令格式如下:fstype < interface > < dev > : < part >

    fstype mmc 0:1
    
  • fatload 命令
    fatload 命令用于将指定的文件读取到 DRAM 中,命令格式如下:
    fatload < interface > [< dev[ : part] > [< addr> [< filename > [bytes [ pos ] ] ] ] ]
    interface 为接口,比如 mmc, dev 是设备号, part 是分区, addr 是保存在 DRAM 中的起始地址, filename 是要读取的文件名字。 bytes 表示读取多少字节的数据,如果 bytes 为 0 或者省略的话表示读取整个文件。 pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。
    我们将 EMMC 分区 1 中的 zImage 文件读取到 DRAM 中的0x80800000 地址处,命令如下:

    fatload mmc 1:1 80800000 zImage
    

7.BOOT指令

  • bootz 命令
    bootz 命令用于启动 zImage 镜像文件, bootz 命令格式如下:bootz [ addr [ initrd [ : size]] [ fdt ] ]
    addr 是 Linux 镜像文件在 DRAM 中的位置
    initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用 - 代替即可
    fdt 就是设备树文件在 DRAM 中的地址

    bootz 80800000 - 83000000
    
  • bootm 命令
    bootm 和 bootz 功能类似,但是 bootm 用于启动 uImage 镜像文件。如果不使用设备树的话启动 Linux 内核的命令如下:
    bootm addr
    addr 是 uImage 镜像在 DRAM 中的首地址。
    如果要使用设备树,那么 bootm 命令和 bootz 一样,命令格式如下:bootm [addr [initrd[:size]] [fdt]]
    其中 addr 是 uImage 在 DRAM 中的首地址, initrd 是 initrd 的地址, fdt 是设备树(.dtb)文件.在 DRAM 中的首地址,如果 initrd 为空的话,同样是用“-”来替代

  • boot 命令
    boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux 系统, bootcmd 是一个很重要的环境变量!其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,其实就是启动的命令集合,具体的引导命令内容是可以修改的。比如我们要想使用 tftp 命令从网络启动 Linux 那么就可以设置 bootcmd 为“tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb; bootz 80800000 - 83000000”,然后使用 saveenv 将 bootcmd 保存起来。然后直接输入 boot 命令即可从网络启动Linux 系统,命令如下:

    setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;
    bootz 80800000 - 83000000'
    saveenv
    boot
    

8.其他指令

  • go 命令
    用于跳到指定的地址处执行应用,命令格式如下:go addr [arg …]
    使用 tftp 命令将 printf.bin下载到开发板 DRAM 的 0X87800000 地址处,因为裸机例程的链接首地址就是 0X87800000,
    最后使用 go 命令启动 printf.bin 这个应用。

    tftp 87800000 printf.bin
    go 87800000
    
  • run 命令
    run 命令用于运行环境变量中定义的命令,比如可以通过“run bootcmd”来运行 bootcmd 中的启动命令,但是 run 命令最大的作用在于运行我们自定义的环境变量。

  • mtest 命令
    mtest 命令是一个简单的内存读写测试命令,可以用来测试自己开发板上的 DDR,命令格式如下:
    mtest [start [ end [ pattern [ iterations ] ] ] ]
    start是要测试的DRAM 开始地址, end 是结束地址,比如我们测试 0X80000000~0X80001000这段内存

    mtest 80000000 80001000
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值