自己复习使用

摘抄自正点原子哥的文档,仅供自己复习使用。
UBOOT命令使用
1、信息查询命令
常用的和信息查询有关的命令有 3 个:bdinfo、printenv 和 version。
2、内存操作命令
内存操作命令就是用于直接对 DRAM 进行读写操作的,常用的内存操作命令有 md、nm、mm、mw、cp 和 cmp。
2.1、md 命令
md 命令用于显示内存值,
比如你想查看以 0X8000000 开始的 20 个字节的内存值,显示格式为.b 的话,应该使用如下所示命令:
md.b 8000000 14
数据长度单位不是字节,而是跟你所选择的显示格式有关。比如你设置要查看的内存长度为 20(十六进制为 0x14),如果显示格式为.b 的话那就表示 20 个字节;如果显示格式为.w 的话就表示 20 个 word,也就是 202=40 个字节;如果显示格式为.l 的话就表示 20
个 long,也就是 20
4=80 个字节。
uboot 命令中的数字都是十六进制的!不是十进制的!
2.2、nm 命令
nm 命令用于修改指定地址的内存值,
nm 命令同样可以以.b、.w 和.l 来指定操作格式,比如现在以.l 格式修改 0x8000000 地址的数据为 0x12345678。输入命令:
nm.l 8000000
输入上述命令以后如下图所示:
在这里插入图片描述

在上图中,8000000 表示现在要修改的内存地址,5bfeebfd 表示地址 0x8000000 现在的数据,?后面就可以输入要修改后的数据 0x12345678,输入完成以后按下回车,然后再输入‘q’即可退出。
2.3、mm 命令
mm 命令也是修改指定地址内存值的,使用 mm 修改内存值的时候地址会自增,而使用命令nm 的话地址不会自增。比如以.l 格式修改从地址 0x8000000 开始的连续 3 个内存块(3*4=12个字节)的数据为 0X05050505,操作如下图所示:
在这里插入图片描述

2.4、mw 命令
命令 mw 用于使用一个指定的数据填充一段内存,mw 命令同样可以以.b、.w 和.l 来指定操作格式,比如使用.l 格式将以 0X8000000 为起始地址的 0x10 个内存块(0x10 * 4=64 字节)填充为 0X0A0A0A0A,命令如下:
mw.l 8000000 0A0A0A0A 10
然后使用命令 md 来查看,如下图所示:
在这里插入图片描述

2.5、cp 命令
cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中。cp 命令同样可以以.b、.w 和.l 来指定操作格式,我们使用.l 格式将 0x8000000 处的地址拷贝到 0X8000100 处,长度为 0x10 个内存块(0x10 * 4=64 个字节),命令如下所示:
cp.l 8000000 8000100 10
结果如下图所示:
在这里插入图片描述

2.6、cmp 命令
cmp 是比较命令,用于比较两段内存的数据是否相等,cmp 命令同样可以以.b、.w 和.l 来指定操作格式,我们使用.l 格式来比较 0x8000000 和0X8000100 这两个地址数据是否相等,比较长度为 0x10 个内存块(16 * 4=64 个字节),命令如下所示:
cmp.l 8000000 8000100 10
结果如下图所示:
在这里插入图片描述

3、网络操作命令
ip addr 开发板 ip 地址,可以不设置,使用 dhcp 命令来从路由器获取 IP 地址
连接网线,开发板上电后 uboot 默认通过 dhcp 获取网络 ip 地址(与路由器连接时有效),若与电脑直连,可以通过以下命令手动设置:
setenv ipaddr 192.168.1.117
setenv ethaddr 00:0a:35:00:1e:53
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.16
saveenv
下载进dram中的数据,可以通过指令来看一下是不是和我们想要下载的是否一样。
在uboot中,使用命令 md.b 来查看前 0x100 个字节的数据,如下所示:
md.b 00000000 100
在虚拟机中,使用 od 命令或 xxd 命令来查看 Ubuntu 下的 zImage 文件,检查一下下载到开发板 DDR 中的数据是否与 zImage 原文件一致,命令如下:
od -tx1 -vN 0x100 zImage

