I.MX6ULL学习笔记(一)

(一)U-Boot启动实验

学习正点原子I.MX6Ull记录,从UBoot开始,U-Boot是一款引导启动的工具,在引导完成操作系统启动之后,就寿终正寝了。

U-Boot命令使用

U-Boot启动之后,在MobaXterm中输入“help”,出现如下界面。可以查看所支持的命令信息。
在这里插入图片描述

信息查询命令

1、bdinfo

查看开发板所以硬件信息,包括但不限于DRAM 的起始地址和大小、启动参数保存起始地址、波特率、sp(堆栈指针)起始地址等信息。
在这里插入图片描述

2、printenv

输出环境变量信息,比如 baudrate、board_name、board_rec、boot_fdt、bootcmd等等。uboot 中的环境变量都是字符串,既然叫做环境变量,那么它的作用就和“变量”一样。比如 bootdelay 这个环境变量就表示 uboot 启动延时时间,默认 bootdelay=3,也就默认延时 3秒。
在这里插入图片描述

3、version

用于查看 uboot 的版本号
在这里插入图片描述

修改环境变量操作

1、修改环境

环境变量的操作涉及到两个命令:setenvsaveenv
命令 setenv 用于设置或者修改环境变量的值。命令 saveenv 用于保存修改后的环境变量,一般环境变量是存放在外部 flash 中的,uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中。
比如要将环境变量 bootdelay 改为 5,就可以使用如下所示命令:

setenv bootdelay 5
saveenv

在这里插入图片描述

2、新建环境变量

命令 setenv 也可以用于新建命令,比如我们新建一个环境变量
author,author 的值为我的名字拼音:zuozhongkai,那么就可以使用如下命令:

setenv author kalaxiaoke
saveenv

查看并且保存环境变量。
在这里插入图片描述

3、删除环境变量

要删除一个环境变量只要给这个环境变量赋空值即可,比如我们删除掉上面新建的 author 这个环境变量,命令如下:

setenv author
saveenv

在这里插入图片描述

信息查询命令

内存操作命令就是用于直接对 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 个字节来显示内存值。
注意:uboot 命令中的数字都是十六进制的!不是十进制的!
查看以 0X80000000 开始的 20 个字节的内存值,显示格式为.b 的话,应该使用如下所示命令:

md.b 80000000 14

在这里插入图片描述三者打印区别,如下图所示:

md.b 80000000 10
md.w 80000000 10
md.l 80000000 10

在这里插入图片描述

2、nm 命令

nm 命令用于修改指定地址的内存值,命令格式如下:

nm [.b, .w, .l] address

nm 命令同样可以以.b、.w 和.l 来指定操作格式,比如现在以.l 格式修改 0x80000000 地址的数据为 0x12345678。输入命令:

nm.l 80000000

查看结果:
在这里插入图片描述

3、mm 命令

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

4、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

在这里插入图片描述

5、cp 命令

cp 是数据拷贝命令,用于将 DRAM 中的数据从一段内存拷贝到另一段内存中,或者把 Nor Flash 中的数据拷贝到 DRAM 中。命令格式如下:

cp [.b, .w, .l] source target count

使用.l 格式将 0x80000000 处的地址拷贝到 0X80000100 处,长度为 0x10 个内存块(0x10 * 4=64 个字节),命令如下所示:

cp.l 80000000 80000100 10

执行过程如下图所示:
在这里插入图片描述

6、cmp 命令

cmp 是比较命令,用于比较两段内存的数据是否相等,命令格式如下:

cmp [.b, .w, .l] addr1 addr2 count

使用.l 格式来比较 0x80000000 和 0X80000100 这两个地址数据是否相等,比较长度为 0x10 个内存块(16 * 4=64 个字节),命令如下所示:

cmp.l 80000000 80000100 10

比较相同处:
在这里插入图片描述
比较不同处:在这里插入图片描述

网络操作命令

1、ping命令

环境变量设置命令:

setenv ipaddr 192.168.0.102   //开发板的IP地址
setenv ethaddr b8:ae:1d:01:00:00  //开发板的网络MAC地址
setenv gatewayip 192.168.0.1  	//开发板的
setenv netmask 255.255.255.0
setenv serverip 192.168.0.102  //设置主机的地址
saveenv

设置完成的界面如图所示:
在这里插入图片描述ping主机和虚拟机:
在这里插入图片描述

2、dhcp 命令

在这里插入图片描述从图可以看出,开发板通过 dhcp 获取到的 IP 地址为 192.168.1.101。
查看DHCP命令的详细信息。
在这里插入图片描述

3、nfs 命令

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

nfs [loadAddress] [[hostIPaddr:]bootfilename]

准备好以后就可以使用 nfs 命令来将 zImage 下载到开发板 DRAM 的 0X80800000 地址处,命令如下:
实验示例如下图所示:

在这里插入图片描述
文件大小和下载目录的大小如下图所示:在这里插入图片描述
使用md.b命令查看数据内容,符合实验原理。
在这里插入图片描述

4、tftp 命令

tftp 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令
使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。

tftpboot [loadAddress] [[hostIPaddr:]bootfilename]

比如我们现在将 tftpboot 文
件夹里面的 zImage 文件下载到开发板 DRAM 的 0X80800000 地址处,命令如下:

tftp 80800000 zImage

在这里插入图片描述

EMMC和SD卡操作命令

查看mmc的所有命令:
在这里插入图片描述

1、mmc info 命令

mmc info 命令用于输出当前选中的 mmc info 设备的信息在这里插入图片描述

2、mmc rescan 命令

mmc rescan 命令用于扫描当前开发板上所有的 MMC 设备,包括 EMMC 和 SD 卡,输入
“mmc rescan”即可。

3、mmc list 命令