xxd -g 1 -l 0x100 zImage
3.1、nfs 命令
nfs 00000000 192.168.1.16:/home/zynq/linux/nfs/zImage
命令中的“00000000”表示 zImage 保存地址,“192.168.1.16:/home/zynq/linux/nfs/zImage”表示 zImage 在 192.168.1.16 这个主机中,路径为/home/zynq/linux/nfs/zImage。
3.2、tftptboot 命令
tftpboot 命令的作用和 nfs 命令一样,都是用于通过网络下载文件到 DRAM 中,只是tftpboot 命令使用的是 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。
比如我们现在将 tftpboot 文件夹里面的 zImage 文件下载到开发板 DRAM 的 0x00000000 地址处,命令如下:
tftpboot 00000000 zImage
有时候使用tftpboot 命令从 Ubuntu 中下载文件的时候会出现如“TFTP error: ‘Permission denied’(0)”这样的错误提示,提示没有权限,出现这个错误一般有两个原因:
(1)、在 Ubuntu 中创建 tftpboot 目录的时候没有给予 tftboot 相应的权限。
(2)、tftpboot 目录中要下载的文件没有给予相应的权限。
4、EMMC 和 和 SD 卡操作命令
mmc info 输出 MMC 设备信息
mmc read 读取 MMC 中的数据,命令格式如下:
mmc read addr blk# cnt
addr 是数据读取到 DRAM 中的地址,blk 是要读取的块起始地址(十六进制),一个块是512 字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区,cnt 是要读取的块数量(十六进制)。比如从 SD 卡的第 2048(0x800)个块开始,读取 16(0x10)个块的数据到 DRAM的 0X00000000 地址处,命令如下:
mmc dev 0 0 //切换到 MMC 分区 0
mmc read 00000000 800 10 //读取数据
mmc wirte 向 MMC 设备写入数据,要将数据写到 MMC 设备里面,可以使用命令“mmc write”,格式如下:
mmc write addr blk# cnt
addr 是要写入 MMC 中的数据在 DRAM 中的起始地址,blk 是要写入 MMC 的块起始地址(十六进制),cnt 是要写入的块大小,一个块为 512 字节。注意千万不要写 SD 卡或者 EMMC 的前两个块(扇区),里面保存着分区表信息。

mmc erase 擦除 MMC 中的数据,如果要擦除 MMC 设备的指定块就是用命令“mmc erase”,命令格式如下:
mmc erase blk# cnt
blk 为要擦除的起始块,cnt 是要擦除的数量。没事不要用 mmc erase 来擦除 MMC 设备。
mmc rescan 扫描 MMC 设备
mmc part 列出 MMC 设备的分区
mmc dev 切换 MMC 设备
命令格式:mmc dev [dev] [part]
[dev]用来设置要切换的 MMC 设备号,[part]是分区号。如果不写分区号的话默认为分区0。使用如下命令切换到 eMMC:
mmc dev 1 //切换到 eMMC,0 为 SD 卡,1 为 eMMC
mmc list 列出当前有效的所有 MMC 设备
mmc hwpartition 设置 MMC 设备的分区
mmc setdsr 设置 DSR 寄存器的值
5、FAT 格式文件系统操作命令
有时候需要在 uboot 中对 SD 卡或者 EMMC 中存储的文件进行操作,这时候就要用到文件操作命令,跟文件操作相关的命令有:fatinfo、fatls、fstype、fatload 和 fatwrite,但是这些文件操作命令只支持 FAT 格式的文件系统。
5.1、fatinfo 命令
fatinfo 命令用于查询指定 MMC 指定分区的文件系统信息,格式如下:
fatinfo [<dev[:part]>]
interface 表示接口,比如 mmc,dev 是查询的设备号,part 是要查询的分区。比如我们要查询 SD 卡分区 1 的文件系统信息,命令如下:
fatinfo mmc 0:1
5.2、fatls 命令
fatls 命令用于查询 FAT 格式设备的目录和文件信息,命令格式如下:
fatls [<dev[:part]>] [directory]
interface 是要查询的接口,比如 mmc,dev 是要查询的设备号,part 是要查询的分区,directory 是要查询的目录。比如查询 SD 卡分区 1 中的所有的目录和文件,输入命令:
fatls mmc 0:1
5.3、fstype 命令
fstype 用于查看 MMC 设备某个分区的文件系统格式,命令格式如下:
fstype :
在 6.2.10 小节制作 SD 启动卡时我们将 SD 卡分成两个分区,我们来查看一下这两个分区的文件系统格式,输入命令:
fstype mmc 0:1
fstype mmc 0:2
5.4、fatload 命令
fatload 命令用于将指定的文件读取到 DRAM 中,命令格式如下:
fatload [<dev[:part]> [ [ [bytes [pos]]]]]
interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是保存在 DRAM 中的起始地址,filename 是要读取的文件名字。bytes 表示读取多少字节的数据,如果 bytes 为 0或者省略的话表示读取整个文件。pos 是要读的文件相对于文件首地址的偏移,如果为 0 或者省略的话表示从文件首地址开始读取。我们将 SD 卡分区 1 中的 BOOT.BIN 文件读取到 DRAM中的 0X00000000 地址处,命令如下:
fatload mmc 0:1 00000000 BOOT.BIN
5.5、fatwrite 命令
fatwirte 命令用于将 DRAM 中的数据写入到 MMC 设备中,命令格式如下:
fatwrite <dev[:part]>
interface 为接口,比如 mmc,dev 是设备号,part 是分区,addr 是要写入的数据在DRAM 中的起始地址,filename 是写入的数据文件名字,bytes 表示要写入多少字节的数据。
image.ub为使用tftp下载到DRAM的00000000的镜像文件, image.ub 大小为 4359168(0x428400)个字节,接下来使用命令 fatwrite 将其写入到 SD卡的分区 1 中,文件名字为 image.ub,命令如下:
fatwrite mmc 0:1 00000000 image.ub 0x428400
6、EXT 格式文件系统操作命令
uboot 有 ext2 和 ext4 这两种格式的文件系统的操作命令,常用的就四个命令,分别为:ext2load、ext2ls、ext4load、ext4ls 和 ext4write。这些命令的含义和使用与 fatload、fatls 和 fatwrit 一样,只是 ext2 和 ext4 都是针对 ext 文件系统的。比如 ext4ls 命令,SD卡的分区 2 就是 ext4 格式的,使用 ext4ls 就可以查询 SD 卡的分区 2 中的文件和目录,输入命令:
ext4ls mmc 0:2
7、系统引导命令
uboot 的本质工作是引导操作系统如 Linux,所以 uboot 肯定有相关的引导(boot)命令来启动操作系统。常用的跟系统引导有关的命令有:bootm、bootz 和 boot。
7.1、bootm 命令
bootm 命令用于启动在内存中的用 mkimage 工具处理过的内核映象。由于 zynq 使用image.ub 镜像文件,而 image.ub 镜像文件属于 U-Boot fitImage(参考 18.3 节 image.ub 的来源),里面通常包括 linux 内核和设备树,所以可以将 image.ub 镜像文件写到 DRAM 中,然后使用 bootm 命令来启动。启动 Linux 内核的命令如下:
bootm addr
addr 是 image.ub 镜像在 DRAM 中的首地址。
tftpboot 10000000 image.ub
bootm 10000000
两个指令合成一个:tftpboot 10000000 image.ub && bootm或
tftpboot 10000000 image.ub && bootm 10000000
7.2、bootz 命令
bootz 和 bootm 功能类似,只是 bootz 命令用于启动 zImage 镜像文件,zynq 使用的不多,了解即可。bootz 命令格式如下:
bootz [addr [initrd[:size]] [fdt]]
命令 bootz 有三个参数,addr 是 Linux zImage 镜像文件在 DRAM 中的位置,initrd 是initrd 文件在 DRAM 中的地址,这个其实就是前面给大家提到的 INITRAM 根文件系统的在内存中的地址,如果不使用 initrd 的话使用‘-’代替即可,fdt 就是设备树文件在 DRAM 中的地址。
使用 tftpboot 命令将 zImage 下载到 DRAM 的 0x00000000 地址处,然后将设备树system.dtb 下载到 DRAM 中的 0x05000000 地址处,最后使用命令 bootz 启动,命令如下:
tftpboot 00000000 zImage
tftpboot 05000000 system.dtb
bootz 00000000 - 05000000
上面就是我们通过 tftpboot 和 bootz 命令来从网络启动 Linux 系统。如果我们要从 SD中启动 Linux 系统的话只需要使用命令 fatload 将 zImage 和 system.dtb 从 SD 卡的分区 1 中拷贝到 DRAM 中,然后使用命令 bootz 启动即可,bootm 同理。
命令如下:
fatload mmc 0:1 00000000 image.ub && bootm 10000000
7.3、boot 命令
boot 命令也是用来启动 Linux 系统的,只是 boot 会读取环境变量 bootcmd 来启动 Linux系统,bootcmd 是一个很重要的环境变量!其名字分为“boot”和“cmd”,也就是“引导”和“命令”,说明这个环境变量保存着引导命令,其实就是启动的命令集合,具体的引导命令内容是可以修改的。比如我们要想使用 tftpboot 命令从网络启动 Linux 那么就可以设置bootcmd 为“tftpboot 10000000 image.ub;bootm”,然后使用 saveenv 将 bootcmd 保存起来。然后直接输入 boot 命令即可从网络启动 Linux 系统,命令如下:
setenv bootcmd ‘tftpboot 10000000 image.ub;bootm’
boot
前面说过 uboot 倒计时结束以后就会启动 Linux 系统,其实就是执行的 bootcmd 中的启动命令。
8、其他常用命令
uboot 中还有其他一些常用的命令,比如 reset、run 和 mtest 等。
8.1、reset 命令
reset 命令顾名思义就是复位,输入“reset”即可复位重启。
8.2、run 命令
run 命令用于运行环境变量中定义的命令,比如可以通过“run bootcmd”来运行bootcmd 中的启动命令。我们在讲解 bootm 命令时就使用过“run netboot”命令以使用 tftp网络协议下载 linux 镜像并启动。
run 命令运行环境变量,那么其实就是解析环境变量,将变量的内容解析出来,如果是变量的内容是可执行的命令那么就运行此命令,所以不是什么环境变量都可以使用 run 来运行的,必须要求该变量的内容是可执行的命令或其它可运行的逻辑语句。
常用的逻辑语句也就是 if…then…else 等。
8.3、mtest 命令
mtest 命令是一个简单的内存读写测试命令,可以用来测试自己开发板上的 DDR,命令格式如下:
mtest [start [end [pattern [iterations]]]]
start 是要测试的 DRAM 开始地址,end 是结束地址,比如我们测试
0X00000000~0X00001000 这段内存,输入“mtest 00000000 00001000”,结果如下图所示:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值