mmc list 命令用于来查看当前开发板一共有几个 MMC 设备,输入“mmc list”,结果如图
在这里插入图片描述

4、mmc dev 命令

mmc dev 命令用于切换当前 MMC 设备,命令格式如下:
[dev]用来设置要切换的 MMC 设备号,[part]是分区号。

mmc dev [dev] [part]

使用如下命令切换到 SD 卡:

mmc dev 1 //切换到 SD 卡,0 为 SD 卡,1 为 eMMC

在这里插入图片描述

5、mmc part 命令

有时候 SD 卡或者 EMMC 会有多个分区,可以使用命令“mmc part”来查看其分区,比如
查看 EMMC 的分区情况,输入如下命令:

mmc dev 1 //切换到 EMMC
mmc part //查看 EMMC 分区

在这里插入图片描述此时 EMMC 有两个分区,第一个分区起始扇区为 20480,长度为 262144 个扇区;第二个分区起始扇区为 282624,长度为 14594048 个扇区。如果 EMMC 里面烧写了 Linux 系统的话,EMMC 是有 3 个分区的,第 0 个分区存放 uboot,第 1 个分区存放Linux 镜像文件和设备树,第 2 个分区存放根文件系统。
如果要将 EMMC 的分区 2 设置为当前 MMC 设备,可以使用如下命令:

mmc dev 1 2

在这里插入图片描述

6、mmc read 命令

mmc read 命令用于读取 mmc 设备的数据,命令格式如下:

mmc read addr blk# cnt

addr 是数据读取到 DRAM 中的地址,blk 是要读取的块起始地址(十六进制),一个块是 512
字节,这里的块和扇区是一个意思,在 MMC 设备中我们通常说扇区,cnt 是要读取的块数量(十六进制)。比如从 EMMC 的第 1536(0x600)个块开始,读取 16(0x10)个块的数据到 DRAM 的 0X80800000 地址处,命令如下:

mmc dev 1 0 //切换到 MMC 分区 0
mmc read 80800000 600 10 //读取数据
7、mmc write 命令

要将数据写到 MMC 设备里面,可以使用命令“mmc write”,格式如下:

mmc write addr blk# cnt

addr 是要写入 MMC 中的数据在 DRAM 中的起始地址,blk 是要写入 MMC 的块起始地址
(十六进制),cnt 是要写入的块大小,一个块为 512 字节。可以使用命令“mmc write”来升级 uboot,也就是在 uboot 中更新 uboot。这里要用到 nfs 或者 tftp 命令,通过 nfs 或者 tftp 命令将新的 u-boot.bin 下载到开发板的 DRAM 中,然后再使用命令“mmc write”将其写入到 MMC设备中。我们就来更新一下 SD 中的 uboot,先查看一下 SD 卡中的 uboot 版本号,注意编译时间,输入命令:

mmc dev 0 //切换到 SD 卡
version //查看版本号

在这里插入图片描述
可以看出当前 SD 卡中的 uboot 是 2021 年 10 月 12 日 编译的。我们现在重新编译一下 uboot,然后将编译出来的u-boot.imx(u-boot.bin 前面加了一些头文件)拷贝到 Ubuntu 中的tftpboot 目录下。最后使用 tftp 命令将其下载到 0x80800000 地址处,命令如下:

tftp 80800000 u-boot.imx
8、mmc erase 命令

如果要擦除 MMC 设备的指定块就是用命令“mmc erase”,命令格式如下:

mmc erase blk# cnt

FAT 格式文件系统操作命令

有时候需要在 uboot 中对 SD 卡或者 EMMC 中存储的文件进行操作,这时候就要用到文件
操作命令,跟文件操作相关的命令有:fatinfo、fatls、fstype、fatload 和 fatwrite,但是这些文件操作命令只支持 FAT 格式的文件系统!!

1、fatinfo 命令

fatinfo 命令用于查询指定 MMC 设备分区的文件系统信息,格式如下:

fatinfo <interface> [<dev[:part]>]

interface 表示接口,比如 mmc,dev 是查询的设备号,part 是要查询的分区。比如我们要查
询 EMMC 分区 1 的文件系统信息,命令如下:

fatinfo mmc 1:1

在这里插入图片描述

2、fatls 命令

fatls 命令用于查询 FAT 格式设备的目录和文件信息,命令格式如下:

fatls <interface> [<dev[:part]>] [directory]

interface 是要查询的接口,比如 mmc,dev 是要查询的设备号,part 是要查询的分区,directory
是要查询的目录。比如查询 EMMC 分区 1 中的所有的目录和文件,输入命令:

fatls mmc 1:1

在这里插入图片描述
从上图可以看出,emmc 的分区 1 中存放着 8 个文件。

3、fstype 命令

fstype 用于查看 MMC 设备某个分区的文件系统格式,命令格式如下:

fstype <interface> <dev>:<part>

EMMC 核心板上的 EMMC 默认有 3 个分区,我们来查看一下这三个分区的文件
系统格式,输入命令:

fstype mmc 1:0 
fstype mmc 1:1
fstype mmc 1:2

在这里插入图片描述

4、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
在这里插入图片描述

5、fatwrite 命令

fatwirte 命令用于将 DRAM 中的数据写入到 MMC 设备中,命令格式如下:

fatwrite <interface> <dev[:part]> <addr> <filename> <bytes>

其他常用命令

1、reset 命令

reset 命令顾名思义就是复位的,输入“reset”即可复位重启。
在这里插入图片描述

2、go 命令

go 命令用于跳到指定的地址处执行应用,命令格式如下:

go addr [arg ...]
3、run 命令

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

4、mtest 命令

mtest 命令是一个简单的内存读写测试命令,可以用来测试自己开发板上的 DDR,命令格
式如下:

mtest [start [end [pattern [iterations]]]]

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值